{-# LANGUAGE DerivingStrategies #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE ViewPatterns #-}
{-# OPTIONS_GHC -Wno-incomplete-uni-patterns #-}
module Convex.ThreatModel.TxModifier where
import Cardano.Api
import Cardano.Ledger.Alonzo.TxBody qualified as Ledger
import Cardano.Ledger.Alonzo.TxWits qualified as Ledger
import Cardano.Ledger.Api.Era qualified as Ledger
import Cardano.Ledger.Binary qualified as CBOR
import Cardano.Ledger.Conway.Scripts qualified as Conway
import Cardano.Ledger.Conway.TxBody qualified as Conway
import Cardano.Ledger.Keys (coerceKeyRole)
import Cardano.Ledger.Mary.Value qualified as Mary
import Data.Coerce
import Cardano.Ledger.Alonzo.Scripts qualified as Ledger
import Data.Map qualified as Map
import Data.Maybe
import Data.Maybe.Strict
import Data.Sequence.Strict qualified as Seq
import Data.Set qualified as Set
import PlutusLedgerApi.Test.Examples (alwaysSucceedingNAryFunction)
import Data.Aeson (object, (.=))
import Data.Text qualified as Text
import Convex.TestingInterface.Trace.TxSummary (renderAssetName, renderDatum, toValueSummary)
import Convex.ThreatModel.Cardano.Api
data Output = Output
{ Output -> TxOut CtxTx Era
outputTxOut :: TxOut CtxTx Era
, Output -> TxIx
outputIx :: TxIx
}
deriving (Int -> Output -> ShowS
[Output] -> ShowS
Output -> [Char]
(Int -> Output -> ShowS)
-> (Output -> [Char]) -> ([Output] -> ShowS) -> Show Output
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Output -> ShowS
showsPrec :: Int -> Output -> ShowS
$cshow :: Output -> [Char]
show :: Output -> [Char]
$cshowList :: [Output] -> ShowS
showList :: [Output] -> ShowS
Show)
data Input = Input
{ Input -> TxOut CtxUTxO Era
inputTxOut :: TxOut CtxUTxO Era
, Input -> TxIn
inputTxIn :: TxIn
}
deriving (Int -> Input -> ShowS
[Input] -> ShowS
Input -> [Char]
(Int -> Input -> ShowS)
-> (Input -> [Char]) -> ([Input] -> ShowS) -> Show Input
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Input -> ShowS
showsPrec :: Int -> Input -> ShowS
$cshow :: Input -> [Char]
show :: Input -> [Char]
$cshowList :: [Input] -> ShowS
showList :: [Input] -> ShowS
Show)
class IsInputOrOutput t where
changeAddressOf :: t -> AddressAny -> TxModifier
changeValueOf :: t -> Value -> TxModifier
changeDatumOf :: t -> Datum -> TxModifier
changeRefScriptOf :: t -> ReferenceScript Era -> TxModifier
addressOf :: t -> AddressAny
valueOf :: t -> Value
refScriptOf :: t -> ReferenceScript Era
instance IsInputOrOutput Output where
changeAddressOf :: Output -> AddressAny -> TxModifier
changeAddressOf Output
o AddressAny
a = TxMod -> TxModifier
txMod (TxMod -> TxModifier) -> TxMod -> TxModifier
forall a b. (a -> b) -> a -> b
$ TxIx
-> Maybe AddressAny
-> Maybe Value
-> Maybe Datum
-> Maybe (ReferenceScript Era)
-> TxMod
ChangeOutput (Output -> TxIx
outputIx Output
o) (AddressAny -> Maybe AddressAny
forall a. a -> Maybe a
Just AddressAny
a) Maybe Value
forall a. Maybe a
Nothing Maybe Datum
forall a. Maybe a
Nothing Maybe (ReferenceScript Era)
forall a. Maybe a
Nothing
changeValueOf :: Output -> Value -> TxModifier
changeValueOf Output
o Value
v = TxMod -> TxModifier
txMod (TxMod -> TxModifier) -> TxMod -> TxModifier
forall a b. (a -> b) -> a -> b
$ TxIx
-> Maybe AddressAny
-> Maybe Value
-> Maybe Datum
-> Maybe (ReferenceScript Era)
-> TxMod
ChangeOutput (Output -> TxIx
outputIx Output
o) Maybe AddressAny
forall a. Maybe a
Nothing (Value -> Maybe Value
forall a. a -> Maybe a
Just Value
v) Maybe Datum
forall a. Maybe a
Nothing Maybe (ReferenceScript Era)
forall a. Maybe a
Nothing
changeDatumOf :: Output -> Datum -> TxModifier
changeDatumOf Output
o Datum
d = TxMod -> TxModifier
txMod (TxMod -> TxModifier) -> TxMod -> TxModifier
forall a b. (a -> b) -> a -> b
$ TxIx
-> Maybe AddressAny
-> Maybe Value
-> Maybe Datum
-> Maybe (ReferenceScript Era)
-> TxMod
ChangeOutput (Output -> TxIx
outputIx Output
o) Maybe AddressAny
forall a. Maybe a
Nothing Maybe Value
forall a. Maybe a
Nothing (Datum -> Maybe Datum
forall a. a -> Maybe a
Just Datum
d) Maybe (ReferenceScript Era)
forall a. Maybe a
Nothing
changeRefScriptOf :: Output -> ReferenceScript Era -> TxModifier
changeRefScriptOf Output
o ReferenceScript Era
r = TxMod -> TxModifier
txMod (TxMod -> TxModifier) -> TxMod -> TxModifier
forall a b. (a -> b) -> a -> b
$ TxIx
-> Maybe AddressAny
-> Maybe Value
-> Maybe Datum
-> Maybe (ReferenceScript Era)
-> TxMod
ChangeOutput (Output -> TxIx
outputIx Output
o) Maybe AddressAny
forall a. Maybe a
Nothing Maybe Value
forall a. Maybe a
Nothing Maybe Datum
forall a. Maybe a
Nothing (ReferenceScript Era -> Maybe (ReferenceScript Era)
forall a. a -> Maybe a
Just ReferenceScript Era
r)
addressOf :: Output -> AddressAny
addressOf = TxOut CtxTx Era -> AddressAny
forall ctx. TxOut ctx Era -> AddressAny
addressOfTxOut (TxOut CtxTx Era -> AddressAny)
-> (Output -> TxOut CtxTx Era) -> Output -> AddressAny
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Output -> TxOut CtxTx Era
outputTxOut
valueOf :: Output -> Value
valueOf = TxOut CtxTx Era -> Value
forall ctx. TxOut ctx Era -> Value
valueOfTxOut (TxOut CtxTx Era -> Value)
-> (Output -> TxOut CtxTx Era) -> Output -> Value
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Output -> TxOut CtxTx Era
outputTxOut
refScriptOf :: Output -> ReferenceScript Era
refScriptOf = TxOut CtxTx Era -> ReferenceScript Era
forall ctx. TxOut ctx Era -> ReferenceScript Era
referenceScriptOfTxOut (TxOut CtxTx Era -> ReferenceScript Era)
-> (Output -> TxOut CtxTx Era) -> Output -> ReferenceScript Era
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Output -> TxOut CtxTx Era
outputTxOut
instance IsInputOrOutput Input where
changeAddressOf :: Input -> AddressAny -> TxModifier
changeAddressOf Input
i AddressAny
a
| AddressAny -> Bool
isKeyAddressAny (Input -> AddressAny
forall t. IsInputOrOutput t => t -> AddressAny
addressOf Input
i) = TxMod -> TxModifier
txMod (TxMod -> TxModifier) -> TxMod -> TxModifier
forall a b. (a -> b) -> a -> b
$ TxIn
-> Maybe AddressAny
-> Maybe Value
-> Maybe Datum
-> Maybe (ReferenceScript Era)
-> TxMod
ChangeInput (Input -> TxIn
inputTxIn Input
i) (AddressAny -> Maybe AddressAny
forall a. a -> Maybe a
Just AddressAny
a) Maybe Value
forall a. Maybe a
Nothing Maybe Datum
forall a. Maybe a
Nothing Maybe (ReferenceScript Era)
forall a. Maybe a
Nothing
| Bool
otherwise = [Char] -> TxModifier
forall a. HasCallStack => [Char] -> a
error [Char]
"Cannot changeAddressOf ScriptInput"
changeValueOf :: Input -> Value -> TxModifier
changeValueOf Input
i Value
v
| AddressAny -> Bool
isKeyAddressAny (Input -> AddressAny
forall t. IsInputOrOutput t => t -> AddressAny
addressOf Input
i) = TxMod -> TxModifier
txMod (TxMod -> TxModifier) -> TxMod -> TxModifier
forall a b. (a -> b) -> a -> b
$ TxIn
-> Maybe AddressAny
-> Maybe Value
-> Maybe Datum
-> Maybe (ReferenceScript Era)
-> TxMod
ChangeInput (Input -> TxIn
inputTxIn Input
i) Maybe AddressAny
forall a. Maybe a
Nothing (Value -> Maybe Value
forall a. a -> Maybe a
Just Value
v) Maybe Datum
forall a. Maybe a
Nothing Maybe (ReferenceScript Era)
forall a. Maybe a
Nothing
| Bool
otherwise = TxMod -> TxModifier
txMod (TxMod -> TxModifier) -> TxMod -> TxModifier
forall a b. (a -> b) -> a -> b
$ TxIn
-> Maybe Value
-> Maybe Datum
-> Maybe Redeemer
-> Maybe (ReferenceScript Era)
-> TxMod
ChangeScriptInput (Input -> TxIn
inputTxIn Input
i) (Value -> Maybe Value
forall a. a -> Maybe a
Just Value
v) Maybe Datum
forall a. Maybe a
Nothing Maybe Redeemer
forall a. Maybe a
Nothing Maybe (ReferenceScript Era)
forall a. Maybe a
Nothing
changeDatumOf :: Input -> Datum -> TxModifier
changeDatumOf Input
i Datum
d
| AddressAny -> Bool
isKeyAddressAny (Input -> AddressAny
forall t. IsInputOrOutput t => t -> AddressAny
addressOf Input
i) = TxMod -> TxModifier
txMod (TxMod -> TxModifier) -> TxMod -> TxModifier
forall a b. (a -> b) -> a -> b
$ TxIn
-> Maybe AddressAny
-> Maybe Value
-> Maybe Datum
-> Maybe (ReferenceScript Era)
-> TxMod
ChangeInput (Input -> TxIn
inputTxIn Input
i) Maybe AddressAny
forall a. Maybe a
Nothing Maybe Value
forall a. Maybe a
Nothing (Datum -> Maybe Datum
forall a. a -> Maybe a
Just Datum
d) Maybe (ReferenceScript Era)
forall a. Maybe a
Nothing
| Bool
otherwise = TxMod -> TxModifier
txMod (TxMod -> TxModifier) -> TxMod -> TxModifier
forall a b. (a -> b) -> a -> b
$ TxIn
-> Maybe Value
-> Maybe Datum
-> Maybe Redeemer
-> Maybe (ReferenceScript Era)
-> TxMod
ChangeScriptInput (Input -> TxIn
inputTxIn Input
i) Maybe Value
forall a. Maybe a
Nothing (Datum -> Maybe Datum
forall a. a -> Maybe a
Just Datum
d) Maybe Redeemer
forall a. Maybe a
Nothing Maybe (ReferenceScript Era)
forall a. Maybe a
Nothing
changeRefScriptOf :: Input -> ReferenceScript Era -> TxModifier
changeRefScriptOf Input
i ReferenceScript Era
r
| AddressAny -> Bool
isKeyAddressAny (Input -> AddressAny
forall t. IsInputOrOutput t => t -> AddressAny
addressOf Input
i) = TxMod -> TxModifier
txMod (TxMod -> TxModifier) -> TxMod -> TxModifier
forall a b. (a -> b) -> a -> b
$ TxIn
-> Maybe AddressAny
-> Maybe Value
-> Maybe Datum
-> Maybe (ReferenceScript Era)
-> TxMod
ChangeInput (Input -> TxIn
inputTxIn Input
i) Maybe AddressAny
forall a. Maybe a
Nothing Maybe Value
forall a. Maybe a
Nothing Maybe Datum
forall a. Maybe a
Nothing (ReferenceScript Era -> Maybe (ReferenceScript Era)
forall a. a -> Maybe a
Just ReferenceScript Era
r)
| Bool
otherwise = TxMod -> TxModifier
txMod (TxMod -> TxModifier) -> TxMod -> TxModifier
forall a b. (a -> b) -> a -> b
$ TxIn
-> Maybe Value
-> Maybe Datum
-> Maybe Redeemer
-> Maybe (ReferenceScript Era)
-> TxMod
ChangeScriptInput (Input -> TxIn
inputTxIn Input
i) Maybe Value
forall a. Maybe a
Nothing Maybe Datum
forall a. Maybe a
Nothing Maybe Redeemer
forall a. Maybe a
Nothing (ReferenceScript Era -> Maybe (ReferenceScript Era)
forall a. a -> Maybe a
Just ReferenceScript Era
r)
addressOf :: Input -> AddressAny
addressOf = TxOut CtxUTxO Era -> AddressAny
forall ctx. TxOut ctx Era -> AddressAny
addressOfTxOut (TxOut CtxUTxO Era -> AddressAny)
-> (Input -> TxOut CtxUTxO Era) -> Input -> AddressAny
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Input -> TxOut CtxUTxO Era
inputTxOut
valueOf :: Input -> Value
valueOf = TxOut CtxUTxO Era -> Value
forall ctx. TxOut ctx Era -> Value
valueOfTxOut (TxOut CtxUTxO Era -> Value)
-> (Input -> TxOut CtxUTxO Era) -> Input -> Value
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Input -> TxOut CtxUTxO Era
inputTxOut
refScriptOf :: Input -> ReferenceScript Era
refScriptOf = TxOut CtxUTxO Era -> ReferenceScript Era
forall ctx. TxOut ctx Era -> ReferenceScript Era
referenceScriptOfTxOut (TxOut CtxUTxO Era -> ReferenceScript Era)
-> (Input -> TxOut CtxUTxO Era) -> Input -> ReferenceScript Era
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Input -> TxOut CtxUTxO Era
inputTxOut
type Datum = TxOutDatum CtxTx Era
type Redeemer = ScriptData
newtype TxModifier = TxModifier [TxMod]
deriving newtype (NonEmpty TxModifier -> TxModifier
TxModifier -> TxModifier -> TxModifier
(TxModifier -> TxModifier -> TxModifier)
-> (NonEmpty TxModifier -> TxModifier)
-> (forall b. Integral b => b -> TxModifier -> TxModifier)
-> Semigroup TxModifier
forall b. Integral b => b -> TxModifier -> TxModifier
forall a.
(a -> a -> a)
-> (NonEmpty a -> a)
-> (forall b. Integral b => b -> a -> a)
-> Semigroup a
$c<> :: TxModifier -> TxModifier -> TxModifier
<> :: TxModifier -> TxModifier -> TxModifier
$csconcat :: NonEmpty TxModifier -> TxModifier
sconcat :: NonEmpty TxModifier -> TxModifier
$cstimes :: forall b. Integral b => b -> TxModifier -> TxModifier
stimes :: forall b. Integral b => b -> TxModifier -> TxModifier
Semigroup, Semigroup TxModifier
TxModifier
Semigroup TxModifier =>
TxModifier
-> (TxModifier -> TxModifier -> TxModifier)
-> ([TxModifier] -> TxModifier)
-> Monoid TxModifier
[TxModifier] -> TxModifier
TxModifier -> TxModifier -> TxModifier
forall a.
Semigroup a =>
a -> (a -> a -> a) -> ([a] -> a) -> Monoid a
$cmempty :: TxModifier
mempty :: TxModifier
$cmappend :: TxModifier -> TxModifier -> TxModifier
mappend :: TxModifier -> TxModifier -> TxModifier
$cmconcat :: [TxModifier] -> TxModifier
mconcat :: [TxModifier] -> TxModifier
Monoid)
data TxMod where
RemoveInput
:: TxIn
-> TxMod
RemoveOutput
:: TxIx
-> TxMod
ChangeOutput
:: TxIx
-> Maybe AddressAny
-> Maybe Value
-> Maybe Datum
-> Maybe (ReferenceScript Era)
-> TxMod
ChangeInput
:: TxIn
-> Maybe AddressAny
-> Maybe Value
-> Maybe Datum
-> Maybe (ReferenceScript Era)
-> TxMod
ChangeScriptInput
:: TxIn
-> Maybe Value
-> Maybe Datum
-> Maybe Redeemer
-> Maybe (ReferenceScript Era)
-> TxMod
ChangeValidityRange
:: Maybe (TxValidityLowerBound Era)
-> Maybe (TxValidityUpperBound Era)
-> TxMod
AddOutput
:: AddressAny
-> Value
-> Datum
-> ReferenceScript Era
-> TxMod
AddInput
:: AddressAny
-> Value
-> Datum
-> ReferenceScript Era
-> Bool
-> TxMod
AddReferenceScriptInput
:: ScriptHash
-> Value
-> Datum
-> Redeemer
-> TxMod
AddPlutusScriptInput
:: (IsPlutusScriptInEra lang)
=> PlutusScript lang
-> Value
-> Datum
-> Redeemer
-> ReferenceScript Era
-> TxMod
AddPlutusScriptReferenceInput
:: (IsPlutusScriptInEra lang)
=> PlutusScript lang
-> Value
-> Datum
-> ReferenceScript Era
-> TxMod
AddSimpleScriptInput
:: SimpleScript
-> Value
-> ReferenceScript Era
-> Bool
-> TxMod
AddPlutusScriptMint
:: (IsPlutusScriptInEra lang)
=> PlutusScript lang
-> AssetName
-> Quantity
-> ScriptData
-> TxMod
RemoveRequiredSigner
:: Hash PaymentKey
-> TxMod
ReplaceTx :: Tx Era -> UTxO Era -> TxMod
deriving stock instance Show TxMod
txMod :: TxMod -> TxModifier
txMod :: TxMod -> TxModifier
txMod TxMod
m = [TxMod] -> TxModifier
TxModifier [TxMod
m]
applyTxModifier :: Tx Era -> UTxO Era -> TxModifier -> (Tx Era, UTxO Era)
applyTxModifier :: Tx Era -> UTxO Era -> TxModifier -> (Tx Era, UTxO Era)
applyTxModifier Tx Era
tx UTxO Era
utxos (TxModifier [TxMod]
ms) = ((Tx Era, UTxO Era) -> TxMod -> (Tx Era, UTxO Era))
-> (Tx Era, UTxO Era) -> [TxMod] -> (Tx Era, UTxO Era)
forall b a. (b -> a -> b) -> b -> [a] -> b
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl ((Tx Era -> UTxO Era -> TxMod -> (Tx Era, UTxO Era))
-> (Tx Era, UTxO Era) -> TxMod -> (Tx Era, UTxO Era)
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Tx Era -> UTxO Era -> TxMod -> (Tx Era, UTxO Era)
applyTxMod) (Tx Era
tx, UTxO Era
utxos) [TxMod]
ms
mkNewTxIn :: UTxO Era -> TxIn
mkNewTxIn :: UTxO Era -> TxIn
mkNewTxIn UTxO Era
utxos = TxId -> TxIx -> TxIn
TxIn TxId
dummyTxId (Word -> TxIx
TxIx Word
txIx)
where
txIx :: Word
txIx =
[Word] -> Word
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum ([Word] -> Word) -> [Word] -> Word
forall a b. (a -> b) -> a -> b
$
Word
0
Word -> [Word] -> [Word]
forall a. a -> [a] -> [a]
: [ (Word -> Word -> Word
forall a. Num a => a -> a -> a
+ Word
1) Word
ix
| TxIn TxId
txId' (TxIx Word
ix) <- Map TxIn (TxOut CtxUTxO Era) -> [TxIn]
forall k a. Map k a -> [k]
Map.keys (Map TxIn (TxOut CtxUTxO Era) -> [TxIn])
-> Map TxIn (TxOut CtxUTxO Era) -> [TxIn]
forall a b. (a -> b) -> a -> b
$ UTxO Era -> Map TxIn (TxOut CtxUTxO Era)
forall era. UTxO era -> Map TxIn (TxOut CtxUTxO era)
unUTxO UTxO Era
utxos
, TxId
txId' TxId -> TxId -> Bool
forall a. Eq a => a -> a -> Bool
== TxId
dummyTxId
]
applyTxMod :: Tx Era -> UTxO Era -> TxMod -> (Tx Era, UTxO Era)
applyTxMod :: Tx Era -> UTxO Era -> TxMod -> (Tx Era, UTxO Era)
applyTxMod Tx Era
tx UTxO Era
utxos (ChangeValidityRange Maybe (TxValidityLowerBound Era)
mlo Maybe (TxValidityUpperBound Era)
mhi) =
(TxBody Era -> [KeyWitness Era] -> Tx Era
forall era. TxBody era -> [KeyWitness era] -> Tx era
Tx (ShelleyBasedEra Era
-> TxBody (ShelleyLedgerEra Era)
-> [Script (ShelleyLedgerEra Era)]
-> TxBodyScriptData Era
-> Maybe (TxAuxData (ShelleyLedgerEra Era))
-> TxScriptValidity Era
-> TxBody Era
forall era.
ShelleyBasedEra era
-> TxBody (ShelleyLedgerEra era)
-> [Script (ShelleyLedgerEra era)]
-> TxBodyScriptData era
-> Maybe (TxAuxData (ShelleyLedgerEra era))
-> TxScriptValidity era
-> TxBody era
ShelleyTxBody ShelleyBasedEra Era
era TxBody (ShelleyLedgerEra Era)
body{Conway.ctbVldt = validity'} [Script (ShelleyLedgerEra Era)]
scripts TxBodyScriptData Era
scriptData Maybe (TxAuxData (ShelleyLedgerEra Era))
auxData TxScriptValidity Era
scriptValidity) [KeyWitness Era]
wits, UTxO Era
utxos)
where
Tx bdy :: TxBody Era
bdy@(ShelleyTxBody ShelleyBasedEra Era
era TxBody (ShelleyLedgerEra Era)
body [Script (ShelleyLedgerEra Era)]
scripts TxBodyScriptData Era
scriptData Maybe (TxAuxData (ShelleyLedgerEra Era))
auxData TxScriptValidity Era
scriptValidity) [KeyWitness Era]
wits = Tx Era
tx
TxBodyContent{txValidityLowerBound :: forall build era.
TxBodyContent build era -> TxValidityLowerBound era
txValidityLowerBound = TxValidityLowerBound Era
lo, txValidityUpperBound :: forall build era.
TxBodyContent build era -> TxValidityUpperBound era
txValidityUpperBound = TxValidityUpperBound Era
hi} = TxBody Era -> TxBodyContent ViewTx Era
forall era. TxBody era -> TxBodyContent ViewTx era
getTxBodyContent TxBody Era
bdy
validity' :: ValidityInterval
validity' = (TxValidityLowerBound Era, TxValidityUpperBound Era)
-> ValidityInterval
forall era.
(TxValidityLowerBound era, TxValidityUpperBound era)
-> ValidityInterval
convValidityInterval (TxValidityLowerBound Era
-> Maybe (TxValidityLowerBound Era) -> TxValidityLowerBound Era
forall a. a -> Maybe a -> a
fromMaybe TxValidityLowerBound Era
lo Maybe (TxValidityLowerBound Era)
mlo, TxValidityUpperBound Era
-> Maybe (TxValidityUpperBound Era) -> TxValidityUpperBound Era
forall a. a -> Maybe a -> a
fromMaybe TxValidityUpperBound Era
hi Maybe (TxValidityUpperBound Era)
mhi)
applyTxMod Tx Era
tx UTxO Era
utxos (RemoveInput TxIn
i) =
(TxBody Era -> [KeyWitness Era] -> Tx Era
forall era. TxBody era -> [KeyWitness era] -> Tx era
Tx (ShelleyBasedEra Era
-> TxBody (ShelleyLedgerEra Era)
-> [Script (ShelleyLedgerEra Era)]
-> TxBodyScriptData Era
-> Maybe (TxAuxData (ShelleyLedgerEra Era))
-> TxScriptValidity Era
-> TxBody Era
forall era.
ShelleyBasedEra era
-> TxBody (ShelleyLedgerEra era)
-> [Script (ShelleyLedgerEra era)]
-> TxBodyScriptData era
-> Maybe (TxAuxData (ShelleyLedgerEra era))
-> TxScriptValidity era
-> TxBody era
ShelleyTxBody ShelleyBasedEra Era
era TxBody (ShelleyLedgerEra Era)
TxBody ConwayEra
body' [Script (ShelleyLedgerEra Era)]
scripts TxBodyScriptData Era
scriptData' Maybe (TxAuxData (ShelleyLedgerEra Era))
auxData TxScriptValidity Era
validity) [KeyWitness Era]
wits, UTxO Era
utxos)
where
Tx (ShelleyTxBody ShelleyBasedEra Era
era body :: TxBody (ShelleyLedgerEra Era)
body@Conway.ConwayTxBody{StrictMaybe ScriptIntegrityHash
StrictMaybe Coin
StrictMaybe Network
StrictMaybe TxAuxDataHash
StrictMaybe (Sized (TxOut ConwayEra))
VotingProcedures ConwayEra
Coin
MultiAsset
Set (KeyHash 'Witness)
Set TxIn
OSet (TxCert ConwayEra)
OSet (ProposalProcedure ConwayEra)
ValidityInterval
Withdrawals
StrictSeq (Sized (TxOut ConwayEra))
ctbVldt :: TxBody ConwayEra -> ValidityInterval
ctbSpendInputs :: Set TxIn
ctbCollateralInputs :: Set TxIn
ctbReferenceInputs :: Set TxIn
ctbOutputs :: StrictSeq (Sized (TxOut ConwayEra))
ctbCollateralReturn :: StrictMaybe (Sized (TxOut ConwayEra))
ctbTotalCollateral :: StrictMaybe Coin
ctbCerts :: OSet (TxCert ConwayEra)
ctbWithdrawals :: Withdrawals
ctbTxfee :: Coin
ctbVldt :: ValidityInterval
ctbReqSignerHashes :: Set (KeyHash 'Witness)
ctbMint :: MultiAsset
ctbScriptIntegrityHash :: StrictMaybe ScriptIntegrityHash
ctbAdHash :: StrictMaybe TxAuxDataHash
ctbTxNetworkId :: StrictMaybe Network
ctbVotingProcedures :: VotingProcedures ConwayEra
ctbProposalProcedures :: OSet (ProposalProcedure ConwayEra)
ctbCurrentTreasuryValue :: StrictMaybe Coin
ctbTreasuryDonation :: Coin
ctbAdHash :: TxBody ConwayEra -> StrictMaybe TxAuxDataHash
ctbCerts :: TxBody ConwayEra -> OSet (TxCert ConwayEra)
ctbCollateralInputs :: TxBody ConwayEra -> Set TxIn
ctbCollateralReturn :: TxBody ConwayEra -> StrictMaybe (Sized (TxOut ConwayEra))
ctbCurrentTreasuryValue :: TxBody ConwayEra -> StrictMaybe Coin
ctbMint :: TxBody ConwayEra -> MultiAsset
ctbOutputs :: TxBody ConwayEra -> StrictSeq (Sized (TxOut ConwayEra))
ctbProposalProcedures :: TxBody ConwayEra -> OSet (ProposalProcedure ConwayEra)
ctbReferenceInputs :: TxBody ConwayEra -> Set TxIn
ctbReqSignerHashes :: TxBody ConwayEra -> Set (KeyHash 'Witness)
ctbScriptIntegrityHash :: TxBody ConwayEra -> StrictMaybe ScriptIntegrityHash
ctbSpendInputs :: TxBody ConwayEra -> Set TxIn
ctbTotalCollateral :: TxBody ConwayEra -> StrictMaybe Coin
ctbTreasuryDonation :: TxBody ConwayEra -> Coin
ctbTxNetworkId :: TxBody ConwayEra -> StrictMaybe Network
ctbTxfee :: TxBody ConwayEra -> Coin
ctbVotingProcedures :: TxBody ConwayEra -> VotingProcedures ConwayEra
ctbWithdrawals :: TxBody ConwayEra -> Withdrawals
..} [Script (ShelleyLedgerEra Era)]
scripts TxBodyScriptData Era
scriptData Maybe (TxAuxData (ShelleyLedgerEra Era))
auxData TxScriptValidity Era
validity) [KeyWitness Era]
wits = Tx Era
tx
inputs' :: Set TxIn
inputs' = TxIn -> Set TxIn -> Set TxIn
forall a. Ord a => a -> Set a -> Set a
Set.delete (TxIn -> TxIn
toShelleyTxIn TxIn
i) Set TxIn
ctbSpendInputs
refInputs' :: Set TxIn
refInputs' = TxIn -> Set TxIn -> Set TxIn
forall a. Ord a => a -> Set a -> Set a
Set.delete (TxIn -> TxIn
toShelleyTxIn TxIn
i) Set TxIn
ctbReferenceInputs
body' :: TxBody ConwayEra
body' =
TxBody (ShelleyLedgerEra Era)
body
{ Conway.ctbSpendInputs = inputs'
, Conway.ctbReferenceInputs = refInputs'
}
scriptData' :: TxBodyScriptData Era
scriptData' = case AsItem Word32 TxIn -> Set TxIn -> StrictMaybe (AsIx Word32 TxIn)
forall elem container.
Indexable elem container =>
AsItem Word32 elem -> container -> StrictMaybe (AsIx Word32 elem)
Ledger.indexOf (TxIn -> AsItem Word32 TxIn
forall ix it. it -> AsItem ix it
Ledger.AsItem (TxIn -> TxIn
toShelleyTxIn TxIn
i)) Set TxIn
ctbSpendInputs of
StrictMaybe (AsIx Word32 TxIn)
SNothing -> TxBodyScriptData Era
scriptData
SJust (Ledger.AsIx Word32
idx) -> Maybe Word32
-> (Word32 -> Word32)
-> TxBodyScriptData Era
-> TxBodyScriptData Era
recomputeScriptData (Word32 -> Maybe Word32
forall a. a -> Maybe a
Just Word32
idx) Word32 -> Word32
idxUpdate TxBodyScriptData Era
scriptData
where
idxUpdate :: Word32 -> Word32
idxUpdate Word32
idx'
| Word32
idx' Word32 -> Word32 -> Bool
forall a. Ord a => a -> a -> Bool
> Word32
idx = Word32
idx' Word32 -> Word32 -> Word32
forall a. Num a => a -> a -> a
- Word32
1
| Bool
otherwise = Word32
idx'
applyTxMod Tx Era
tx UTxO Era
utxos (RemoveOutput (TxIx Word
i)) =
(TxBody Era -> [KeyWitness Era] -> Tx Era
forall era. TxBody era -> [KeyWitness era] -> Tx era
Tx (ShelleyBasedEra Era
-> TxBody (ShelleyLedgerEra Era)
-> [Script (ShelleyLedgerEra Era)]
-> TxBodyScriptData Era
-> Maybe (TxAuxData (ShelleyLedgerEra Era))
-> TxScriptValidity Era
-> TxBody Era
forall era.
ShelleyBasedEra era
-> TxBody (ShelleyLedgerEra era)
-> [Script (ShelleyLedgerEra era)]
-> TxBodyScriptData era
-> Maybe (TxAuxData (ShelleyLedgerEra era))
-> TxScriptValidity era
-> TxBody era
ShelleyTxBody ShelleyBasedEra Era
era TxBody (ShelleyLedgerEra Era)
body{Conway.ctbOutputs = outputs'} [Script (ShelleyLedgerEra Era)]
scripts TxBodyScriptData Era
scriptData Maybe (TxAuxData (ShelleyLedgerEra Era))
auxData TxScriptValidity Era
validity) [KeyWitness Era]
wits, UTxO Era
utxos)
where
Tx (ShelleyTxBody ShelleyBasedEra Era
era body :: TxBody (ShelleyLedgerEra Era)
body@Conway.ConwayTxBody{StrictMaybe ScriptIntegrityHash
StrictMaybe Coin
StrictMaybe Network
StrictMaybe TxAuxDataHash
StrictMaybe (Sized (TxOut ConwayEra))
VotingProcedures ConwayEra
Coin
MultiAsset
Set (KeyHash 'Witness)
Set TxIn
OSet (TxCert ConwayEra)
OSet (ProposalProcedure ConwayEra)
ValidityInterval
Withdrawals
StrictSeq (Sized (TxOut ConwayEra))
ctbVldt :: TxBody ConwayEra -> ValidityInterval
ctbAdHash :: TxBody ConwayEra -> StrictMaybe TxAuxDataHash
ctbCerts :: TxBody ConwayEra -> OSet (TxCert ConwayEra)
ctbCollateralInputs :: TxBody ConwayEra -> Set TxIn
ctbCollateralReturn :: TxBody ConwayEra -> StrictMaybe (Sized (TxOut ConwayEra))
ctbCurrentTreasuryValue :: TxBody ConwayEra -> StrictMaybe Coin
ctbMint :: TxBody ConwayEra -> MultiAsset
ctbOutputs :: TxBody ConwayEra -> StrictSeq (Sized (TxOut ConwayEra))
ctbProposalProcedures :: TxBody ConwayEra -> OSet (ProposalProcedure ConwayEra)
ctbReferenceInputs :: TxBody ConwayEra -> Set TxIn
ctbReqSignerHashes :: TxBody ConwayEra -> Set (KeyHash 'Witness)
ctbScriptIntegrityHash :: TxBody ConwayEra -> StrictMaybe ScriptIntegrityHash
ctbSpendInputs :: TxBody ConwayEra -> Set TxIn
ctbTotalCollateral :: TxBody ConwayEra -> StrictMaybe Coin
ctbTreasuryDonation :: TxBody ConwayEra -> Coin
ctbTxNetworkId :: TxBody ConwayEra -> StrictMaybe Network
ctbTxfee :: TxBody ConwayEra -> Coin
ctbVotingProcedures :: TxBody ConwayEra -> VotingProcedures ConwayEra
ctbWithdrawals :: TxBody ConwayEra -> Withdrawals
ctbSpendInputs :: Set TxIn
ctbCollateralInputs :: Set TxIn
ctbReferenceInputs :: Set TxIn
ctbOutputs :: StrictSeq (Sized (TxOut ConwayEra))
ctbCollateralReturn :: StrictMaybe (Sized (TxOut ConwayEra))
ctbTotalCollateral :: StrictMaybe Coin
ctbCerts :: OSet (TxCert ConwayEra)
ctbWithdrawals :: Withdrawals
ctbTxfee :: Coin
ctbVldt :: ValidityInterval
ctbReqSignerHashes :: Set (KeyHash 'Witness)
ctbMint :: MultiAsset
ctbScriptIntegrityHash :: StrictMaybe ScriptIntegrityHash
ctbAdHash :: StrictMaybe TxAuxDataHash
ctbTxNetworkId :: StrictMaybe Network
ctbVotingProcedures :: VotingProcedures ConwayEra
ctbProposalProcedures :: OSet (ProposalProcedure ConwayEra)
ctbCurrentTreasuryValue :: StrictMaybe Coin
ctbTreasuryDonation :: Coin
..} [Script (ShelleyLedgerEra Era)]
scripts TxBodyScriptData Era
scriptData Maybe (TxAuxData (ShelleyLedgerEra Era))
auxData TxScriptValidity Era
validity) [KeyWitness Era]
wits = Tx Era
tx
outputs' :: StrictSeq (Sized (BabbageTxOut ConwayEra))
outputs' = case Int
-> StrictSeq (Sized (BabbageTxOut ConwayEra))
-> (StrictSeq (Sized (BabbageTxOut ConwayEra)),
StrictSeq (Sized (BabbageTxOut ConwayEra)))
forall a. Int -> StrictSeq a -> (StrictSeq a, StrictSeq a)
Seq.splitAt (Word -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral Word
i) StrictSeq (Sized (TxOut ConwayEra))
StrictSeq (Sized (BabbageTxOut ConwayEra))
ctbOutputs of
(StrictSeq (Sized (BabbageTxOut ConwayEra))
before, Sized (BabbageTxOut ConwayEra)
_ Seq.:<| StrictSeq (Sized (BabbageTxOut ConwayEra))
after) -> StrictSeq (Sized (BabbageTxOut ConwayEra))
before StrictSeq (Sized (BabbageTxOut ConwayEra))
-> StrictSeq (Sized (BabbageTxOut ConwayEra))
-> StrictSeq (Sized (BabbageTxOut ConwayEra))
forall a. Semigroup a => a -> a -> a
<> StrictSeq (Sized (BabbageTxOut ConwayEra))
after
(StrictSeq (Sized (BabbageTxOut ConwayEra))
_, StrictSeq (Sized (BabbageTxOut ConwayEra))
Seq.Empty) ->
[Char] -> StrictSeq (Sized (BabbageTxOut ConwayEra))
forall a. HasCallStack => [Char] -> a
error ([Char] -> StrictSeq (Sized (BabbageTxOut ConwayEra)))
-> [Char] -> StrictSeq (Sized (BabbageTxOut ConwayEra))
forall a b. (a -> b) -> a -> b
$
[Char]
"RemoveOutput: Can't remove index "
[Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ Word -> [Char]
forall a. Show a => a -> [Char]
show Word
i
[Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
" from "
[Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ Int -> [Char]
forall a. Show a => a -> [Char]
show (StrictSeq (Sized (BabbageTxOut ConwayEra)) -> Int
forall a. StrictSeq a -> Int
Seq.length StrictSeq (Sized (TxOut ConwayEra))
StrictSeq (Sized (BabbageTxOut ConwayEra))
ctbOutputs)
[Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
" outputs"
applyTxMod Tx Era
tx UTxO Era
utxos (AddOutput AddressAny
addr Value
value Datum
datum ReferenceScript Era
refscript) =
(TxBody Era -> [KeyWitness Era] -> Tx Era
forall era. TxBody era -> [KeyWitness era] -> Tx era
Tx (ShelleyBasedEra Era
-> TxBody (ShelleyLedgerEra Era)
-> [Script (ShelleyLedgerEra Era)]
-> TxBodyScriptData Era
-> Maybe (TxAuxData (ShelleyLedgerEra Era))
-> TxScriptValidity Era
-> TxBody Era
forall era.
ShelleyBasedEra era
-> TxBody (ShelleyLedgerEra era)
-> [Script (ShelleyLedgerEra era)]
-> TxBodyScriptData era
-> Maybe (TxAuxData (ShelleyLedgerEra era))
-> TxScriptValidity era
-> TxBody era
ShelleyTxBody ShelleyBasedEra Era
era TxBody (ShelleyLedgerEra Era)
body{Conway.ctbOutputs = outputs'} [Script (ShelleyLedgerEra Era)]
scripts TxBodyScriptData Era
scriptData' Maybe (TxAuxData (ShelleyLedgerEra Era))
auxData TxScriptValidity Era
validity) [KeyWitness Era]
wits, UTxO Era
utxos)
where
Tx (ShelleyTxBody ShelleyBasedEra Era
era body :: TxBody (ShelleyLedgerEra Era)
body@Conway.ConwayTxBody{StrictMaybe ScriptIntegrityHash
StrictMaybe Coin
StrictMaybe Network
StrictMaybe TxAuxDataHash
StrictMaybe (Sized (TxOut ConwayEra))
VotingProcedures ConwayEra
Coin
MultiAsset
Set (KeyHash 'Witness)
Set TxIn
OSet (TxCert ConwayEra)
OSet (ProposalProcedure ConwayEra)
ValidityInterval
Withdrawals
StrictSeq (Sized (TxOut ConwayEra))
ctbVldt :: TxBody ConwayEra -> ValidityInterval
ctbAdHash :: TxBody ConwayEra -> StrictMaybe TxAuxDataHash
ctbCerts :: TxBody ConwayEra -> OSet (TxCert ConwayEra)
ctbCollateralInputs :: TxBody ConwayEra -> Set TxIn
ctbCollateralReturn :: TxBody ConwayEra -> StrictMaybe (Sized (TxOut ConwayEra))
ctbCurrentTreasuryValue :: TxBody ConwayEra -> StrictMaybe Coin
ctbMint :: TxBody ConwayEra -> MultiAsset
ctbOutputs :: TxBody ConwayEra -> StrictSeq (Sized (TxOut ConwayEra))
ctbProposalProcedures :: TxBody ConwayEra -> OSet (ProposalProcedure ConwayEra)
ctbReferenceInputs :: TxBody ConwayEra -> Set TxIn
ctbReqSignerHashes :: TxBody ConwayEra -> Set (KeyHash 'Witness)
ctbScriptIntegrityHash :: TxBody ConwayEra -> StrictMaybe ScriptIntegrityHash
ctbSpendInputs :: TxBody ConwayEra -> Set TxIn
ctbTotalCollateral :: TxBody ConwayEra -> StrictMaybe Coin
ctbTreasuryDonation :: TxBody ConwayEra -> Coin
ctbTxNetworkId :: TxBody ConwayEra -> StrictMaybe Network
ctbTxfee :: TxBody ConwayEra -> Coin
ctbVotingProcedures :: TxBody ConwayEra -> VotingProcedures ConwayEra
ctbWithdrawals :: TxBody ConwayEra -> Withdrawals
ctbSpendInputs :: Set TxIn
ctbCollateralInputs :: Set TxIn
ctbReferenceInputs :: Set TxIn
ctbOutputs :: StrictSeq (Sized (TxOut ConwayEra))
ctbCollateralReturn :: StrictMaybe (Sized (TxOut ConwayEra))
ctbTotalCollateral :: StrictMaybe Coin
ctbCerts :: OSet (TxCert ConwayEra)
ctbWithdrawals :: Withdrawals
ctbTxfee :: Coin
ctbVldt :: ValidityInterval
ctbReqSignerHashes :: Set (KeyHash 'Witness)
ctbMint :: MultiAsset
ctbScriptIntegrityHash :: StrictMaybe ScriptIntegrityHash
ctbAdHash :: StrictMaybe TxAuxDataHash
ctbTxNetworkId :: StrictMaybe Network
ctbVotingProcedures :: VotingProcedures ConwayEra
ctbProposalProcedures :: OSet (ProposalProcedure ConwayEra)
ctbCurrentTreasuryValue :: StrictMaybe Coin
ctbTreasuryDonation :: Coin
..} [Script (ShelleyLedgerEra Era)]
scripts TxBodyScriptData Era
scriptData Maybe (TxAuxData (ShelleyLedgerEra Era))
auxData TxScriptValidity Era
validity) [KeyWitness Era]
wits = Tx Era
tx
outputs' :: StrictSeq (Sized (BabbageTxOut ConwayEra))
outputs' = StrictSeq (Sized (TxOut ConwayEra))
StrictSeq (Sized (BabbageTxOut ConwayEra))
ctbOutputs StrictSeq (Sized (BabbageTxOut ConwayEra))
-> Sized (BabbageTxOut ConwayEra)
-> StrictSeq (Sized (BabbageTxOut ConwayEra))
forall a. StrictSeq a -> a -> StrictSeq a
Seq.:|> Version -> BabbageTxOut ConwayEra -> Sized (BabbageTxOut ConwayEra)
forall a. EncCBOR a => Version -> a -> Sized a
CBOR.mkSized (forall era. Era era => Version
Ledger.eraProtVerLow @LedgerEra) TxOut ConwayEra
BabbageTxOut ConwayEra
out
out :: TxOut ConwayEra
out =
ShelleyBasedEra Era -> TxOut CtxUTxO Era -> TxOut ConwayEra
forall era ledgerera.
(HasCallStack, ShelleyLedgerEra era ~ ledgerera) =>
ShelleyBasedEra era -> TxOut CtxUTxO era -> TxOut ledgerera
toShelleyTxOut
ShelleyBasedEra Era
forall era. IsShelleyBasedEra era => ShelleyBasedEra era
shelleyBasedEra
(AddressAny
-> Value -> Datum -> ReferenceScript Era -> TxOut CtxUTxO Era
makeTxOut AddressAny
addr Value
value Datum
datum ReferenceScript Era
refscript)
scriptData' :: TxBodyScriptData Era
scriptData' = case Datum
datum of
Datum
TxOutDatumNone -> TxBodyScriptData Era
scriptData
TxOutDatumHash{} -> TxBodyScriptData Era
scriptData
TxOutSupplementalDatum AlonzoEraOnwards Era
_ HashableScriptData
d -> Data (ShelleyLedgerEra Era)
-> TxBodyScriptData Era -> TxBodyScriptData Era
addDatum (HashableScriptData -> Data ConwayEra
forall ledgerera.
Era ledgerera =>
HashableScriptData -> Data ledgerera
toAlonzoData HashableScriptData
d) TxBodyScriptData Era
scriptData
TxOutDatumInline{} -> TxBodyScriptData Era
scriptData
applyTxMod Tx Era
tx UTxO Era
utxos (AddInput AddressAny
addr Value
value Datum
datum ReferenceScript Era
rscript Bool
False) =
( TxBody Era -> [KeyWitness Era] -> Tx Era
forall era. TxBody era -> [KeyWitness era] -> Tx era
Tx (ShelleyBasedEra Era
-> TxBody (ShelleyLedgerEra Era)
-> [Script (ShelleyLedgerEra Era)]
-> TxBodyScriptData Era
-> Maybe (TxAuxData (ShelleyLedgerEra Era))
-> TxScriptValidity Era
-> TxBody Era
forall era.
ShelleyBasedEra era
-> TxBody (ShelleyLedgerEra era)
-> [Script (ShelleyLedgerEra era)]
-> TxBodyScriptData era
-> Maybe (TxAuxData (ShelleyLedgerEra era))
-> TxScriptValidity era
-> TxBody era
ShelleyTxBody ShelleyBasedEra Era
era TxBody (ShelleyLedgerEra Era)
body{Conway.ctbSpendInputs = inputs'} [Script (ShelleyLedgerEra Era)]
scripts TxBodyScriptData Era
scriptData'' Maybe (TxAuxData (ShelleyLedgerEra Era))
auxData TxScriptValidity Era
validity) [KeyWitness Era]
wits
, UTxO Era
utxos'
)
where
Tx (ShelleyTxBody ShelleyBasedEra Era
era body :: TxBody (ShelleyLedgerEra Era)
body@Conway.ConwayTxBody{StrictMaybe ScriptIntegrityHash
StrictMaybe Coin
StrictMaybe Network
StrictMaybe TxAuxDataHash
StrictMaybe (Sized (TxOut ConwayEra))
VotingProcedures ConwayEra
Coin
MultiAsset
Set (KeyHash 'Witness)
Set TxIn
OSet (TxCert ConwayEra)
OSet (ProposalProcedure ConwayEra)
ValidityInterval
Withdrawals
StrictSeq (Sized (TxOut ConwayEra))
ctbVldt :: TxBody ConwayEra -> ValidityInterval
ctbAdHash :: TxBody ConwayEra -> StrictMaybe TxAuxDataHash
ctbCerts :: TxBody ConwayEra -> OSet (TxCert ConwayEra)
ctbCollateralInputs :: TxBody ConwayEra -> Set TxIn
ctbCollateralReturn :: TxBody ConwayEra -> StrictMaybe (Sized (TxOut ConwayEra))
ctbCurrentTreasuryValue :: TxBody ConwayEra -> StrictMaybe Coin
ctbMint :: TxBody ConwayEra -> MultiAsset
ctbOutputs :: TxBody ConwayEra -> StrictSeq (Sized (TxOut ConwayEra))
ctbProposalProcedures :: TxBody ConwayEra -> OSet (ProposalProcedure ConwayEra)
ctbReferenceInputs :: TxBody ConwayEra -> Set TxIn
ctbReqSignerHashes :: TxBody ConwayEra -> Set (KeyHash 'Witness)
ctbScriptIntegrityHash :: TxBody ConwayEra -> StrictMaybe ScriptIntegrityHash
ctbSpendInputs :: TxBody ConwayEra -> Set TxIn
ctbTotalCollateral :: TxBody ConwayEra -> StrictMaybe Coin
ctbTreasuryDonation :: TxBody ConwayEra -> Coin
ctbTxNetworkId :: TxBody ConwayEra -> StrictMaybe Network
ctbTxfee :: TxBody ConwayEra -> Coin
ctbVotingProcedures :: TxBody ConwayEra -> VotingProcedures ConwayEra
ctbWithdrawals :: TxBody ConwayEra -> Withdrawals
ctbSpendInputs :: Set TxIn
ctbCollateralInputs :: Set TxIn
ctbReferenceInputs :: Set TxIn
ctbOutputs :: StrictSeq (Sized (TxOut ConwayEra))
ctbCollateralReturn :: StrictMaybe (Sized (TxOut ConwayEra))
ctbTotalCollateral :: StrictMaybe Coin
ctbCerts :: OSet (TxCert ConwayEra)
ctbWithdrawals :: Withdrawals
ctbTxfee :: Coin
ctbVldt :: ValidityInterval
ctbReqSignerHashes :: Set (KeyHash 'Witness)
ctbMint :: MultiAsset
ctbScriptIntegrityHash :: StrictMaybe ScriptIntegrityHash
ctbAdHash :: StrictMaybe TxAuxDataHash
ctbTxNetworkId :: StrictMaybe Network
ctbVotingProcedures :: VotingProcedures ConwayEra
ctbProposalProcedures :: OSet (ProposalProcedure ConwayEra)
ctbCurrentTreasuryValue :: StrictMaybe Coin
ctbTreasuryDonation :: Coin
..} [Script (ShelleyLedgerEra Era)]
scripts TxBodyScriptData Era
scriptData Maybe (TxAuxData (ShelleyLedgerEra Era))
auxData TxScriptValidity Era
validity) [KeyWitness Era]
wits = Tx Era
tx
txIn :: TxIn
txIn = UTxO Era -> TxIn
mkNewTxIn UTxO Era
utxos
input :: TxIn
input = TxIn -> TxIn
toShelleyTxIn TxIn
txIn
inputs' :: Set TxIn
inputs' = TxIn -> Set TxIn -> Set TxIn
forall a. Ord a => a -> Set a -> Set a
Set.insert TxIn
input Set TxIn
ctbSpendInputs
SJust (Ledger.AsIx Word32
idx) = AsItem Word32 TxIn -> Set TxIn -> StrictMaybe (AsIx Word32 TxIn)
forall elem container.
Indexable elem container =>
AsItem Word32 elem -> container -> StrictMaybe (AsIx Word32 elem)
Ledger.indexOf (TxIn -> AsItem Word32 TxIn
forall ix it. it -> AsItem ix it
Ledger.AsItem TxIn
input) Set TxIn
inputs'
txOut :: TxOut CtxUTxO Era
txOut = AddressAny
-> Value -> Datum -> ReferenceScript Era -> TxOut CtxUTxO Era
makeTxOut AddressAny
addr Value
value Datum
datum ReferenceScript Era
rscript
utxos' :: UTxO Era
utxos' = Map TxIn (TxOut CtxUTxO Era) -> UTxO Era
forall era. Map TxIn (TxOut CtxUTxO era) -> UTxO era
UTxO (Map TxIn (TxOut CtxUTxO Era) -> UTxO Era)
-> (UTxO Era -> Map TxIn (TxOut CtxUTxO Era))
-> UTxO Era
-> UTxO Era
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TxIn
-> TxOut CtxUTxO Era
-> Map TxIn (TxOut CtxUTxO Era)
-> Map TxIn (TxOut CtxUTxO Era)
forall k a. Ord k => k -> a -> Map k a -> Map k a
Map.insert TxIn
txIn TxOut CtxUTxO Era
txOut (Map TxIn (TxOut CtxUTxO Era) -> Map TxIn (TxOut CtxUTxO Era))
-> (UTxO Era -> Map TxIn (TxOut CtxUTxO Era))
-> UTxO Era
-> Map TxIn (TxOut CtxUTxO Era)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UTxO Era -> Map TxIn (TxOut CtxUTxO Era)
forall era. UTxO era -> Map TxIn (TxOut CtxUTxO era)
unUTxO (UTxO Era -> UTxO Era) -> UTxO Era -> UTxO Era
forall a b. (a -> b) -> a -> b
$ UTxO Era
utxos
idxUpdate :: Word32 -> Word32
idxUpdate Word32
idx'
| Word32
idx' Word32 -> Word32 -> Bool
forall a. Ord a => a -> a -> Bool
>= Word32
idx = Word32
idx' Word32 -> Word32 -> Word32
forall a. Num a => a -> a -> a
+ Word32
1
| Bool
otherwise = Word32
idx'
scriptData'' :: TxBodyScriptData Era
scriptData'' = case Datum
datum of
Datum
TxOutDatumNone -> TxBodyScriptData Era
scriptData'
TxOutDatumHash{} -> TxBodyScriptData Era
scriptData'
TxOutSupplementalDatum AlonzoEraOnwards Era
_ HashableScriptData
d -> Data (ShelleyLedgerEra Era)
-> TxBodyScriptData Era -> TxBodyScriptData Era
addDatum (HashableScriptData -> Data ConwayEra
forall ledgerera.
Era ledgerera =>
HashableScriptData -> Data ledgerera
toAlonzoData HashableScriptData
d) TxBodyScriptData Era
scriptData'
TxOutDatumInline{} -> TxBodyScriptData Era
scriptData'
scriptData' :: TxBodyScriptData Era
scriptData' = Maybe Word32
-> (Word32 -> Word32)
-> TxBodyScriptData Era
-> TxBodyScriptData Era
recomputeScriptData Maybe Word32
forall a. Maybe a
Nothing Word32 -> Word32
idxUpdate TxBodyScriptData Era
scriptData
applyTxMod Tx Era
tx UTxO Era
utxos (AddInput AddressAny
addr Value
value Datum
datum ReferenceScript Era
rscript Bool
True) =
( TxBody Era -> [KeyWitness Era] -> Tx Era
forall era. TxBody era -> [KeyWitness era] -> Tx era
Tx (ShelleyBasedEra Era
-> TxBody (ShelleyLedgerEra Era)
-> [Script (ShelleyLedgerEra Era)]
-> TxBodyScriptData Era
-> Maybe (TxAuxData (ShelleyLedgerEra Era))
-> TxScriptValidity Era
-> TxBody Era
forall era.
ShelleyBasedEra era
-> TxBody (ShelleyLedgerEra era)
-> [Script (ShelleyLedgerEra era)]
-> TxBodyScriptData era
-> Maybe (TxAuxData (ShelleyLedgerEra era))
-> TxScriptValidity era
-> TxBody era
ShelleyTxBody ShelleyBasedEra Era
era TxBody (ShelleyLedgerEra Era)
body{Conway.ctbReferenceInputs = refInputs} [Script (ShelleyLedgerEra Era)]
scripts TxBodyScriptData Era
scriptData Maybe (TxAuxData (ShelleyLedgerEra Era))
auxData TxScriptValidity Era
validity) [KeyWitness Era]
wits
, UTxO Era
utxos'
)
where
Tx (ShelleyTxBody ShelleyBasedEra Era
era body :: TxBody (ShelleyLedgerEra Era)
body@Conway.ConwayTxBody{StrictMaybe ScriptIntegrityHash
StrictMaybe Coin
StrictMaybe Network
StrictMaybe TxAuxDataHash
StrictMaybe (Sized (TxOut ConwayEra))
VotingProcedures ConwayEra
Coin
MultiAsset
Set (KeyHash 'Witness)
Set TxIn
OSet (TxCert ConwayEra)
OSet (ProposalProcedure ConwayEra)
ValidityInterval
Withdrawals
StrictSeq (Sized (TxOut ConwayEra))
ctbVldt :: TxBody ConwayEra -> ValidityInterval
ctbAdHash :: TxBody ConwayEra -> StrictMaybe TxAuxDataHash
ctbCerts :: TxBody ConwayEra -> OSet (TxCert ConwayEra)
ctbCollateralInputs :: TxBody ConwayEra -> Set TxIn
ctbCollateralReturn :: TxBody ConwayEra -> StrictMaybe (Sized (TxOut ConwayEra))
ctbCurrentTreasuryValue :: TxBody ConwayEra -> StrictMaybe Coin
ctbMint :: TxBody ConwayEra -> MultiAsset
ctbOutputs :: TxBody ConwayEra -> StrictSeq (Sized (TxOut ConwayEra))
ctbProposalProcedures :: TxBody ConwayEra -> OSet (ProposalProcedure ConwayEra)
ctbReferenceInputs :: TxBody ConwayEra -> Set TxIn
ctbReqSignerHashes :: TxBody ConwayEra -> Set (KeyHash 'Witness)
ctbScriptIntegrityHash :: TxBody ConwayEra -> StrictMaybe ScriptIntegrityHash
ctbSpendInputs :: TxBody ConwayEra -> Set TxIn
ctbTotalCollateral :: TxBody ConwayEra -> StrictMaybe Coin
ctbTreasuryDonation :: TxBody ConwayEra -> Coin
ctbTxNetworkId :: TxBody ConwayEra -> StrictMaybe Network
ctbTxfee :: TxBody ConwayEra -> Coin
ctbVotingProcedures :: TxBody ConwayEra -> VotingProcedures ConwayEra
ctbWithdrawals :: TxBody ConwayEra -> Withdrawals
ctbSpendInputs :: Set TxIn
ctbCollateralInputs :: Set TxIn
ctbReferenceInputs :: Set TxIn
ctbOutputs :: StrictSeq (Sized (TxOut ConwayEra))
ctbCollateralReturn :: StrictMaybe (Sized (TxOut ConwayEra))
ctbTotalCollateral :: StrictMaybe Coin
ctbCerts :: OSet (TxCert ConwayEra)
ctbWithdrawals :: Withdrawals
ctbTxfee :: Coin
ctbVldt :: ValidityInterval
ctbReqSignerHashes :: Set (KeyHash 'Witness)
ctbMint :: MultiAsset
ctbScriptIntegrityHash :: StrictMaybe ScriptIntegrityHash
ctbAdHash :: StrictMaybe TxAuxDataHash
ctbTxNetworkId :: StrictMaybe Network
ctbVotingProcedures :: VotingProcedures ConwayEra
ctbProposalProcedures :: OSet (ProposalProcedure ConwayEra)
ctbCurrentTreasuryValue :: StrictMaybe Coin
ctbTreasuryDonation :: Coin
..} [Script (ShelleyLedgerEra Era)]
scripts TxBodyScriptData Era
scriptData Maybe (TxAuxData (ShelleyLedgerEra Era))
auxData TxScriptValidity Era
validity) [KeyWitness Era]
wits = Tx Era
tx
txIn :: TxIn
txIn = UTxO Era -> TxIn
mkNewTxIn UTxO Era
utxos
input :: TxIn
input = TxIn -> TxIn
toShelleyTxIn TxIn
txIn
refInputs :: Set TxIn
refInputs = TxIn -> Set TxIn -> Set TxIn
forall a. Ord a => a -> Set a -> Set a
Set.insert TxIn
input Set TxIn
ctbReferenceInputs
txOut :: TxOut CtxUTxO Era
txOut = AddressAny
-> Value -> Datum -> ReferenceScript Era -> TxOut CtxUTxO Era
makeTxOut AddressAny
addr Value
value Datum
datum ReferenceScript Era
rscript
utxos' :: UTxO Era
utxos' = Map TxIn (TxOut CtxUTxO Era) -> UTxO Era
forall era. Map TxIn (TxOut CtxUTxO era) -> UTxO era
UTxO (Map TxIn (TxOut CtxUTxO Era) -> UTxO Era)
-> (UTxO Era -> Map TxIn (TxOut CtxUTxO Era))
-> UTxO Era
-> UTxO Era
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TxIn
-> TxOut CtxUTxO Era
-> Map TxIn (TxOut CtxUTxO Era)
-> Map TxIn (TxOut CtxUTxO Era)
forall k a. Ord k => k -> a -> Map k a -> Map k a
Map.insert TxIn
txIn TxOut CtxUTxO Era
txOut (Map TxIn (TxOut CtxUTxO Era) -> Map TxIn (TxOut CtxUTxO Era))
-> (UTxO Era -> Map TxIn (TxOut CtxUTxO Era))
-> UTxO Era
-> Map TxIn (TxOut CtxUTxO Era)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UTxO Era -> Map TxIn (TxOut CtxUTxO Era)
forall era. UTxO era -> Map TxIn (TxOut CtxUTxO era)
unUTxO (UTxO Era -> UTxO Era) -> UTxO Era -> UTxO Era
forall a b. (a -> b) -> a -> b
$ UTxO Era
utxos
applyTxMod Tx Era
tx UTxO Era
utxos (AddPlutusScriptReferenceInput PlutusScript lang
script Value
value Datum
datum ReferenceScript Era
rscript) =
( TxBody Era -> [KeyWitness Era] -> Tx Era
forall era. TxBody era -> [KeyWitness era] -> Tx era
Tx (ShelleyBasedEra Era
-> TxBody (ShelleyLedgerEra Era)
-> [Script (ShelleyLedgerEra Era)]
-> TxBodyScriptData Era
-> Maybe (TxAuxData (ShelleyLedgerEra Era))
-> TxScriptValidity Era
-> TxBody Era
forall era.
ShelleyBasedEra era
-> TxBody (ShelleyLedgerEra era)
-> [Script (ShelleyLedgerEra era)]
-> TxBodyScriptData era
-> Maybe (TxAuxData (ShelleyLedgerEra era))
-> TxScriptValidity era
-> TxBody era
ShelleyTxBody ShelleyBasedEra Era
era TxBody (ShelleyLedgerEra Era)
body{Conway.ctbReferenceInputs = refInputs'} [Script (ShelleyLedgerEra Era)]
[AlonzoScript ConwayEra]
scripts' TxBodyScriptData Era
scriptData Maybe (TxAuxData (ShelleyLedgerEra Era))
auxData TxScriptValidity Era
validity) [KeyWitness Era]
wits
, UTxO Era
utxos'
)
where
Tx (ShelleyTxBody ShelleyBasedEra Era
era body :: TxBody (ShelleyLedgerEra Era)
body@Conway.ConwayTxBody{StrictMaybe ScriptIntegrityHash
StrictMaybe Coin
StrictMaybe Network
StrictMaybe TxAuxDataHash
StrictMaybe (Sized (TxOut ConwayEra))
VotingProcedures ConwayEra
Coin
MultiAsset
Set (KeyHash 'Witness)
Set TxIn
OSet (TxCert ConwayEra)
OSet (ProposalProcedure ConwayEra)
ValidityInterval
Withdrawals
StrictSeq (Sized (TxOut ConwayEra))
ctbVldt :: TxBody ConwayEra -> ValidityInterval
ctbAdHash :: TxBody ConwayEra -> StrictMaybe TxAuxDataHash
ctbCerts :: TxBody ConwayEra -> OSet (TxCert ConwayEra)
ctbCollateralInputs :: TxBody ConwayEra -> Set TxIn
ctbCollateralReturn :: TxBody ConwayEra -> StrictMaybe (Sized (TxOut ConwayEra))
ctbCurrentTreasuryValue :: TxBody ConwayEra -> StrictMaybe Coin
ctbMint :: TxBody ConwayEra -> MultiAsset
ctbOutputs :: TxBody ConwayEra -> StrictSeq (Sized (TxOut ConwayEra))
ctbProposalProcedures :: TxBody ConwayEra -> OSet (ProposalProcedure ConwayEra)
ctbReferenceInputs :: TxBody ConwayEra -> Set TxIn
ctbReqSignerHashes :: TxBody ConwayEra -> Set (KeyHash 'Witness)
ctbScriptIntegrityHash :: TxBody ConwayEra -> StrictMaybe ScriptIntegrityHash
ctbSpendInputs :: TxBody ConwayEra -> Set TxIn
ctbTotalCollateral :: TxBody ConwayEra -> StrictMaybe Coin
ctbTreasuryDonation :: TxBody ConwayEra -> Coin
ctbTxNetworkId :: TxBody ConwayEra -> StrictMaybe Network
ctbTxfee :: TxBody ConwayEra -> Coin
ctbVotingProcedures :: TxBody ConwayEra -> VotingProcedures ConwayEra
ctbWithdrawals :: TxBody ConwayEra -> Withdrawals
ctbSpendInputs :: Set TxIn
ctbCollateralInputs :: Set TxIn
ctbReferenceInputs :: Set TxIn
ctbOutputs :: StrictSeq (Sized (TxOut ConwayEra))
ctbCollateralReturn :: StrictMaybe (Sized (TxOut ConwayEra))
ctbTotalCollateral :: StrictMaybe Coin
ctbCerts :: OSet (TxCert ConwayEra)
ctbWithdrawals :: Withdrawals
ctbTxfee :: Coin
ctbVldt :: ValidityInterval
ctbReqSignerHashes :: Set (KeyHash 'Witness)
ctbMint :: MultiAsset
ctbScriptIntegrityHash :: StrictMaybe ScriptIntegrityHash
ctbAdHash :: StrictMaybe TxAuxDataHash
ctbTxNetworkId :: StrictMaybe Network
ctbVotingProcedures :: VotingProcedures ConwayEra
ctbProposalProcedures :: OSet (ProposalProcedure ConwayEra)
ctbCurrentTreasuryValue :: StrictMaybe Coin
ctbTreasuryDonation :: Coin
..} [Script (ShelleyLedgerEra Era)]
scripts TxBodyScriptData Era
scriptData Maybe (TxAuxData (ShelleyLedgerEra Era))
auxData TxScriptValidity Era
validity) [KeyWitness Era]
wits = Tx Era
tx
txIn :: TxIn
txIn = UTxO Era -> TxIn
mkNewTxIn UTxO Era
utxos
input :: TxIn
input = TxIn -> TxIn
toShelleyTxIn TxIn
txIn
refInputs' :: Set TxIn
refInputs' = TxIn -> Set TxIn -> Set TxIn
forall a. Ord a => a -> Set a -> Set a
Set.insert TxIn
input Set TxIn
ctbReferenceInputs
txOut :: TxOut CtxUTxO Era
txOut = AddressAny
-> Value -> Datum -> ReferenceScript Era -> TxOut CtxUTxO Era
makeTxOut AddressAny
addr Value
value Datum
datum ReferenceScript Era
rscript
utxos' :: UTxO Era
utxos' = Map TxIn (TxOut CtxUTxO Era) -> UTxO Era
forall era. Map TxIn (TxOut CtxUTxO era) -> UTxO era
UTxO (Map TxIn (TxOut CtxUTxO Era) -> UTxO Era)
-> (UTxO Era -> Map TxIn (TxOut CtxUTxO Era))
-> UTxO Era
-> UTxO Era
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TxIn
-> TxOut CtxUTxO Era
-> Map TxIn (TxOut CtxUTxO Era)
-> Map TxIn (TxOut CtxUTxO Era)
forall k a. Ord k => k -> a -> Map k a -> Map k a
Map.insert TxIn
txIn TxOut CtxUTxO Era
txOut (Map TxIn (TxOut CtxUTxO Era) -> Map TxIn (TxOut CtxUTxO Era))
-> (UTxO Era -> Map TxIn (TxOut CtxUTxO Era))
-> UTxO Era
-> Map TxIn (TxOut CtxUTxO Era)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UTxO Era -> Map TxIn (TxOut CtxUTxO Era)
forall era. UTxO era -> Map TxIn (TxOut CtxUTxO era)
unUTxO (UTxO Era -> UTxO Era) -> UTxO Era -> UTxO Era
forall a b. (a -> b) -> a -> b
$ UTxO Era
utxos
scriptInEra :: ScriptInEra Era
scriptInEra =
ScriptLanguageInEra lang Era -> Script lang -> ScriptInEra Era
forall lang era.
ScriptLanguageInEra lang era -> Script lang -> ScriptInEra era
ScriptInEra
ScriptLanguageInEra lang Era
forall lang era.
HasScriptLanguageInEra lang era =>
ScriptLanguageInEra lang era
scriptLanguageInEra
(PlutusScriptVersion lang -> PlutusScript lang -> Script lang
forall lang.
IsPlutusScriptLanguage lang =>
PlutusScriptVersion lang -> PlutusScript lang -> Script lang
PlutusScript PlutusScriptVersion lang
forall lang.
IsPlutusScriptLanguage lang =>
PlutusScriptVersion lang
plutusScriptVersion PlutusScript lang
script)
newScript :: Script (ShelleyLedgerEra Era)
newScript = forall era. ScriptInEra era -> Script (ShelleyLedgerEra era)
toShelleyScript @Era ScriptInEra Era
scriptInEra
scripts' :: [AlonzoScript ConwayEra]
scripts' = [Script (ShelleyLedgerEra Era)]
[AlonzoScript ConwayEra]
scripts [AlonzoScript ConwayEra]
-> [AlonzoScript ConwayEra] -> [AlonzoScript ConwayEra]
forall a. [a] -> [a] -> [a]
++ [Script (ShelleyLedgerEra Era)
AlonzoScript ConwayEra
newScript]
hash :: ScriptHash
hash = Script lang -> ScriptHash
forall lang. Script lang -> ScriptHash
hashScript (Script lang -> ScriptHash) -> Script lang -> ScriptHash
forall a b. (a -> b) -> a -> b
$ PlutusScriptVersion lang -> PlutusScript lang -> Script lang
forall lang.
IsPlutusScriptLanguage lang =>
PlutusScriptVersion lang -> PlutusScript lang -> Script lang
PlutusScript PlutusScriptVersion lang
forall lang.
IsPlutusScriptLanguage lang =>
PlutusScriptVersion lang
plutusScriptVersion PlutusScript lang
script
addr :: AddressAny
addr = ScriptHash -> AddressAny
scriptAddressAny ScriptHash
hash
applyTxMod Tx Era
tx UTxO Era
utxos (AddReferenceScriptInput ScriptHash
script Value
value Datum
datum Redeemer
redeemer) =
( TxBody Era -> [KeyWitness Era] -> Tx Era
forall era. TxBody era -> [KeyWitness era] -> Tx era
Tx (ShelleyBasedEra Era
-> TxBody (ShelleyLedgerEra Era)
-> [Script (ShelleyLedgerEra Era)]
-> TxBodyScriptData Era
-> Maybe (TxAuxData (ShelleyLedgerEra Era))
-> TxScriptValidity Era
-> TxBody Era
forall era.
ShelleyBasedEra era
-> TxBody (ShelleyLedgerEra era)
-> [Script (ShelleyLedgerEra era)]
-> TxBodyScriptData era
-> Maybe (TxAuxData (ShelleyLedgerEra era))
-> TxScriptValidity era
-> TxBody era
ShelleyTxBody ShelleyBasedEra Era
era TxBody (ShelleyLedgerEra Era)
body{Conway.ctbSpendInputs = inputs'} [Script (ShelleyLedgerEra Era)]
scripts TxBodyScriptData Era
scriptData' Maybe (TxAuxData (ShelleyLedgerEra Era))
auxData TxScriptValidity Era
validity) [KeyWitness Era]
wits
, UTxO Era
utxos'
)
where
Tx (ShelleyTxBody ShelleyBasedEra Era
era body :: TxBody (ShelleyLedgerEra Era)
body@Conway.ConwayTxBody{StrictMaybe ScriptIntegrityHash
StrictMaybe Coin
StrictMaybe Network
StrictMaybe TxAuxDataHash
StrictMaybe (Sized (TxOut ConwayEra))
VotingProcedures ConwayEra
Coin
MultiAsset
Set (KeyHash 'Witness)
Set TxIn
OSet (TxCert ConwayEra)
OSet (ProposalProcedure ConwayEra)
ValidityInterval
Withdrawals
StrictSeq (Sized (TxOut ConwayEra))
ctbVldt :: TxBody ConwayEra -> ValidityInterval
ctbAdHash :: TxBody ConwayEra -> StrictMaybe TxAuxDataHash
ctbCerts :: TxBody ConwayEra -> OSet (TxCert ConwayEra)
ctbCollateralInputs :: TxBody ConwayEra -> Set TxIn
ctbCollateralReturn :: TxBody ConwayEra -> StrictMaybe (Sized (TxOut ConwayEra))
ctbCurrentTreasuryValue :: TxBody ConwayEra -> StrictMaybe Coin
ctbMint :: TxBody ConwayEra -> MultiAsset
ctbOutputs :: TxBody ConwayEra -> StrictSeq (Sized (TxOut ConwayEra))
ctbProposalProcedures :: TxBody ConwayEra -> OSet (ProposalProcedure ConwayEra)
ctbReferenceInputs :: TxBody ConwayEra -> Set TxIn
ctbReqSignerHashes :: TxBody ConwayEra -> Set (KeyHash 'Witness)
ctbScriptIntegrityHash :: TxBody ConwayEra -> StrictMaybe ScriptIntegrityHash
ctbSpendInputs :: TxBody ConwayEra -> Set TxIn
ctbTotalCollateral :: TxBody ConwayEra -> StrictMaybe Coin
ctbTreasuryDonation :: TxBody ConwayEra -> Coin
ctbTxNetworkId :: TxBody ConwayEra -> StrictMaybe Network
ctbTxfee :: TxBody ConwayEra -> Coin
ctbVotingProcedures :: TxBody ConwayEra -> VotingProcedures ConwayEra
ctbWithdrawals :: TxBody ConwayEra -> Withdrawals
ctbSpendInputs :: Set TxIn
ctbCollateralInputs :: Set TxIn
ctbReferenceInputs :: Set TxIn
ctbOutputs :: StrictSeq (Sized (TxOut ConwayEra))
ctbCollateralReturn :: StrictMaybe (Sized (TxOut ConwayEra))
ctbTotalCollateral :: StrictMaybe Coin
ctbCerts :: OSet (TxCert ConwayEra)
ctbWithdrawals :: Withdrawals
ctbTxfee :: Coin
ctbVldt :: ValidityInterval
ctbReqSignerHashes :: Set (KeyHash 'Witness)
ctbMint :: MultiAsset
ctbScriptIntegrityHash :: StrictMaybe ScriptIntegrityHash
ctbAdHash :: StrictMaybe TxAuxDataHash
ctbTxNetworkId :: StrictMaybe Network
ctbVotingProcedures :: VotingProcedures ConwayEra
ctbProposalProcedures :: OSet (ProposalProcedure ConwayEra)
ctbCurrentTreasuryValue :: StrictMaybe Coin
ctbTreasuryDonation :: Coin
..} [Script (ShelleyLedgerEra Era)]
scripts TxBodyScriptData Era
scriptData Maybe (TxAuxData (ShelleyLedgerEra Era))
auxData TxScriptValidity Era
validity) [KeyWitness Era]
wits = Tx Era
tx
txIn :: TxIn
txIn = UTxO Era -> TxIn
mkNewTxIn UTxO Era
utxos
input :: TxIn
input = TxIn -> TxIn
toShelleyTxIn TxIn
txIn
inputs' :: Set TxIn
inputs' = TxIn -> Set TxIn -> Set TxIn
forall a. Ord a => a -> Set a -> Set a
Set.insert TxIn
input Set TxIn
ctbSpendInputs
txOut :: TxOut CtxUTxO Era
txOut = AddressAny
-> Value -> Datum -> ReferenceScript Era -> TxOut CtxUTxO Era
makeTxOut AddressAny
addr Value
value Datum
datum ReferenceScript Era
forall era. ReferenceScript era
ReferenceScriptNone
utxos' :: UTxO Era
utxos' = Map TxIn (TxOut CtxUTxO Era) -> UTxO Era
forall era. Map TxIn (TxOut CtxUTxO era) -> UTxO era
UTxO (Map TxIn (TxOut CtxUTxO Era) -> UTxO Era)
-> (UTxO Era -> Map TxIn (TxOut CtxUTxO Era))
-> UTxO Era
-> UTxO Era
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TxIn
-> TxOut CtxUTxO Era
-> Map TxIn (TxOut CtxUTxO Era)
-> Map TxIn (TxOut CtxUTxO Era)
forall k a. Ord k => k -> a -> Map k a -> Map k a
Map.insert TxIn
txIn TxOut CtxUTxO Era
txOut (Map TxIn (TxOut CtxUTxO Era) -> Map TxIn (TxOut CtxUTxO Era))
-> (UTxO Era -> Map TxIn (TxOut CtxUTxO Era))
-> UTxO Era
-> Map TxIn (TxOut CtxUTxO Era)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UTxO Era -> Map TxIn (TxOut CtxUTxO Era)
forall era. UTxO era -> Map TxIn (TxOut CtxUTxO era)
unUTxO (UTxO Era -> UTxO Era) -> UTxO Era -> UTxO Era
forall a b. (a -> b) -> a -> b
$ UTxO Era
utxos
SJust (Ledger.AsIx Word32
idx) = AsItem Word32 TxIn -> Set TxIn -> StrictMaybe (AsIx Word32 TxIn)
forall elem container.
Indexable elem container =>
AsItem Word32 elem -> container -> StrictMaybe (AsIx Word32 elem)
Ledger.indexOf (TxIn -> AsItem Word32 TxIn
forall ix it. it -> AsItem ix it
Ledger.AsItem TxIn
input) Set TxIn
inputs'
idxUpdate :: Word32 -> Word32
idxUpdate Word32
idx'
| Word32
idx' Word32 -> Word32 -> Bool
forall a. Ord a => a -> a -> Bool
>= Word32
idx = Word32
idx' Word32 -> Word32 -> Word32
forall a. Num a => a -> a -> a
+ Word32
1
| Bool
otherwise = Word32
idx'
datum' :: Data ConwayEra
datum' = case Datum
datum of
Datum
TxOutDatumNone -> [Char] -> Data ConwayEra
forall a. HasCallStack => [Char] -> a
error [Char]
"Bad test!"
TxOutDatumHash{} -> [Char] -> Data ConwayEra
forall a. HasCallStack => [Char] -> a
error [Char]
"Bad test!"
TxOutSupplementalDatum AlonzoEraOnwards Era
_ HashableScriptData
d -> HashableScriptData -> Data ConwayEra
forall ledgerera.
Era ledgerera =>
HashableScriptData -> Data ledgerera
toAlonzoData HashableScriptData
d
TxOutDatumInline BabbageEraOnwards Era
_ HashableScriptData
d -> HashableScriptData -> Data ConwayEra
forall ledgerera.
Era ledgerera =>
HashableScriptData -> Data ledgerera
toAlonzoData HashableScriptData
d
scriptData' :: TxBodyScriptData Era
scriptData' =
Word32
-> Data (ShelleyLedgerEra Era)
-> (Data (ShelleyLedgerEra Era), ExUnits)
-> TxBodyScriptData Era
-> TxBodyScriptData Era
addScriptData Word32
idx Data (ShelleyLedgerEra Era)
Data ConwayEra
datum' (HashableScriptData -> Data (ShelleyLedgerEra Era)
forall ledgerera.
Era ledgerera =>
HashableScriptData -> Data ledgerera
toAlonzoData (HashableScriptData -> Data (ShelleyLedgerEra Era))
-> HashableScriptData -> Data (ShelleyLedgerEra Era)
forall a b. (a -> b) -> a -> b
$ Redeemer -> HashableScriptData
unsafeHashableScriptData Redeemer
redeemer, ExecutionUnits -> ExUnits
toAlonzoExUnits (ExecutionUnits -> ExUnits) -> ExecutionUnits -> ExUnits
forall a b. (a -> b) -> a -> b
$ Natural -> Natural -> ExecutionUnits
ExecutionUnits Natural
0 Natural
0) (TxBodyScriptData Era -> TxBodyScriptData Era)
-> TxBodyScriptData Era -> TxBodyScriptData Era
forall a b. (a -> b) -> a -> b
$
Maybe Word32
-> (Word32 -> Word32)
-> TxBodyScriptData Era
-> TxBodyScriptData Era
recomputeScriptData Maybe Word32
forall a. Maybe a
Nothing Word32 -> Word32
idxUpdate TxBodyScriptData Era
scriptData
addr :: AddressAny
addr = ScriptHash -> AddressAny
scriptAddressAny ScriptHash
script
applyTxMod Tx Era
tx UTxO Era
utxos (AddPlutusScriptInput PlutusScript lang
script Value
value Datum
datum Redeemer
redeemer ReferenceScript Era
rscript) =
( TxBody Era -> [KeyWitness Era] -> Tx Era
forall era. TxBody era -> [KeyWitness era] -> Tx era
Tx (ShelleyBasedEra Era
-> TxBody (ShelleyLedgerEra Era)
-> [Script (ShelleyLedgerEra Era)]
-> TxBodyScriptData Era
-> Maybe (TxAuxData (ShelleyLedgerEra Era))
-> TxScriptValidity Era
-> TxBody Era
forall era.
ShelleyBasedEra era
-> TxBody (ShelleyLedgerEra era)
-> [Script (ShelleyLedgerEra era)]
-> TxBodyScriptData era
-> Maybe (TxAuxData (ShelleyLedgerEra era))
-> TxScriptValidity era
-> TxBody era
ShelleyTxBody ShelleyBasedEra Era
era TxBody (ShelleyLedgerEra Era)
body{Conway.ctbSpendInputs = inputs'} [Script (ShelleyLedgerEra Era)]
[AlonzoScript ConwayEra]
scripts' TxBodyScriptData Era
scriptData' Maybe (TxAuxData (ShelleyLedgerEra Era))
auxData TxScriptValidity Era
validity) [KeyWitness Era]
wits
, UTxO Era
utxos'
)
where
Tx (ShelleyTxBody ShelleyBasedEra Era
era body :: TxBody (ShelleyLedgerEra Era)
body@Conway.ConwayTxBody{StrictMaybe ScriptIntegrityHash
StrictMaybe Coin
StrictMaybe Network
StrictMaybe TxAuxDataHash
StrictMaybe (Sized (TxOut ConwayEra))
VotingProcedures ConwayEra
Coin
MultiAsset
Set (KeyHash 'Witness)
Set TxIn
OSet (TxCert ConwayEra)
OSet (ProposalProcedure ConwayEra)
ValidityInterval
Withdrawals
StrictSeq (Sized (TxOut ConwayEra))
ctbVldt :: TxBody ConwayEra -> ValidityInterval
ctbAdHash :: TxBody ConwayEra -> StrictMaybe TxAuxDataHash
ctbCerts :: TxBody ConwayEra -> OSet (TxCert ConwayEra)
ctbCollateralInputs :: TxBody ConwayEra -> Set TxIn
ctbCollateralReturn :: TxBody ConwayEra -> StrictMaybe (Sized (TxOut ConwayEra))
ctbCurrentTreasuryValue :: TxBody ConwayEra -> StrictMaybe Coin
ctbMint :: TxBody ConwayEra -> MultiAsset
ctbOutputs :: TxBody ConwayEra -> StrictSeq (Sized (TxOut ConwayEra))
ctbProposalProcedures :: TxBody ConwayEra -> OSet (ProposalProcedure ConwayEra)
ctbReferenceInputs :: TxBody ConwayEra -> Set TxIn
ctbReqSignerHashes :: TxBody ConwayEra -> Set (KeyHash 'Witness)
ctbScriptIntegrityHash :: TxBody ConwayEra -> StrictMaybe ScriptIntegrityHash
ctbSpendInputs :: TxBody ConwayEra -> Set TxIn
ctbTotalCollateral :: TxBody ConwayEra -> StrictMaybe Coin
ctbTreasuryDonation :: TxBody ConwayEra -> Coin
ctbTxNetworkId :: TxBody ConwayEra -> StrictMaybe Network
ctbTxfee :: TxBody ConwayEra -> Coin
ctbVotingProcedures :: TxBody ConwayEra -> VotingProcedures ConwayEra
ctbWithdrawals :: TxBody ConwayEra -> Withdrawals
ctbSpendInputs :: Set TxIn
ctbCollateralInputs :: Set TxIn
ctbReferenceInputs :: Set TxIn
ctbOutputs :: StrictSeq (Sized (TxOut ConwayEra))
ctbCollateralReturn :: StrictMaybe (Sized (TxOut ConwayEra))
ctbTotalCollateral :: StrictMaybe Coin
ctbCerts :: OSet (TxCert ConwayEra)
ctbWithdrawals :: Withdrawals
ctbTxfee :: Coin
ctbVldt :: ValidityInterval
ctbReqSignerHashes :: Set (KeyHash 'Witness)
ctbMint :: MultiAsset
ctbScriptIntegrityHash :: StrictMaybe ScriptIntegrityHash
ctbAdHash :: StrictMaybe TxAuxDataHash
ctbTxNetworkId :: StrictMaybe Network
ctbVotingProcedures :: VotingProcedures ConwayEra
ctbProposalProcedures :: OSet (ProposalProcedure ConwayEra)
ctbCurrentTreasuryValue :: StrictMaybe Coin
ctbTreasuryDonation :: Coin
..} [Script (ShelleyLedgerEra Era)]
scripts TxBodyScriptData Era
scriptData Maybe (TxAuxData (ShelleyLedgerEra Era))
auxData TxScriptValidity Era
validity) [KeyWitness Era]
wits = Tx Era
tx
txIn :: TxIn
txIn = UTxO Era -> TxIn
mkNewTxIn UTxO Era
utxos
input :: TxIn
input = TxIn -> TxIn
toShelleyTxIn TxIn
txIn
inputs' :: Set TxIn
inputs' = TxIn -> Set TxIn -> Set TxIn
forall a. Ord a => a -> Set a -> Set a
Set.insert TxIn
input Set TxIn
ctbSpendInputs
txOut :: TxOut CtxUTxO Era
txOut = AddressAny
-> Value -> Datum -> ReferenceScript Era -> TxOut CtxUTxO Era
makeTxOut AddressAny
addr Value
value Datum
datum ReferenceScript Era
rscript
utxos' :: UTxO Era
utxos' = Map TxIn (TxOut CtxUTxO Era) -> UTxO Era
forall era. Map TxIn (TxOut CtxUTxO era) -> UTxO era
UTxO (Map TxIn (TxOut CtxUTxO Era) -> UTxO Era)
-> (UTxO Era -> Map TxIn (TxOut CtxUTxO Era))
-> UTxO Era
-> UTxO Era
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TxIn
-> TxOut CtxUTxO Era
-> Map TxIn (TxOut CtxUTxO Era)
-> Map TxIn (TxOut CtxUTxO Era)
forall k a. Ord k => k -> a -> Map k a -> Map k a
Map.insert TxIn
txIn TxOut CtxUTxO Era
txOut (Map TxIn (TxOut CtxUTxO Era) -> Map TxIn (TxOut CtxUTxO Era))
-> (UTxO Era -> Map TxIn (TxOut CtxUTxO Era))
-> UTxO Era
-> Map TxIn (TxOut CtxUTxO Era)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UTxO Era -> Map TxIn (TxOut CtxUTxO Era)
forall era. UTxO era -> Map TxIn (TxOut CtxUTxO era)
unUTxO (UTxO Era -> UTxO Era) -> UTxO Era -> UTxO Era
forall a b. (a -> b) -> a -> b
$ UTxO Era
utxos
scriptInEra :: ScriptInEra Era
scriptInEra =
ScriptLanguageInEra lang Era -> Script lang -> ScriptInEra Era
forall lang era.
ScriptLanguageInEra lang era -> Script lang -> ScriptInEra era
ScriptInEra
ScriptLanguageInEra lang Era
forall lang era.
HasScriptLanguageInEra lang era =>
ScriptLanguageInEra lang era
scriptLanguageInEra
(PlutusScriptVersion lang -> PlutusScript lang -> Script lang
forall lang.
IsPlutusScriptLanguage lang =>
PlutusScriptVersion lang -> PlutusScript lang -> Script lang
PlutusScript PlutusScriptVersion lang
forall lang.
IsPlutusScriptLanguage lang =>
PlutusScriptVersion lang
plutusScriptVersion PlutusScript lang
script)
newScript :: Script (ShelleyLedgerEra Era)
newScript = forall era. ScriptInEra era -> Script (ShelleyLedgerEra era)
toShelleyScript @Era ScriptInEra Era
scriptInEra
scripts' :: [AlonzoScript ConwayEra]
scripts' = [Script (ShelleyLedgerEra Era)]
[AlonzoScript ConwayEra]
scripts [AlonzoScript ConwayEra]
-> [AlonzoScript ConwayEra] -> [AlonzoScript ConwayEra]
forall a. [a] -> [a] -> [a]
++ [Script (ShelleyLedgerEra Era)
AlonzoScript ConwayEra
newScript]
SJust (Ledger.AsIx Word32
idx) = AsItem Word32 TxIn -> Set TxIn -> StrictMaybe (AsIx Word32 TxIn)
forall elem container.
Indexable elem container =>
AsItem Word32 elem -> container -> StrictMaybe (AsIx Word32 elem)
Ledger.indexOf (TxIn -> AsItem Word32 TxIn
forall ix it. it -> AsItem ix it
Ledger.AsItem TxIn
input) Set TxIn
inputs'
idxUpdate :: Word32 -> Word32
idxUpdate Word32
idx'
| Word32
idx' Word32 -> Word32 -> Bool
forall a. Ord a => a -> a -> Bool
>= Word32
idx = Word32
idx' Word32 -> Word32 -> Word32
forall a. Num a => a -> a -> a
+ Word32
1
| Bool
otherwise = Word32
idx'
datum' :: Data ConwayEra
datum' = case Datum
datum of
Datum
TxOutDatumNone -> [Char] -> Data ConwayEra
forall a. HasCallStack => [Char] -> a
error [Char]
"Bad test!"
TxOutDatumHash{} -> [Char] -> Data ConwayEra
forall a. HasCallStack => [Char] -> a
error [Char]
"Bad test!"
TxOutSupplementalDatum AlonzoEraOnwards Era
_ HashableScriptData
d -> HashableScriptData -> Data ConwayEra
forall ledgerera.
Era ledgerera =>
HashableScriptData -> Data ledgerera
toAlonzoData HashableScriptData
d
TxOutDatumInline BabbageEraOnwards Era
_ HashableScriptData
d -> HashableScriptData -> Data ConwayEra
forall ledgerera.
Era ledgerera =>
HashableScriptData -> Data ledgerera
toAlonzoData HashableScriptData
d
scriptData' :: TxBodyScriptData Era
scriptData' =
Word32
-> Data (ShelleyLedgerEra Era)
-> (Data (ShelleyLedgerEra Era), ExUnits)
-> TxBodyScriptData Era
-> TxBodyScriptData Era
addScriptData Word32
idx Data (ShelleyLedgerEra Era)
Data ConwayEra
datum' (HashableScriptData -> Data (ShelleyLedgerEra Era)
forall ledgerera.
Era ledgerera =>
HashableScriptData -> Data ledgerera
toAlonzoData (HashableScriptData -> Data (ShelleyLedgerEra Era))
-> HashableScriptData -> Data (ShelleyLedgerEra Era)
forall a b. (a -> b) -> a -> b
$ Redeemer -> HashableScriptData
unsafeHashableScriptData Redeemer
redeemer, ExecutionUnits -> ExUnits
toAlonzoExUnits (ExecutionUnits -> ExUnits) -> ExecutionUnits -> ExUnits
forall a b. (a -> b) -> a -> b
$ Natural -> Natural -> ExecutionUnits
ExecutionUnits Natural
0 Natural
0) (TxBodyScriptData Era -> TxBodyScriptData Era)
-> TxBodyScriptData Era -> TxBodyScriptData Era
forall a b. (a -> b) -> a -> b
$
Maybe Word32
-> (Word32 -> Word32)
-> TxBodyScriptData Era
-> TxBodyScriptData Era
recomputeScriptData Maybe Word32
forall a. Maybe a
Nothing Word32 -> Word32
idxUpdate TxBodyScriptData Era
scriptData
hash :: ScriptHash
hash = Script lang -> ScriptHash
forall lang. Script lang -> ScriptHash
hashScript (Script lang -> ScriptHash) -> Script lang -> ScriptHash
forall a b. (a -> b) -> a -> b
$ PlutusScriptVersion lang -> PlutusScript lang -> Script lang
forall lang.
IsPlutusScriptLanguage lang =>
PlutusScriptVersion lang -> PlutusScript lang -> Script lang
PlutusScript PlutusScriptVersion lang
forall lang.
IsPlutusScriptLanguage lang =>
PlutusScriptVersion lang
plutusScriptVersion PlutusScript lang
script
addr :: AddressAny
addr = ScriptHash -> AddressAny
scriptAddressAny ScriptHash
hash
applyTxMod Tx Era
tx UTxO Era
utxos (AddSimpleScriptInput SimpleScript
script Value
value ReferenceScript Era
rscript Bool
False) =
( TxBody Era -> [KeyWitness Era] -> Tx Era
forall era. TxBody era -> [KeyWitness era] -> Tx era
Tx (ShelleyBasedEra Era
-> TxBody (ShelleyLedgerEra Era)
-> [Script (ShelleyLedgerEra Era)]
-> TxBodyScriptData Era
-> Maybe (TxAuxData (ShelleyLedgerEra Era))
-> TxScriptValidity Era
-> TxBody Era
forall era.
ShelleyBasedEra era
-> TxBody (ShelleyLedgerEra era)
-> [Script (ShelleyLedgerEra era)]
-> TxBodyScriptData era
-> Maybe (TxAuxData (ShelleyLedgerEra era))
-> TxScriptValidity era
-> TxBody era
ShelleyTxBody ShelleyBasedEra Era
era TxBody (ShelleyLedgerEra Era)
body{Conway.ctbSpendInputs = inputs'} [Script (ShelleyLedgerEra Era)]
[AlonzoScript ConwayEra]
scripts' TxBodyScriptData Era
scriptData' Maybe (TxAuxData (ShelleyLedgerEra Era))
auxData TxScriptValidity Era
validity) [KeyWitness Era]
wits
, UTxO Era
utxos'
)
where
Tx (ShelleyTxBody ShelleyBasedEra Era
era body :: TxBody (ShelleyLedgerEra Era)
body@Conway.ConwayTxBody{StrictMaybe ScriptIntegrityHash
StrictMaybe Coin
StrictMaybe Network
StrictMaybe TxAuxDataHash
StrictMaybe (Sized (TxOut ConwayEra))
VotingProcedures ConwayEra
Coin
MultiAsset
Set (KeyHash 'Witness)
Set TxIn
OSet (TxCert ConwayEra)
OSet (ProposalProcedure ConwayEra)
ValidityInterval
Withdrawals
StrictSeq (Sized (TxOut ConwayEra))
ctbVldt :: TxBody ConwayEra -> ValidityInterval
ctbAdHash :: TxBody ConwayEra -> StrictMaybe TxAuxDataHash
ctbCerts :: TxBody ConwayEra -> OSet (TxCert ConwayEra)
ctbCollateralInputs :: TxBody ConwayEra -> Set TxIn
ctbCollateralReturn :: TxBody ConwayEra -> StrictMaybe (Sized (TxOut ConwayEra))
ctbCurrentTreasuryValue :: TxBody ConwayEra -> StrictMaybe Coin
ctbMint :: TxBody ConwayEra -> MultiAsset
ctbOutputs :: TxBody ConwayEra -> StrictSeq (Sized (TxOut ConwayEra))
ctbProposalProcedures :: TxBody ConwayEra -> OSet (ProposalProcedure ConwayEra)
ctbReferenceInputs :: TxBody ConwayEra -> Set TxIn
ctbReqSignerHashes :: TxBody ConwayEra -> Set (KeyHash 'Witness)
ctbScriptIntegrityHash :: TxBody ConwayEra -> StrictMaybe ScriptIntegrityHash
ctbSpendInputs :: TxBody ConwayEra -> Set TxIn
ctbTotalCollateral :: TxBody ConwayEra -> StrictMaybe Coin
ctbTreasuryDonation :: TxBody ConwayEra -> Coin
ctbTxNetworkId :: TxBody ConwayEra -> StrictMaybe Network
ctbTxfee :: TxBody ConwayEra -> Coin
ctbVotingProcedures :: TxBody ConwayEra -> VotingProcedures ConwayEra
ctbWithdrawals :: TxBody ConwayEra -> Withdrawals
ctbSpendInputs :: Set TxIn
ctbCollateralInputs :: Set TxIn
ctbReferenceInputs :: Set TxIn
ctbOutputs :: StrictSeq (Sized (TxOut ConwayEra))
ctbCollateralReturn :: StrictMaybe (Sized (TxOut ConwayEra))
ctbTotalCollateral :: StrictMaybe Coin
ctbCerts :: OSet (TxCert ConwayEra)
ctbWithdrawals :: Withdrawals
ctbTxfee :: Coin
ctbVldt :: ValidityInterval
ctbReqSignerHashes :: Set (KeyHash 'Witness)
ctbMint :: MultiAsset
ctbScriptIntegrityHash :: StrictMaybe ScriptIntegrityHash
ctbAdHash :: StrictMaybe TxAuxDataHash
ctbTxNetworkId :: StrictMaybe Network
ctbVotingProcedures :: VotingProcedures ConwayEra
ctbProposalProcedures :: OSet (ProposalProcedure ConwayEra)
ctbCurrentTreasuryValue :: StrictMaybe Coin
ctbTreasuryDonation :: Coin
..} [Script (ShelleyLedgerEra Era)]
scripts TxBodyScriptData Era
scriptData Maybe (TxAuxData (ShelleyLedgerEra Era))
auxData TxScriptValidity Era
validity) [KeyWitness Era]
wits = Tx Era
tx
txIn :: TxIn
txIn = UTxO Era -> TxIn
mkNewTxIn UTxO Era
utxos
input :: TxIn
input = TxIn -> TxIn
toShelleyTxIn TxIn
txIn
inputs' :: Set TxIn
inputs' = TxIn -> Set TxIn -> Set TxIn
forall a. Ord a => a -> Set a -> Set a
Set.insert TxIn
input Set TxIn
ctbSpendInputs
txOut :: TxOut CtxUTxO Era
txOut = AddressAny
-> Value -> Datum -> ReferenceScript Era -> TxOut CtxUTxO Era
makeTxOut AddressAny
addr Value
value Datum
forall ctx era. TxOutDatum ctx era
TxOutDatumNone ReferenceScript Era
rscript
utxos' :: UTxO Era
utxos' = Map TxIn (TxOut CtxUTxO Era) -> UTxO Era
forall era. Map TxIn (TxOut CtxUTxO era) -> UTxO era
UTxO (Map TxIn (TxOut CtxUTxO Era) -> UTxO Era)
-> (UTxO Era -> Map TxIn (TxOut CtxUTxO Era))
-> UTxO Era
-> UTxO Era
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TxIn
-> TxOut CtxUTxO Era
-> Map TxIn (TxOut CtxUTxO Era)
-> Map TxIn (TxOut CtxUTxO Era)
forall k a. Ord k => k -> a -> Map k a -> Map k a
Map.insert TxIn
txIn TxOut CtxUTxO Era
txOut (Map TxIn (TxOut CtxUTxO Era) -> Map TxIn (TxOut CtxUTxO Era))
-> (UTxO Era -> Map TxIn (TxOut CtxUTxO Era))
-> UTxO Era
-> Map TxIn (TxOut CtxUTxO Era)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UTxO Era -> Map TxIn (TxOut CtxUTxO Era)
forall era. UTxO era -> Map TxIn (TxOut CtxUTxO era)
unUTxO (UTxO Era -> UTxO Era) -> UTxO Era -> UTxO Era
forall a b. (a -> b) -> a -> b
$ UTxO Era
utxos
scriptInEra :: ScriptInEra Era
scriptInEra =
ScriptLanguageInEra SimpleScript' Era
-> Script SimpleScript' -> ScriptInEra Era
forall lang era.
ScriptLanguageInEra lang era -> Script lang -> ScriptInEra era
ScriptInEra
ScriptLanguageInEra SimpleScript' Era
SimpleScriptInConway
(SimpleScript -> Script SimpleScript'
SimpleScript SimpleScript
script)
newScript :: Script (ShelleyLedgerEra Era)
newScript = forall era. ScriptInEra era -> Script (ShelleyLedgerEra era)
toShelleyScript @Era ScriptInEra Era
scriptInEra
scripts' :: [AlonzoScript ConwayEra]
scripts' = [Script (ShelleyLedgerEra Era)]
[AlonzoScript ConwayEra]
scripts [AlonzoScript ConwayEra]
-> [AlonzoScript ConwayEra] -> [AlonzoScript ConwayEra]
forall a. [a] -> [a] -> [a]
++ [Script (ShelleyLedgerEra Era)
AlonzoScript ConwayEra
newScript]
SJust (Ledger.AsIx Word32
idx) = AsItem Word32 TxIn -> Set TxIn -> StrictMaybe (AsIx Word32 TxIn)
forall elem container.
Indexable elem container =>
AsItem Word32 elem -> container -> StrictMaybe (AsIx Word32 elem)
Ledger.indexOf (TxIn -> AsItem Word32 TxIn
forall ix it. it -> AsItem ix it
Ledger.AsItem TxIn
input) Set TxIn
inputs'
idxUpdate :: Word32 -> Word32
idxUpdate Word32
idx'
| Word32
idx' Word32 -> Word32 -> Bool
forall a. Ord a => a -> a -> Bool
>= Word32
idx = Word32
idx' Word32 -> Word32 -> Word32
forall a. Num a => a -> a -> a
+ Word32
1
| Bool
otherwise = Word32
idx'
scriptData' :: TxBodyScriptData Era
scriptData' = Maybe Word32
-> (Word32 -> Word32)
-> TxBodyScriptData Era
-> TxBodyScriptData Era
recomputeScriptData Maybe Word32
forall a. Maybe a
Nothing Word32 -> Word32
idxUpdate TxBodyScriptData Era
scriptData
addr :: AddressAny
addr = ScriptHash -> AddressAny
scriptAddressAny (ScriptHash -> AddressAny) -> ScriptHash -> AddressAny
forall a b. (a -> b) -> a -> b
$ Script SimpleScript' -> ScriptHash
forall lang. Script lang -> ScriptHash
hashScript (SimpleScript -> Script SimpleScript'
SimpleScript SimpleScript
script)
applyTxMod Tx Era
tx UTxO Era
utxos (AddSimpleScriptInput SimpleScript
script Value
value ReferenceScript Era
rscript Bool
True) =
( TxBody Era -> [KeyWitness Era] -> Tx Era
forall era. TxBody era -> [KeyWitness era] -> Tx era
Tx (ShelleyBasedEra Era
-> TxBody (ShelleyLedgerEra Era)
-> [Script (ShelleyLedgerEra Era)]
-> TxBodyScriptData Era
-> Maybe (TxAuxData (ShelleyLedgerEra Era))
-> TxScriptValidity Era
-> TxBody Era
forall era.
ShelleyBasedEra era
-> TxBody (ShelleyLedgerEra era)
-> [Script (ShelleyLedgerEra era)]
-> TxBodyScriptData era
-> Maybe (TxAuxData (ShelleyLedgerEra era))
-> TxScriptValidity era
-> TxBody era
ShelleyTxBody ShelleyBasedEra Era
era TxBody (ShelleyLedgerEra Era)
body{Conway.ctbReferenceInputs = refInputs} [Script (ShelleyLedgerEra Era)]
[AlonzoScript ConwayEra]
scripts' TxBodyScriptData Era
scriptData Maybe (TxAuxData (ShelleyLedgerEra Era))
auxData TxScriptValidity Era
validity) [KeyWitness Era]
wits
, UTxO Era
utxos'
)
where
Tx (ShelleyTxBody ShelleyBasedEra Era
era body :: TxBody (ShelleyLedgerEra Era)
body@Conway.ConwayTxBody{StrictMaybe ScriptIntegrityHash
StrictMaybe Coin
StrictMaybe Network
StrictMaybe TxAuxDataHash
StrictMaybe (Sized (TxOut ConwayEra))
VotingProcedures ConwayEra
Coin
MultiAsset
Set (KeyHash 'Witness)
Set TxIn
OSet (TxCert ConwayEra)
OSet (ProposalProcedure ConwayEra)
ValidityInterval
Withdrawals
StrictSeq (Sized (TxOut ConwayEra))
ctbVldt :: TxBody ConwayEra -> ValidityInterval
ctbAdHash :: TxBody ConwayEra -> StrictMaybe TxAuxDataHash
ctbCerts :: TxBody ConwayEra -> OSet (TxCert ConwayEra)
ctbCollateralInputs :: TxBody ConwayEra -> Set TxIn
ctbCollateralReturn :: TxBody ConwayEra -> StrictMaybe (Sized (TxOut ConwayEra))
ctbCurrentTreasuryValue :: TxBody ConwayEra -> StrictMaybe Coin
ctbMint :: TxBody ConwayEra -> MultiAsset
ctbOutputs :: TxBody ConwayEra -> StrictSeq (Sized (TxOut ConwayEra))
ctbProposalProcedures :: TxBody ConwayEra -> OSet (ProposalProcedure ConwayEra)
ctbReferenceInputs :: TxBody ConwayEra -> Set TxIn
ctbReqSignerHashes :: TxBody ConwayEra -> Set (KeyHash 'Witness)
ctbScriptIntegrityHash :: TxBody ConwayEra -> StrictMaybe ScriptIntegrityHash
ctbSpendInputs :: TxBody ConwayEra -> Set TxIn
ctbTotalCollateral :: TxBody ConwayEra -> StrictMaybe Coin
ctbTreasuryDonation :: TxBody ConwayEra -> Coin
ctbTxNetworkId :: TxBody ConwayEra -> StrictMaybe Network
ctbTxfee :: TxBody ConwayEra -> Coin
ctbVotingProcedures :: TxBody ConwayEra -> VotingProcedures ConwayEra
ctbWithdrawals :: TxBody ConwayEra -> Withdrawals
ctbSpendInputs :: Set TxIn
ctbCollateralInputs :: Set TxIn
ctbReferenceInputs :: Set TxIn
ctbOutputs :: StrictSeq (Sized (TxOut ConwayEra))
ctbCollateralReturn :: StrictMaybe (Sized (TxOut ConwayEra))
ctbTotalCollateral :: StrictMaybe Coin
ctbCerts :: OSet (TxCert ConwayEra)
ctbWithdrawals :: Withdrawals
ctbTxfee :: Coin
ctbVldt :: ValidityInterval
ctbReqSignerHashes :: Set (KeyHash 'Witness)
ctbMint :: MultiAsset
ctbScriptIntegrityHash :: StrictMaybe ScriptIntegrityHash
ctbAdHash :: StrictMaybe TxAuxDataHash
ctbTxNetworkId :: StrictMaybe Network
ctbVotingProcedures :: VotingProcedures ConwayEra
ctbProposalProcedures :: OSet (ProposalProcedure ConwayEra)
ctbCurrentTreasuryValue :: StrictMaybe Coin
ctbTreasuryDonation :: Coin
..} [Script (ShelleyLedgerEra Era)]
scripts TxBodyScriptData Era
scriptData Maybe (TxAuxData (ShelleyLedgerEra Era))
auxData TxScriptValidity Era
validity) [KeyWitness Era]
wits = Tx Era
tx
txIn :: TxIn
txIn = UTxO Era -> TxIn
mkNewTxIn UTxO Era
utxos
input :: TxIn
input = TxIn -> TxIn
toShelleyTxIn TxIn
txIn
refInputs :: Set TxIn
refInputs = TxIn -> Set TxIn -> Set TxIn
forall a. Ord a => a -> Set a -> Set a
Set.insert TxIn
input Set TxIn
ctbReferenceInputs
txOut :: TxOut CtxUTxO Era
txOut = AddressAny
-> Value -> Datum -> ReferenceScript Era -> TxOut CtxUTxO Era
makeTxOut AddressAny
addr Value
value Datum
forall ctx era. TxOutDatum ctx era
TxOutDatumNone ReferenceScript Era
rscript
utxos' :: UTxO Era
utxos' = Map TxIn (TxOut CtxUTxO Era) -> UTxO Era
forall era. Map TxIn (TxOut CtxUTxO era) -> UTxO era
UTxO (Map TxIn (TxOut CtxUTxO Era) -> UTxO Era)
-> (UTxO Era -> Map TxIn (TxOut CtxUTxO Era))
-> UTxO Era
-> UTxO Era
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TxIn
-> TxOut CtxUTxO Era
-> Map TxIn (TxOut CtxUTxO Era)
-> Map TxIn (TxOut CtxUTxO Era)
forall k a. Ord k => k -> a -> Map k a -> Map k a
Map.insert TxIn
txIn TxOut CtxUTxO Era
txOut (Map TxIn (TxOut CtxUTxO Era) -> Map TxIn (TxOut CtxUTxO Era))
-> (UTxO Era -> Map TxIn (TxOut CtxUTxO Era))
-> UTxO Era
-> Map TxIn (TxOut CtxUTxO Era)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UTxO Era -> Map TxIn (TxOut CtxUTxO Era)
forall era. UTxO era -> Map TxIn (TxOut CtxUTxO era)
unUTxO (UTxO Era -> UTxO Era) -> UTxO Era -> UTxO Era
forall a b. (a -> b) -> a -> b
$ UTxO Era
utxos
scriptInEra :: ScriptInEra Era
scriptInEra =
ScriptLanguageInEra SimpleScript' Era
-> Script SimpleScript' -> ScriptInEra Era
forall lang era.
ScriptLanguageInEra lang era -> Script lang -> ScriptInEra era
ScriptInEra
ScriptLanguageInEra SimpleScript' Era
SimpleScriptInConway
(SimpleScript -> Script SimpleScript'
SimpleScript SimpleScript
script)
newScript :: Script (ShelleyLedgerEra Era)
newScript = forall era. ScriptInEra era -> Script (ShelleyLedgerEra era)
toShelleyScript @Era ScriptInEra Era
scriptInEra
scripts' :: [AlonzoScript ConwayEra]
scripts' = [Script (ShelleyLedgerEra Era)]
[AlonzoScript ConwayEra]
scripts [AlonzoScript ConwayEra]
-> [AlonzoScript ConwayEra] -> [AlonzoScript ConwayEra]
forall a. [a] -> [a] -> [a]
++ [Script (ShelleyLedgerEra Era)
AlonzoScript ConwayEra
newScript]
addr :: AddressAny
addr = ScriptHash -> AddressAny
scriptAddressAny (ScriptHash -> AddressAny) -> ScriptHash -> AddressAny
forall a b. (a -> b) -> a -> b
$ Script SimpleScript' -> ScriptHash
forall lang. Script lang -> ScriptHash
hashScript (SimpleScript -> Script SimpleScript'
SimpleScript SimpleScript
script)
applyTxMod Tx Era
tx UTxO Era
utxos (ChangeOutput TxIx
ix Maybe AddressAny
maddr Maybe Value
mvalue Maybe Datum
mdatum Maybe (ReferenceScript Era)
mrscript) =
(TxBody Era -> [KeyWitness Era] -> Tx Era
forall era. TxBody era -> [KeyWitness era] -> Tx era
Tx (ShelleyBasedEra Era
-> TxBody (ShelleyLedgerEra Era)
-> [Script (ShelleyLedgerEra Era)]
-> TxBodyScriptData Era
-> Maybe (TxAuxData (ShelleyLedgerEra Era))
-> TxScriptValidity Era
-> TxBody Era
forall era.
ShelleyBasedEra era
-> TxBody (ShelleyLedgerEra era)
-> [Script (ShelleyLedgerEra era)]
-> TxBodyScriptData era
-> Maybe (TxAuxData (ShelleyLedgerEra era))
-> TxScriptValidity era
-> TxBody era
ShelleyTxBody ShelleyBasedEra Era
era TxBody (ShelleyLedgerEra Era)
body{Conway.ctbOutputs = outputs'} [Script (ShelleyLedgerEra Era)]
scripts TxBodyScriptData Era
scriptData' Maybe (TxAuxData (ShelleyLedgerEra Era))
auxData TxScriptValidity Era
validity) [KeyWitness Era]
wits, UTxO Era
utxos)
where
TxIx (Word -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral -> Int
idx) = TxIx
ix
Tx bdy :: TxBody Era
bdy@(ShelleyTxBody ShelleyBasedEra Era
era body :: TxBody (ShelleyLedgerEra Era)
body@Conway.ConwayTxBody{StrictMaybe ScriptIntegrityHash
StrictMaybe Coin
StrictMaybe Network
StrictMaybe TxAuxDataHash
StrictMaybe (Sized (TxOut ConwayEra))
VotingProcedures ConwayEra
Coin
MultiAsset
Set (KeyHash 'Witness)
Set TxIn
OSet (TxCert ConwayEra)
OSet (ProposalProcedure ConwayEra)
ValidityInterval
Withdrawals
StrictSeq (Sized (TxOut ConwayEra))
ctbVldt :: TxBody ConwayEra -> ValidityInterval
ctbAdHash :: TxBody ConwayEra -> StrictMaybe TxAuxDataHash
ctbCerts :: TxBody ConwayEra -> OSet (TxCert ConwayEra)
ctbCollateralInputs :: TxBody ConwayEra -> Set TxIn
ctbCollateralReturn :: TxBody ConwayEra -> StrictMaybe (Sized (TxOut ConwayEra))
ctbCurrentTreasuryValue :: TxBody ConwayEra -> StrictMaybe Coin
ctbMint :: TxBody ConwayEra -> MultiAsset
ctbOutputs :: TxBody ConwayEra -> StrictSeq (Sized (TxOut ConwayEra))
ctbProposalProcedures :: TxBody ConwayEra -> OSet (ProposalProcedure ConwayEra)
ctbReferenceInputs :: TxBody ConwayEra -> Set TxIn
ctbReqSignerHashes :: TxBody ConwayEra -> Set (KeyHash 'Witness)
ctbScriptIntegrityHash :: TxBody ConwayEra -> StrictMaybe ScriptIntegrityHash
ctbSpendInputs :: TxBody ConwayEra -> Set TxIn
ctbTotalCollateral :: TxBody ConwayEra -> StrictMaybe Coin
ctbTreasuryDonation :: TxBody ConwayEra -> Coin
ctbTxNetworkId :: TxBody ConwayEra -> StrictMaybe Network
ctbTxfee :: TxBody ConwayEra -> Coin
ctbVotingProcedures :: TxBody ConwayEra -> VotingProcedures ConwayEra
ctbWithdrawals :: TxBody ConwayEra -> Withdrawals
ctbSpendInputs :: Set TxIn
ctbCollateralInputs :: Set TxIn
ctbReferenceInputs :: Set TxIn
ctbOutputs :: StrictSeq (Sized (TxOut ConwayEra))
ctbCollateralReturn :: StrictMaybe (Sized (TxOut ConwayEra))
ctbTotalCollateral :: StrictMaybe Coin
ctbCerts :: OSet (TxCert ConwayEra)
ctbWithdrawals :: Withdrawals
ctbTxfee :: Coin
ctbVldt :: ValidityInterval
ctbReqSignerHashes :: Set (KeyHash 'Witness)
ctbMint :: MultiAsset
ctbScriptIntegrityHash :: StrictMaybe ScriptIntegrityHash
ctbAdHash :: StrictMaybe TxAuxDataHash
ctbTxNetworkId :: StrictMaybe Network
ctbVotingProcedures :: VotingProcedures ConwayEra
ctbProposalProcedures :: OSet (ProposalProcedure ConwayEra)
ctbCurrentTreasuryValue :: StrictMaybe Coin
ctbTreasuryDonation :: Coin
..} [Script (ShelleyLedgerEra Era)]
scripts TxBodyScriptData Era
scriptData Maybe (TxAuxData (ShelleyLedgerEra Era))
auxData TxScriptValidity Era
validity) [KeyWitness Era]
wits = Tx Era
tx
TxBodyContent{txOuts :: forall build era. TxBodyContent build era -> [TxOut CtxTx era]
txOuts = [TxOut CtxTx Era]
txOuts} = TxBody Era -> TxBodyContent ViewTx Era
forall era. TxBody era -> TxBodyContent ViewTx era
getTxBodyContent TxBody Era
bdy
TxOut (AddressInEra AddressTypeInEra addrtype Era
_ (Address addrtype -> AddressAny
forall addr. Address addr -> AddressAny
toAddressAny -> AddressAny
addr)) (TxOutValue Era -> Value
forall era. TxOutValue era -> Value
txOutValueToValue -> Value
value) Datum
datum ReferenceScript Era
rscript = [TxOut CtxTx Era]
txOuts [TxOut CtxTx Era] -> Int -> TxOut CtxTx Era
forall a. HasCallStack => [a] -> Int -> a
!! Int
idx
(StrictSeq (Sized (BabbageTxOut ConwayEra))
outputsStart, Sized (BabbageTxOut ConwayEra)
_ Seq.:<| StrictSeq (Sized (BabbageTxOut ConwayEra))
outputsEnd) = Int
-> StrictSeq (Sized (BabbageTxOut ConwayEra))
-> (StrictSeq (Sized (BabbageTxOut ConwayEra)),
StrictSeq (Sized (BabbageTxOut ConwayEra)))
forall a. Int -> StrictSeq a -> (StrictSeq a, StrictSeq a)
Seq.splitAt Int
idx StrictSeq (Sized (TxOut ConwayEra))
StrictSeq (Sized (BabbageTxOut ConwayEra))
ctbOutputs
outputs' :: StrictSeq (Sized (BabbageTxOut ConwayEra))
outputs' = StrictSeq (Sized (BabbageTxOut ConwayEra))
outputsStart StrictSeq (Sized (BabbageTxOut ConwayEra))
-> StrictSeq (Sized (BabbageTxOut ConwayEra))
-> StrictSeq (Sized (BabbageTxOut ConwayEra))
forall a. StrictSeq a -> StrictSeq a -> StrictSeq a
Seq.>< (Version -> BabbageTxOut ConwayEra -> Sized (BabbageTxOut ConwayEra)
forall a. EncCBOR a => Version -> a -> Sized a
CBOR.mkSized (forall era. Era era => Version
Ledger.eraProtVerLow @LedgerEra) TxOut ConwayEra
BabbageTxOut ConwayEra
out Sized (BabbageTxOut ConwayEra)
-> StrictSeq (Sized (BabbageTxOut ConwayEra))
-> StrictSeq (Sized (BabbageTxOut ConwayEra))
forall a. a -> StrictSeq a -> StrictSeq a
Seq.:<| StrictSeq (Sized (BabbageTxOut ConwayEra))
outputsEnd)
out :: TxOut ConwayEra
out =
ShelleyBasedEra Era -> TxOut CtxUTxO Era -> TxOut ConwayEra
forall era ledgerera.
(HasCallStack, ShelleyLedgerEra era ~ ledgerera) =>
ShelleyBasedEra era -> TxOut CtxUTxO era -> TxOut ledgerera
toShelleyTxOut ShelleyBasedEra Era
forall era. IsShelleyBasedEra era => ShelleyBasedEra era
shelleyBasedEra (TxOut CtxUTxO Era -> TxOut ConwayEra)
-> TxOut CtxUTxO Era -> TxOut ConwayEra
forall a b. (a -> b) -> a -> b
$
AddressAny
-> Value -> Datum -> ReferenceScript Era -> TxOut CtxUTxO Era
makeTxOut
(AddressAny -> Maybe AddressAny -> AddressAny
forall a. a -> Maybe a -> a
fromMaybe AddressAny
addr Maybe AddressAny
maddr)
(Value -> Maybe Value -> Value
forall a. a -> Maybe a -> a
fromMaybe Value
value Maybe Value
mvalue)
(Datum -> Maybe Datum -> Datum
forall a. a -> Maybe a -> a
fromMaybe Datum
datum Maybe Datum
mdatum)
(ReferenceScript Era
-> Maybe (ReferenceScript Era) -> ReferenceScript Era
forall a. a -> Maybe a -> a
fromMaybe ReferenceScript Era
rscript Maybe (ReferenceScript Era)
mrscript)
scriptData' :: TxBodyScriptData Era
scriptData' = case Maybe Datum
mdatum of
Maybe Datum
Nothing -> TxBodyScriptData Era
scriptData
Just Datum
d -> case Datum
d of
Datum
TxOutDatumNone -> TxBodyScriptData Era
scriptData
TxOutDatumHash{} -> TxBodyScriptData Era
scriptData
TxOutSupplementalDatum AlonzoEraOnwards Era
_ HashableScriptData
d' -> Data (ShelleyLedgerEra Era)
-> TxBodyScriptData Era -> TxBodyScriptData Era
addDatum (HashableScriptData -> Data ConwayEra
forall ledgerera.
Era ledgerera =>
HashableScriptData -> Data ledgerera
toAlonzoData HashableScriptData
d') TxBodyScriptData Era
scriptData
TxOutDatumInline{} -> TxBodyScriptData Era
scriptData
applyTxMod Tx Era
tx UTxO Era
utxos (ChangeInput TxIn
txIn Maybe AddressAny
maddr Maybe Value
mvalue Maybe Datum
mdatum Maybe (ReferenceScript Era)
mrscript) =
(TxBody Era -> [KeyWitness Era] -> Tx Era
forall era. TxBody era -> [KeyWitness era] -> Tx era
Tx (ShelleyBasedEra Era
-> TxBody (ShelleyLedgerEra Era)
-> [Script (ShelleyLedgerEra Era)]
-> TxBodyScriptData Era
-> Maybe (TxAuxData (ShelleyLedgerEra Era))
-> TxScriptValidity Era
-> TxBody Era
forall era.
ShelleyBasedEra era
-> TxBody (ShelleyLedgerEra era)
-> [Script (ShelleyLedgerEra era)]
-> TxBodyScriptData era
-> Maybe (TxAuxData (ShelleyLedgerEra era))
-> TxScriptValidity era
-> TxBody era
ShelleyTxBody ShelleyBasedEra Era
era TxBody (ShelleyLedgerEra Era)
body [Script (ShelleyLedgerEra Era)]
scripts TxBodyScriptData Era
scriptData' Maybe (TxAuxData (ShelleyLedgerEra Era))
auxData TxScriptValidity Era
validity) [KeyWitness Era]
wits, UTxO Era
utxos')
where
Tx (ShelleyTxBody ShelleyBasedEra Era
era TxBody (ShelleyLedgerEra Era)
body [Script (ShelleyLedgerEra Era)]
scripts TxBodyScriptData Era
scriptData Maybe (TxAuxData (ShelleyLedgerEra Era))
auxData TxScriptValidity Era
validity) [KeyWitness Era]
wits = Tx Era
tx
(AddressAny
addr, Value
value, TxOutDatum CtxUTxO Era
utxoDatum, ReferenceScript Era
rscript) = case TxIn -> Map TxIn (TxOut CtxUTxO Era) -> Maybe (TxOut CtxUTxO Era)
forall k a. Ord k => k -> Map k a -> Maybe a
Map.lookup TxIn
txIn (Map TxIn (TxOut CtxUTxO Era) -> Maybe (TxOut CtxUTxO Era))
-> Map TxIn (TxOut CtxUTxO Era) -> Maybe (TxOut CtxUTxO Era)
forall a b. (a -> b) -> a -> b
$ UTxO Era -> Map TxIn (TxOut CtxUTxO Era)
forall era. UTxO era -> Map TxIn (TxOut CtxUTxO era)
unUTxO UTxO Era
utxos of
Just (TxOut (AddressInEra AddressTypeInEra addrtype Era
_ (Address addrtype -> AddressAny
forall addr. Address addr -> AddressAny
toAddressAny -> AddressAny
addr')) (TxOutValue Era -> Value
forall era. TxOutValue era -> Value
txOutValueToValue -> Value
value') TxOutDatum CtxUTxO Era
datum ReferenceScript Era
rscript') ->
(AddressAny
addr', Value
value', TxOutDatum CtxUTxO Era
datum, ReferenceScript Era
rscript')
Maybe (TxOut CtxUTxO Era)
Nothing -> [Char]
-> (AddressAny, Value, TxOutDatum CtxUTxO Era, ReferenceScript Era)
forall a. HasCallStack => [Char] -> a
error ([Char]
-> (AddressAny, Value, TxOutDatum CtxUTxO Era,
ReferenceScript Era))
-> [Char]
-> (AddressAny, Value, TxOutDatum CtxUTxO Era, ReferenceScript Era)
forall a b. (a -> b) -> a -> b
$ [Char]
"Index " [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ TxIn -> [Char]
forall a. Show a => a -> [Char]
show TxIn
txIn [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
" doesn't exist."
txOut :: TxOut CtxUTxO Era
txOut =
AddressInEra Era
-> TxOutValue Era
-> TxOutDatum CtxUTxO Era
-> ReferenceScript Era
-> TxOut CtxUTxO Era
forall ctx era.
AddressInEra era
-> TxOutValue era
-> TxOutDatum ctx era
-> ReferenceScript era
-> TxOut ctx era
TxOut
(ShelleyBasedEra Era -> AddressAny -> AddressInEra Era
forall era. ShelleyBasedEra era -> AddressAny -> AddressInEra era
anyAddressInShelleyBasedEra ShelleyBasedEra Era
forall era. IsShelleyBasedEra era => ShelleyBasedEra era
shelleyBasedEra (AddressAny -> Maybe AddressAny -> AddressAny
forall a. a -> Maybe a -> a
fromMaybe AddressAny
addr Maybe AddressAny
maddr))
(ShelleyBasedEra Era
-> Value (ShelleyLedgerEra Era) -> TxOutValue Era
forall era.
(Eq (Value (ShelleyLedgerEra era)),
Show (Value (ShelleyLedgerEra era))) =>
ShelleyBasedEra era
-> Value (ShelleyLedgerEra era) -> TxOutValue era
TxOutValueShelleyBased ShelleyBasedEra Era
forall era. IsShelleyBasedEra era => ShelleyBasedEra era
shelleyBasedEra (Value (ShelleyLedgerEra Era) -> TxOutValue Era)
-> Value (ShelleyLedgerEra Era) -> TxOutValue Era
forall a b. (a -> b) -> a -> b
$ Value -> MaryValue
toMaryValue (Value -> MaryValue) -> Value -> MaryValue
forall a b. (a -> b) -> a -> b
$ Value -> Maybe Value -> Value
forall a. a -> Maybe a -> a
fromMaybe Value
value Maybe Value
mvalue)
(TxOutDatum CtxUTxO Era
-> (Datum -> TxOutDatum CtxUTxO Era)
-> Maybe Datum
-> TxOutDatum CtxUTxO Era
forall b a. b -> (a -> b) -> Maybe a -> b
maybe TxOutDatum CtxUTxO Era
utxoDatum Datum -> TxOutDatum CtxUTxO Era
toCtxUTxODatum Maybe Datum
mdatum)
(ReferenceScript Era
-> Maybe (ReferenceScript Era) -> ReferenceScript Era
forall a. a -> Maybe a -> a
fromMaybe ReferenceScript Era
rscript Maybe (ReferenceScript Era)
mrscript)
utxos' :: UTxO Era
utxos' = Map TxIn (TxOut CtxUTxO Era) -> UTxO Era
forall era. Map TxIn (TxOut CtxUTxO era) -> UTxO era
UTxO (Map TxIn (TxOut CtxUTxO Era) -> UTxO Era)
-> (UTxO Era -> Map TxIn (TxOut CtxUTxO Era))
-> UTxO Era
-> UTxO Era
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TxIn
-> TxOut CtxUTxO Era
-> Map TxIn (TxOut CtxUTxO Era)
-> Map TxIn (TxOut CtxUTxO Era)
forall k a. Ord k => k -> a -> Map k a -> Map k a
Map.insert TxIn
txIn TxOut CtxUTxO Era
txOut (Map TxIn (TxOut CtxUTxO Era) -> Map TxIn (TxOut CtxUTxO Era))
-> (UTxO Era -> Map TxIn (TxOut CtxUTxO Era))
-> UTxO Era
-> Map TxIn (TxOut CtxUTxO Era)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UTxO Era -> Map TxIn (TxOut CtxUTxO Era)
forall era. UTxO era -> Map TxIn (TxOut CtxUTxO era)
unUTxO (UTxO Era -> UTxO Era) -> UTxO Era -> UTxO Era
forall a b. (a -> b) -> a -> b
$ UTxO Era
utxos
scriptData' :: TxBodyScriptData Era
scriptData' = case Maybe Datum
mdatum of
Maybe Datum
Nothing -> TxBodyScriptData Era
scriptData
Just Datum
TxOutDatumNone -> TxBodyScriptData Era
scriptData
Just TxOutDatumHash{} -> TxBodyScriptData Era
scriptData
Just (TxOutSupplementalDatum AlonzoEraOnwards Era
_ HashableScriptData
d) -> Data (ShelleyLedgerEra Era)
-> TxBodyScriptData Era -> TxBodyScriptData Era
addDatum (HashableScriptData -> Data ConwayEra
forall ledgerera.
Era ledgerera =>
HashableScriptData -> Data ledgerera
toAlonzoData HashableScriptData
d) TxBodyScriptData Era
scriptData
Just TxOutDatumInline{} -> TxBodyScriptData Era
scriptData
applyTxMod Tx Era
tx UTxO Era
utxos (ChangeScriptInput TxIn
txIn Maybe Value
mvalue Maybe Datum
mdatum Maybe Redeemer
mredeemer Maybe (ReferenceScript Era)
mrscript) =
(TxBody Era -> [KeyWitness Era] -> Tx Era
forall era. TxBody era -> [KeyWitness era] -> Tx era
Tx (ShelleyBasedEra Era
-> TxBody (ShelleyLedgerEra Era)
-> [Script (ShelleyLedgerEra Era)]
-> TxBodyScriptData Era
-> Maybe (TxAuxData (ShelleyLedgerEra Era))
-> TxScriptValidity Era
-> TxBody Era
forall era.
ShelleyBasedEra era
-> TxBody (ShelleyLedgerEra era)
-> [Script (ShelleyLedgerEra era)]
-> TxBodyScriptData era
-> Maybe (TxAuxData (ShelleyLedgerEra era))
-> TxScriptValidity era
-> TxBody era
ShelleyTxBody ShelleyBasedEra Era
era TxBody (ShelleyLedgerEra Era)
body [Script (ShelleyLedgerEra Era)]
scripts TxBodyScriptData Era
scriptData' Maybe (TxAuxData (ShelleyLedgerEra Era))
auxData TxScriptValidity Era
validity) [KeyWitness Era]
wits, UTxO Era
utxos')
where
Tx (ShelleyTxBody ShelleyBasedEra Era
era body :: TxBody (ShelleyLedgerEra Era)
body@Conway.ConwayTxBody{StrictMaybe ScriptIntegrityHash
StrictMaybe Coin
StrictMaybe Network
StrictMaybe TxAuxDataHash
StrictMaybe (Sized (TxOut ConwayEra))
VotingProcedures ConwayEra
Coin
MultiAsset
Set (KeyHash 'Witness)
Set TxIn
OSet (TxCert ConwayEra)
OSet (ProposalProcedure ConwayEra)
ValidityInterval
Withdrawals
StrictSeq (Sized (TxOut ConwayEra))
ctbVldt :: TxBody ConwayEra -> ValidityInterval
ctbAdHash :: TxBody ConwayEra -> StrictMaybe TxAuxDataHash
ctbCerts :: TxBody ConwayEra -> OSet (TxCert ConwayEra)
ctbCollateralInputs :: TxBody ConwayEra -> Set TxIn
ctbCollateralReturn :: TxBody ConwayEra -> StrictMaybe (Sized (TxOut ConwayEra))
ctbCurrentTreasuryValue :: TxBody ConwayEra -> StrictMaybe Coin
ctbMint :: TxBody ConwayEra -> MultiAsset
ctbOutputs :: TxBody ConwayEra -> StrictSeq (Sized (TxOut ConwayEra))
ctbProposalProcedures :: TxBody ConwayEra -> OSet (ProposalProcedure ConwayEra)
ctbReferenceInputs :: TxBody ConwayEra -> Set TxIn
ctbReqSignerHashes :: TxBody ConwayEra -> Set (KeyHash 'Witness)
ctbScriptIntegrityHash :: TxBody ConwayEra -> StrictMaybe ScriptIntegrityHash
ctbSpendInputs :: TxBody ConwayEra -> Set TxIn
ctbTotalCollateral :: TxBody ConwayEra -> StrictMaybe Coin
ctbTreasuryDonation :: TxBody ConwayEra -> Coin
ctbTxNetworkId :: TxBody ConwayEra -> StrictMaybe Network
ctbTxfee :: TxBody ConwayEra -> Coin
ctbVotingProcedures :: TxBody ConwayEra -> VotingProcedures ConwayEra
ctbWithdrawals :: TxBody ConwayEra -> Withdrawals
ctbSpendInputs :: Set TxIn
ctbCollateralInputs :: Set TxIn
ctbReferenceInputs :: Set TxIn
ctbOutputs :: StrictSeq (Sized (TxOut ConwayEra))
ctbCollateralReturn :: StrictMaybe (Sized (TxOut ConwayEra))
ctbTotalCollateral :: StrictMaybe Coin
ctbCerts :: OSet (TxCert ConwayEra)
ctbWithdrawals :: Withdrawals
ctbTxfee :: Coin
ctbVldt :: ValidityInterval
ctbReqSignerHashes :: Set (KeyHash 'Witness)
ctbMint :: MultiAsset
ctbScriptIntegrityHash :: StrictMaybe ScriptIntegrityHash
ctbAdHash :: StrictMaybe TxAuxDataHash
ctbTxNetworkId :: StrictMaybe Network
ctbVotingProcedures :: VotingProcedures ConwayEra
ctbProposalProcedures :: OSet (ProposalProcedure ConwayEra)
ctbCurrentTreasuryValue :: StrictMaybe Coin
ctbTreasuryDonation :: Coin
..} [Script (ShelleyLedgerEra Era)]
scripts TxBodyScriptData Era
scriptData Maybe (TxAuxData (ShelleyLedgerEra Era))
auxData TxScriptValidity Era
validity) [KeyWitness Era]
wits = Tx Era
tx
(AddressInEra Era
addr, Value
value, TxOutDatum CtxUTxO Era
utxoDatum, ReferenceScript Era
rscript) = case TxIn -> Map TxIn (TxOut CtxUTxO Era) -> Maybe (TxOut CtxUTxO Era)
forall k a. Ord k => k -> Map k a -> Maybe a
Map.lookup TxIn
txIn (Map TxIn (TxOut CtxUTxO Era) -> Maybe (TxOut CtxUTxO Era))
-> Map TxIn (TxOut CtxUTxO Era) -> Maybe (TxOut CtxUTxO Era)
forall a b. (a -> b) -> a -> b
$ UTxO Era -> Map TxIn (TxOut CtxUTxO Era)
forall era. UTxO era -> Map TxIn (TxOut CtxUTxO era)
unUTxO UTxO Era
utxos of
Just (TxOut AddressInEra Era
addr' (TxOutValue Era -> Value
forall era. TxOutValue era -> Value
txOutValueToValue -> Value
value') TxOutDatum CtxUTxO Era
utxoDatum' ReferenceScript Era
rscript') ->
(AddressInEra Era
addr', Value
value', TxOutDatum CtxUTxO Era
utxoDatum', ReferenceScript Era
rscript')
Maybe (TxOut CtxUTxO Era)
Nothing -> [Char]
-> (AddressInEra Era, Value, TxOutDatum CtxUTxO Era,
ReferenceScript Era)
forall a. HasCallStack => [Char] -> a
error ([Char]
-> (AddressInEra Era, Value, TxOutDatum CtxUTxO Era,
ReferenceScript Era))
-> [Char]
-> (AddressInEra Era, Value, TxOutDatum CtxUTxO Era,
ReferenceScript Era)
forall a b. (a -> b) -> a -> b
$ [Char]
"The index " [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ TxIn -> [Char]
forall a. Show a => a -> [Char]
show TxIn
txIn [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
" doesn't exist."
(Data ConwayEra
datum, (Data ConwayEra
redeemer, ExUnits
exunits)) = case TxBodyScriptData Era
scriptData of
TxBodyScriptData Era
TxBodyNoScriptData -> [Char] -> (Data ConwayEra, (Data ConwayEra, ExUnits))
forall a. HasCallStack => [Char] -> a
error [Char]
"No script data available"
TxBodyScriptData AlonzoEraOnwards Era
_ (Ledger.TxDats Map DataHash (Data ConwayEra)
dats) (Ledger.Redeemers Map (PlutusPurpose AsIx ConwayEra) (Data ConwayEra, ExUnits)
rdmrs) ->
( case DataHash -> Map DataHash (Data ConwayEra) -> Maybe (Data ConwayEra)
forall k a. Ord k => k -> Map k a -> Maybe a
Map.lookup DataHash
utxoDatumHash Map DataHash (Data ConwayEra)
dats of
Just Data ConwayEra
d -> Data ConwayEra
d
Maybe (Data ConwayEra)
Nothing -> case TxOutDatum CtxUTxO Era
utxoDatum of
TxOutDatumInline BabbageEraOnwards Era
_ HashableScriptData
d -> HashableScriptData -> Data ConwayEra
forall ledgerera.
Era ledgerera =>
HashableScriptData -> Data ledgerera
toAlonzoData HashableScriptData
d
TxOutDatum CtxUTxO Era
_ -> [Char] -> Data ConwayEra
forall a. HasCallStack => [Char] -> a
error ([Char] -> Data ConwayEra) -> [Char] -> Data ConwayEra
forall a b. (a -> b) -> a -> b
$ [Char]
"Datum hash " [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ DataHash -> [Char]
forall a. Show a => a -> [Char]
show DataHash
utxoDatumHash [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
" not found in transaction datum map"
, (Data ConwayEra, ExUnits)
-> Maybe (Data ConwayEra, ExUnits) -> (Data ConwayEra, ExUnits)
forall a. a -> Maybe a -> a
fromMaybe ([Char] -> (Data ConwayEra, ExUnits)
forall a. HasCallStack => [Char] -> a
error ([Char] -> (Data ConwayEra, ExUnits))
-> [Char] -> (Data ConwayEra, ExUnits)
forall a b. (a -> b) -> a -> b
$ [Char]
"Redeemer for spending input at index " [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ Word32 -> [Char]
forall a. Show a => a -> [Char]
show Word32
idx [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
" not found in transaction redeemers") (Maybe (Data ConwayEra, ExUnits) -> (Data ConwayEra, ExUnits))
-> Maybe (Data ConwayEra, ExUnits) -> (Data ConwayEra, ExUnits)
forall a b. (a -> b) -> a -> b
$ ConwayPlutusPurpose AsIx ConwayEra
-> Map
(ConwayPlutusPurpose AsIx ConwayEra) (Data ConwayEra, ExUnits)
-> Maybe (Data ConwayEra, ExUnits)
forall k a. Ord k => k -> Map k a -> Maybe a
Map.lookup (AsIx Word32 TxIn -> ConwayPlutusPurpose AsIx ConwayEra
forall (f :: * -> * -> *) era.
f Word32 TxIn -> ConwayPlutusPurpose f era
Conway.ConwaySpending (Word32 -> AsIx Word32 TxIn
forall ix it. ix -> AsIx ix it
Ledger.AsIx Word32
idx)) Map (PlutusPurpose AsIx ConwayEra) (Data ConwayEra, ExUnits)
Map (ConwayPlutusPurpose AsIx ConwayEra) (Data ConwayEra, ExUnits)
rdmrs
)
utxoDatumHash :: DataHash
utxoDatumHash = case TxOutDatum CtxUTxO Era
utxoDatum of
TxOutDatum CtxUTxO Era
TxOutDatumNone -> [Char] -> DataHash
forall a. HasCallStack => [Char] -> a
error [Char]
"No existing datum"
TxOutDatumInline BabbageEraOnwards Era
_ HashableScriptData
d -> Hash Redeemer -> DataHash
forall a b. Coercible a b => a -> b
coerce (Hash Redeemer -> DataHash) -> Hash Redeemer -> DataHash
forall a b. (a -> b) -> a -> b
$ HashableScriptData -> Hash Redeemer
hashScriptDataBytes HashableScriptData
d
TxOutDatumHash AlonzoEraOnwards Era
_ Hash Redeemer
h -> Hash Redeemer -> DataHash
forall a b. Coercible a b => a -> b
coerce Hash Redeemer
h
adatum :: Data ConwayEra
adatum = case Maybe Datum
mdatum of
Just Datum
TxOutDatumNone -> [Char] -> Data ConwayEra
forall a. HasCallStack => [Char] -> a
error [Char]
"Bad test!"
Just TxOutDatumHash{} -> [Char] -> Data ConwayEra
forall a. HasCallStack => [Char] -> a
error [Char]
"Bad test!"
Just (TxOutSupplementalDatum AlonzoEraOnwards Era
_ HashableScriptData
d) -> HashableScriptData -> Data ConwayEra
forall ledgerera.
Era ledgerera =>
HashableScriptData -> Data ledgerera
toAlonzoData HashableScriptData
d
Just (TxOutDatumInline BabbageEraOnwards Era
_ HashableScriptData
d) -> HashableScriptData -> Data ConwayEra
forall ledgerera.
Era ledgerera =>
HashableScriptData -> Data ledgerera
toAlonzoData HashableScriptData
d
Maybe Datum
Nothing -> Data ConwayEra
datum
txOut :: TxOut CtxUTxO Era
txOut =
AddressInEra Era
-> TxOutValue Era
-> TxOutDatum CtxUTxO Era
-> ReferenceScript Era
-> TxOut CtxUTxO Era
forall ctx era.
AddressInEra era
-> TxOutValue era
-> TxOutDatum ctx era
-> ReferenceScript era
-> TxOut ctx era
TxOut
AddressInEra Era
addr
(ShelleyBasedEra Era
-> Value (ShelleyLedgerEra Era) -> TxOutValue Era
forall era.
(Eq (Value (ShelleyLedgerEra era)),
Show (Value (ShelleyLedgerEra era))) =>
ShelleyBasedEra era
-> Value (ShelleyLedgerEra era) -> TxOutValue era
TxOutValueShelleyBased ShelleyBasedEra Era
forall era. IsShelleyBasedEra era => ShelleyBasedEra era
shelleyBasedEra (Value (ShelleyLedgerEra Era) -> TxOutValue Era)
-> Value (ShelleyLedgerEra Era) -> TxOutValue Era
forall a b. (a -> b) -> a -> b
$ Value -> MaryValue
toMaryValue (Value -> MaryValue) -> Value -> MaryValue
forall a b. (a -> b) -> a -> b
$ Value -> Maybe Value -> Value
forall a. a -> Maybe a -> a
fromMaybe Value
value Maybe Value
mvalue)
(TxOutDatum CtxUTxO Era
-> (Datum -> TxOutDatum CtxUTxO Era)
-> Maybe Datum
-> TxOutDatum CtxUTxO Era
forall b a. b -> (a -> b) -> Maybe a -> b
maybe TxOutDatum CtxUTxO Era
utxoDatum Datum -> TxOutDatum CtxUTxO Era
toCtxUTxODatum Maybe Datum
mdatum)
(ReferenceScript Era
-> Maybe (ReferenceScript Era) -> ReferenceScript Era
forall a. a -> Maybe a -> a
fromMaybe ReferenceScript Era
rscript Maybe (ReferenceScript Era)
mrscript)
utxos' :: UTxO Era
utxos' = Map TxIn (TxOut CtxUTxO Era) -> UTxO Era
forall era. Map TxIn (TxOut CtxUTxO era) -> UTxO era
UTxO (Map TxIn (TxOut CtxUTxO Era) -> UTxO Era)
-> (UTxO Era -> Map TxIn (TxOut CtxUTxO Era))
-> UTxO Era
-> UTxO Era
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TxIn
-> TxOut CtxUTxO Era
-> Map TxIn (TxOut CtxUTxO Era)
-> Map TxIn (TxOut CtxUTxO Era)
forall k a. Ord k => k -> a -> Map k a -> Map k a
Map.insert TxIn
txIn TxOut CtxUTxO Era
txOut (Map TxIn (TxOut CtxUTxO Era) -> Map TxIn (TxOut CtxUTxO Era))
-> (UTxO Era -> Map TxIn (TxOut CtxUTxO Era))
-> UTxO Era
-> Map TxIn (TxOut CtxUTxO Era)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UTxO Era -> Map TxIn (TxOut CtxUTxO Era)
forall era. UTxO era -> Map TxIn (TxOut CtxUTxO era)
unUTxO (UTxO Era -> UTxO Era) -> UTxO Era -> UTxO Era
forall a b. (a -> b) -> a -> b
$ UTxO Era
utxos
idx :: Word32
idx = case AsItem Word32 TxIn -> Set TxIn -> StrictMaybe (AsIx Word32 TxIn)
forall elem container.
Indexable elem container =>
AsItem Word32 elem -> container -> StrictMaybe (AsIx Word32 elem)
Ledger.indexOf (TxIn -> AsItem Word32 TxIn
forall ix it. it -> AsItem ix it
Ledger.AsItem (TxIn -> TxIn
toShelleyTxIn TxIn
txIn)) Set TxIn
ctbSpendInputs of
SJust (Ledger.AsIx Word32
idx') -> Word32
idx'
StrictMaybe (AsIx Word32 TxIn)
_ -> [Char] -> Word32
forall a. HasCallStack => [Char] -> a
error [Char]
"The impossible happened!"
scriptData' :: TxBodyScriptData Era
scriptData' =
let newRdmr :: (Data ConwayEra, ExUnits)
newRdmr = (Data ConwayEra
-> (Redeemer -> Data ConwayEra) -> Maybe Redeemer -> Data ConwayEra
forall b a. b -> (a -> b) -> Maybe a -> b
maybe Data ConwayEra
redeemer (HashableScriptData -> Data ConwayEra
forall ledgerera.
Era ledgerera =>
HashableScriptData -> Data ledgerera
toAlonzoData (HashableScriptData -> Data ConwayEra)
-> (Redeemer -> HashableScriptData) -> Redeemer -> Data ConwayEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Redeemer -> HashableScriptData
unsafeHashableScriptData) Maybe Redeemer
mredeemer, ExUnits
exunits)
isInlineDatum :: Bool
isInlineDatum = case TxOutDatum CtxUTxO Era
utxoDatum of
TxOutDatumInline{} -> Bool
True
TxOutDatum CtxUTxO Era
_ -> Bool
False
in
if Bool
isInlineDatum Bool -> Bool -> Bool
&& Maybe Datum -> Bool
forall a. Maybe a -> Bool
isNothing Maybe Datum
mdatum
then Word32
-> (Data (ShelleyLedgerEra Era), ExUnits)
-> TxBodyScriptData Era
-> TxBodyScriptData Era
updateRedeemer Word32
idx (Data (ShelleyLedgerEra Era), ExUnits)
(Data ConwayEra, ExUnits)
newRdmr TxBodyScriptData Era
scriptData
else Word32
-> Data (ShelleyLedgerEra Era)
-> (Data (ShelleyLedgerEra Era), ExUnits)
-> TxBodyScriptData Era
-> TxBodyScriptData Era
addScriptData Word32
idx Data (ShelleyLedgerEra Era)
Data ConwayEra
adatum (Data (ShelleyLedgerEra Era), ExUnits)
(Data ConwayEra, ExUnits)
newRdmr TxBodyScriptData Era
scriptData
applyTxMod Tx Era
tx UTxO Era
utxos (AddPlutusScriptMint PlutusScript lang
script AssetName
assetName Quantity
quantity Redeemer
redeemer) =
( TxBody Era -> [KeyWitness Era] -> Tx Era
forall era. TxBody era -> [KeyWitness era] -> Tx era
Tx (ShelleyBasedEra Era
-> TxBody (ShelleyLedgerEra Era)
-> [Script (ShelleyLedgerEra Era)]
-> TxBodyScriptData Era
-> Maybe (TxAuxData (ShelleyLedgerEra Era))
-> TxScriptValidity Era
-> TxBody Era
forall era.
ShelleyBasedEra era
-> TxBody (ShelleyLedgerEra era)
-> [Script (ShelleyLedgerEra era)]
-> TxBodyScriptData era
-> Maybe (TxAuxData (ShelleyLedgerEra era))
-> TxScriptValidity era
-> TxBody era
ShelleyTxBody ShelleyBasedEra Era
era TxBody (ShelleyLedgerEra Era)
body{Conway.ctbMint = mint'} [Script (ShelleyLedgerEra Era)]
[AlonzoScript ConwayEra]
scripts' TxBodyScriptData Era
scriptData' Maybe (TxAuxData (ShelleyLedgerEra Era))
auxData TxScriptValidity Era
validity) [KeyWitness Era]
wits
, UTxO Era
utxos
)
where
Tx (ShelleyTxBody ShelleyBasedEra Era
era body :: TxBody (ShelleyLedgerEra Era)
body@Conway.ConwayTxBody{StrictMaybe ScriptIntegrityHash
StrictMaybe Coin
StrictMaybe Network
StrictMaybe TxAuxDataHash
StrictMaybe (Sized (TxOut ConwayEra))
VotingProcedures ConwayEra
Coin
MultiAsset
Set (KeyHash 'Witness)
Set TxIn
OSet (TxCert ConwayEra)
OSet (ProposalProcedure ConwayEra)
ValidityInterval
Withdrawals
StrictSeq (Sized (TxOut ConwayEra))
ctbVldt :: TxBody ConwayEra -> ValidityInterval
ctbAdHash :: TxBody ConwayEra -> StrictMaybe TxAuxDataHash
ctbCerts :: TxBody ConwayEra -> OSet (TxCert ConwayEra)
ctbCollateralInputs :: TxBody ConwayEra -> Set TxIn
ctbCollateralReturn :: TxBody ConwayEra -> StrictMaybe (Sized (TxOut ConwayEra))
ctbCurrentTreasuryValue :: TxBody ConwayEra -> StrictMaybe Coin
ctbMint :: TxBody ConwayEra -> MultiAsset
ctbOutputs :: TxBody ConwayEra -> StrictSeq (Sized (TxOut ConwayEra))
ctbProposalProcedures :: TxBody ConwayEra -> OSet (ProposalProcedure ConwayEra)
ctbReferenceInputs :: TxBody ConwayEra -> Set TxIn
ctbReqSignerHashes :: TxBody ConwayEra -> Set (KeyHash 'Witness)
ctbScriptIntegrityHash :: TxBody ConwayEra -> StrictMaybe ScriptIntegrityHash
ctbSpendInputs :: TxBody ConwayEra -> Set TxIn
ctbTotalCollateral :: TxBody ConwayEra -> StrictMaybe Coin
ctbTreasuryDonation :: TxBody ConwayEra -> Coin
ctbTxNetworkId :: TxBody ConwayEra -> StrictMaybe Network
ctbTxfee :: TxBody ConwayEra -> Coin
ctbVotingProcedures :: TxBody ConwayEra -> VotingProcedures ConwayEra
ctbWithdrawals :: TxBody ConwayEra -> Withdrawals
ctbSpendInputs :: Set TxIn
ctbCollateralInputs :: Set TxIn
ctbReferenceInputs :: Set TxIn
ctbOutputs :: StrictSeq (Sized (TxOut ConwayEra))
ctbCollateralReturn :: StrictMaybe (Sized (TxOut ConwayEra))
ctbTotalCollateral :: StrictMaybe Coin
ctbCerts :: OSet (TxCert ConwayEra)
ctbWithdrawals :: Withdrawals
ctbTxfee :: Coin
ctbVldt :: ValidityInterval
ctbReqSignerHashes :: Set (KeyHash 'Witness)
ctbMint :: MultiAsset
ctbScriptIntegrityHash :: StrictMaybe ScriptIntegrityHash
ctbAdHash :: StrictMaybe TxAuxDataHash
ctbTxNetworkId :: StrictMaybe Network
ctbVotingProcedures :: VotingProcedures ConwayEra
ctbProposalProcedures :: OSet (ProposalProcedure ConwayEra)
ctbCurrentTreasuryValue :: StrictMaybe Coin
ctbTreasuryDonation :: Coin
..} [Script (ShelleyLedgerEra Era)]
scripts TxBodyScriptData Era
scriptData Maybe (TxAuxData (ShelleyLedgerEra Era))
auxData TxScriptValidity Era
validity) [KeyWitness Era]
wits = Tx Era
tx
scriptHash :: ScriptHash
scriptHash = Script lang -> ScriptHash
forall lang. Script lang -> ScriptHash
hashScript (Script lang -> ScriptHash) -> Script lang -> ScriptHash
forall a b. (a -> b) -> a -> b
$ PlutusScriptVersion lang -> PlutusScript lang -> Script lang
forall lang.
IsPlutusScriptLanguage lang =>
PlutusScriptVersion lang -> PlutusScript lang -> Script lang
PlutusScript PlutusScriptVersion lang
forall lang.
IsPlutusScriptLanguage lang =>
PlutusScriptVersion lang
plutusScriptVersion PlutusScript lang
script
ledgerPolicyId :: PolicyID
ledgerPolicyId = ScriptHash -> PolicyID
Mary.PolicyID (ScriptHash -> ScriptHash
toShelleyScriptHash ScriptHash
scriptHash)
ledgerAssetName :: AssetName
ledgerAssetName = AssetName -> AssetName
toMaryAssetName AssetName
assetName
Quantity Integer
qty = Quantity
quantity
newMintAsset :: MultiAsset
newMintAsset = Map PolicyID (Map AssetName Integer) -> MultiAsset
Mary.MultiAsset (Map PolicyID (Map AssetName Integer) -> MultiAsset)
-> Map PolicyID (Map AssetName Integer) -> MultiAsset
forall a b. (a -> b) -> a -> b
$ PolicyID
-> Map AssetName Integer -> Map PolicyID (Map AssetName Integer)
forall k a. k -> a -> Map k a
Map.singleton PolicyID
ledgerPolicyId (AssetName -> Integer -> Map AssetName Integer
forall k a. k -> a -> Map k a
Map.singleton AssetName
ledgerAssetName Integer
qty)
mint' :: MultiAsset
mint' = MultiAsset
ctbMint MultiAsset -> MultiAsset -> MultiAsset
forall a. Semigroup a => a -> a -> a
<> MultiAsset
newMintAsset
Mary.MultiAsset Map PolicyID (Map AssetName Integer)
mintMap = MultiAsset
mint'
mintIdx :: Word32
mintIdx = case PolicyID -> Map PolicyID (Map AssetName Integer) -> Maybe Int
forall k a. Ord k => k -> Map k a -> Maybe Int
Map.lookupIndex PolicyID
ledgerPolicyId Map PolicyID (Map AssetName Integer)
mintMap of
Just Int
idx' -> Int -> Word32
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
idx'
Maybe Int
Nothing -> [Char] -> Word32
forall a. HasCallStack => [Char] -> a
error [Char]
"The impossible happened: PolicyId not in mint map after insertion"
Mary.MultiAsset Map PolicyID (Map AssetName Integer)
oldMintMap = MultiAsset
ctbMint
oldMintKeys :: [PolicyID]
oldMintKeys = Map PolicyID (Map AssetName Integer) -> [PolicyID]
forall k a. Map k a -> [k]
Map.keys Map PolicyID (Map AssetName Integer)
oldMintMap
idxUpdate :: Word32 -> Word32
idxUpdate Word32
oldIdx
| (PolicyID -> Bool) -> [PolicyID] -> Bool
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
any
( \PolicyID
p ->
PolicyID -> Map PolicyID (Map AssetName Integer) -> Maybe Int
forall k a. Ord k => k -> Map k a -> Maybe Int
Map.lookupIndex PolicyID
p Map PolicyID (Map AssetName Integer)
mintMap Maybe Int -> Maybe Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int -> Maybe Int
forall a. a -> Maybe a
Just (Word32 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral Word32
oldIdx Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
1)
Bool -> Bool -> Bool
&& PolicyID -> Map PolicyID (Map AssetName Integer) -> Maybe Int
forall k a. Ord k => k -> Map k a -> Maybe Int
Map.lookupIndex PolicyID
p Map PolicyID (Map AssetName Integer)
oldMintMap Maybe Int -> Maybe Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int -> Maybe Int
forall a. a -> Maybe a
Just (Word32 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral Word32
oldIdx)
)
[PolicyID]
oldMintKeys =
Word32
oldIdx Word32 -> Word32 -> Word32
forall a. Num a => a -> a -> a
+ Word32
1
| Bool
otherwise = Word32
oldIdx
scriptInEra :: ScriptInEra Era
scriptInEra =
ScriptLanguageInEra lang Era -> Script lang -> ScriptInEra Era
forall lang era.
ScriptLanguageInEra lang era -> Script lang -> ScriptInEra era
ScriptInEra
ScriptLanguageInEra lang Era
forall lang era.
HasScriptLanguageInEra lang era =>
ScriptLanguageInEra lang era
scriptLanguageInEra
(PlutusScriptVersion lang -> PlutusScript lang -> Script lang
forall lang.
IsPlutusScriptLanguage lang =>
PlutusScriptVersion lang -> PlutusScript lang -> Script lang
PlutusScript PlutusScriptVersion lang
forall lang.
IsPlutusScriptLanguage lang =>
PlutusScriptVersion lang
plutusScriptVersion PlutusScript lang
script)
newScript :: Script (ShelleyLedgerEra Era)
newScript = forall era. ScriptInEra era -> Script (ShelleyLedgerEra era)
toShelleyScript @Era ScriptInEra Era
scriptInEra
scripts' :: [AlonzoScript ConwayEra]
scripts' = [Script (ShelleyLedgerEra Era)]
[AlonzoScript ConwayEra]
scripts [AlonzoScript ConwayEra]
-> [AlonzoScript ConwayEra] -> [AlonzoScript ConwayEra]
forall a. [a] -> [a] -> [a]
++ [Script (ShelleyLedgerEra Era)
AlonzoScript ConwayEra
newScript]
scriptData' :: TxBodyScriptData Era
scriptData' =
Word32
-> (Data (ShelleyLedgerEra Era), ExUnits)
-> TxBodyScriptData Era
-> TxBodyScriptData Era
addMintingRedeemer
Word32
mintIdx
(HashableScriptData -> Data (ShelleyLedgerEra Era)
forall ledgerera.
Era ledgerera =>
HashableScriptData -> Data ledgerera
toAlonzoData (HashableScriptData -> Data (ShelleyLedgerEra Era))
-> HashableScriptData -> Data (ShelleyLedgerEra Era)
forall a b. (a -> b) -> a -> b
$ Redeemer -> HashableScriptData
unsafeHashableScriptData Redeemer
redeemer, ExecutionUnits -> ExUnits
toAlonzoExUnits (ExecutionUnits -> ExUnits) -> ExecutionUnits -> ExUnits
forall a b. (a -> b) -> a -> b
$ Natural -> Natural -> ExecutionUnits
ExecutionUnits Natural
0 Natural
0)
(TxBodyScriptData Era -> TxBodyScriptData Era)
-> TxBodyScriptData Era -> TxBodyScriptData Era
forall a b. (a -> b) -> a -> b
$ Maybe Word32
-> (Word32 -> Word32)
-> TxBodyScriptData Era
-> TxBodyScriptData Era
recomputeScriptDataForMint Maybe Word32
forall a. Maybe a
Nothing Word32 -> Word32
idxUpdate TxBodyScriptData Era
scriptData
applyTxMod Tx Era
tx UTxO Era
utxos (RemoveRequiredSigner (PaymentKeyHash KeyHash 'Payment
kh)) =
(TxBody Era -> [KeyWitness Era] -> Tx Era
forall era. TxBody era -> [KeyWitness era] -> Tx era
Tx (ShelleyBasedEra Era
-> TxBody (ShelleyLedgerEra Era)
-> [Script (ShelleyLedgerEra Era)]
-> TxBodyScriptData Era
-> Maybe (TxAuxData (ShelleyLedgerEra Era))
-> TxScriptValidity Era
-> TxBody Era
forall era.
ShelleyBasedEra era
-> TxBody (ShelleyLedgerEra era)
-> [Script (ShelleyLedgerEra era)]
-> TxBodyScriptData era
-> Maybe (TxAuxData (ShelleyLedgerEra era))
-> TxScriptValidity era
-> TxBody era
ShelleyTxBody ShelleyBasedEra Era
era TxBody (ShelleyLedgerEra Era)
TxBody ConwayEra
body' [Script (ShelleyLedgerEra Era)]
scripts TxBodyScriptData Era
scriptData Maybe (TxAuxData (ShelleyLedgerEra Era))
auxData TxScriptValidity Era
validity) [KeyWitness Era]
wits, UTxO Era
utxos)
where
Tx (ShelleyTxBody ShelleyBasedEra Era
era body :: TxBody (ShelleyLedgerEra Era)
body@Conway.ConwayTxBody{StrictMaybe ScriptIntegrityHash
StrictMaybe Coin
StrictMaybe Network
StrictMaybe TxAuxDataHash
StrictMaybe (Sized (TxOut ConwayEra))
VotingProcedures ConwayEra
Coin
MultiAsset
Set (KeyHash 'Witness)
Set TxIn
OSet (TxCert ConwayEra)
OSet (ProposalProcedure ConwayEra)
ValidityInterval
Withdrawals
StrictSeq (Sized (TxOut ConwayEra))
ctbVldt :: TxBody ConwayEra -> ValidityInterval
ctbAdHash :: TxBody ConwayEra -> StrictMaybe TxAuxDataHash
ctbCerts :: TxBody ConwayEra -> OSet (TxCert ConwayEra)
ctbCollateralInputs :: TxBody ConwayEra -> Set TxIn
ctbCollateralReturn :: TxBody ConwayEra -> StrictMaybe (Sized (TxOut ConwayEra))
ctbCurrentTreasuryValue :: TxBody ConwayEra -> StrictMaybe Coin
ctbMint :: TxBody ConwayEra -> MultiAsset
ctbOutputs :: TxBody ConwayEra -> StrictSeq (Sized (TxOut ConwayEra))
ctbProposalProcedures :: TxBody ConwayEra -> OSet (ProposalProcedure ConwayEra)
ctbReferenceInputs :: TxBody ConwayEra -> Set TxIn
ctbReqSignerHashes :: TxBody ConwayEra -> Set (KeyHash 'Witness)
ctbScriptIntegrityHash :: TxBody ConwayEra -> StrictMaybe ScriptIntegrityHash
ctbSpendInputs :: TxBody ConwayEra -> Set TxIn
ctbTotalCollateral :: TxBody ConwayEra -> StrictMaybe Coin
ctbTreasuryDonation :: TxBody ConwayEra -> Coin
ctbTxNetworkId :: TxBody ConwayEra -> StrictMaybe Network
ctbTxfee :: TxBody ConwayEra -> Coin
ctbVotingProcedures :: TxBody ConwayEra -> VotingProcedures ConwayEra
ctbWithdrawals :: TxBody ConwayEra -> Withdrawals
ctbSpendInputs :: Set TxIn
ctbCollateralInputs :: Set TxIn
ctbReferenceInputs :: Set TxIn
ctbOutputs :: StrictSeq (Sized (TxOut ConwayEra))
ctbCollateralReturn :: StrictMaybe (Sized (TxOut ConwayEra))
ctbTotalCollateral :: StrictMaybe Coin
ctbCerts :: OSet (TxCert ConwayEra)
ctbWithdrawals :: Withdrawals
ctbTxfee :: Coin
ctbVldt :: ValidityInterval
ctbReqSignerHashes :: Set (KeyHash 'Witness)
ctbMint :: MultiAsset
ctbScriptIntegrityHash :: StrictMaybe ScriptIntegrityHash
ctbAdHash :: StrictMaybe TxAuxDataHash
ctbTxNetworkId :: StrictMaybe Network
ctbVotingProcedures :: VotingProcedures ConwayEra
ctbProposalProcedures :: OSet (ProposalProcedure ConwayEra)
ctbCurrentTreasuryValue :: StrictMaybe Coin
ctbTreasuryDonation :: Coin
..} [Script (ShelleyLedgerEra Era)]
scripts TxBodyScriptData Era
scriptData Maybe (TxAuxData (ShelleyLedgerEra Era))
auxData TxScriptValidity Era
validity) [KeyWitness Era]
wits = Tx Era
tx
body' :: TxBody ConwayEra
body' = TxBody (ShelleyLedgerEra Era)
body{Conway.ctbReqSignerHashes = Set.delete (coerceKeyRole kh) ctbReqSignerHashes}
applyTxMod Tx Era
_ UTxO Era
_ (ReplaceTx Tx Era
tx UTxO Era
utxos) = (Tx Era
tx, UTxO Era
utxos)
addOutput :: AddressAny -> Value -> Datum -> ReferenceScript Era -> TxModifier
addOutput :: AddressAny -> Value -> Datum -> ReferenceScript Era -> TxModifier
addOutput AddressAny
addr Value
value Datum
datum ReferenceScript Era
refscript = TxMod -> TxModifier
txMod (TxMod -> TxModifier) -> TxMod -> TxModifier
forall a b. (a -> b) -> a -> b
$ AddressAny -> Value -> Datum -> ReferenceScript Era -> TxMod
AddOutput AddressAny
addr Value
value Datum
datum ReferenceScript Era
refscript
removeOutput :: Output -> TxModifier
removeOutput :: Output -> TxModifier
removeOutput Output
output = TxMod -> TxModifier
txMod (TxMod -> TxModifier) -> TxMod -> TxModifier
forall a b. (a -> b) -> a -> b
$ TxIx -> TxMod
RemoveOutput (TxIx -> TxMod) -> TxIx -> TxMod
forall a b. (a -> b) -> a -> b
$ Output -> TxIx
outputIx Output
output
addKeyInput :: AddressAny -> Value -> Datum -> ReferenceScript Era -> TxModifier
addKeyInput :: AddressAny -> Value -> Datum -> ReferenceScript Era -> TxModifier
addKeyInput AddressAny
addr Value
value Datum
datum ReferenceScript Era
rscript = TxMod -> TxModifier
txMod (TxMod -> TxModifier) -> TxMod -> TxModifier
forall a b. (a -> b) -> a -> b
$ AddressAny
-> Value -> Datum -> ReferenceScript Era -> Bool -> TxMod
AddInput AddressAny
addr Value
value Datum
datum ReferenceScript Era
rscript Bool
False
addKeyReferenceInput :: AddressAny -> Value -> Datum -> ReferenceScript Era -> TxModifier
addKeyReferenceInput :: AddressAny -> Value -> Datum -> ReferenceScript Era -> TxModifier
addKeyReferenceInput AddressAny
addr Value
value Datum
datum ReferenceScript Era
rscript = TxMod -> TxModifier
txMod (TxMod -> TxModifier) -> TxMod -> TxModifier
forall a b. (a -> b) -> a -> b
$ AddressAny
-> Value -> Datum -> ReferenceScript Era -> Bool -> TxMod
AddInput AddressAny
addr Value
value Datum
datum ReferenceScript Era
rscript Bool
True
removeInput :: Input -> TxModifier
removeInput :: Input -> TxModifier
removeInput Input
inp = TxMod -> TxModifier
txMod (TxMod -> TxModifier) -> TxMod -> TxModifier
forall a b. (a -> b) -> a -> b
$ TxIn -> TxMod
RemoveInput (TxIn -> TxMod) -> TxIn -> TxMod
forall a b. (a -> b) -> a -> b
$ Input -> TxIn
inputTxIn Input
inp
addReferenceScriptInput :: ScriptHash -> Value -> Datum -> Redeemer -> TxModifier
addReferenceScriptInput :: ScriptHash -> Value -> Datum -> Redeemer -> TxModifier
addReferenceScriptInput ScriptHash
script Value
value Datum
datum Redeemer
redeemer = TxMod -> TxModifier
txMod (TxMod -> TxModifier) -> TxMod -> TxModifier
forall a b. (a -> b) -> a -> b
$ ScriptHash -> Value -> Datum -> Redeemer -> TxMod
AddReferenceScriptInput ScriptHash
script Value
value Datum
datum Redeemer
redeemer
addPlutusScriptInput :: (IsPlutusScriptInEra lang) => PlutusScript lang -> Value -> Datum -> Redeemer -> ReferenceScript Era -> TxModifier
addPlutusScriptInput :: forall lang.
IsPlutusScriptInEra lang =>
PlutusScript lang
-> Value -> Datum -> Redeemer -> ReferenceScript Era -> TxModifier
addPlutusScriptInput PlutusScript lang
script Value
value Datum
datum Redeemer
redeemer ReferenceScript Era
rscript = TxMod -> TxModifier
txMod (TxMod -> TxModifier) -> TxMod -> TxModifier
forall a b. (a -> b) -> a -> b
$ PlutusScript lang
-> Value -> Datum -> Redeemer -> ReferenceScript Era -> TxMod
forall lang.
IsPlutusScriptInEra lang =>
PlutusScript lang
-> Value -> Datum -> Redeemer -> ReferenceScript Era -> TxMod
AddPlutusScriptInput PlutusScript lang
script Value
value Datum
datum Redeemer
redeemer ReferenceScript Era
rscript
addPlutusScriptReferenceInput :: (IsPlutusScriptInEra lang) => PlutusScript lang -> Value -> Datum -> ReferenceScript Era -> TxModifier
addPlutusScriptReferenceInput :: forall lang.
IsPlutusScriptInEra lang =>
PlutusScript lang
-> Value -> Datum -> ReferenceScript Era -> TxModifier
addPlutusScriptReferenceInput PlutusScript lang
script Value
value Datum
datum ReferenceScript Era
rscript = TxMod -> TxModifier
txMod (TxMod -> TxModifier) -> TxMod -> TxModifier
forall a b. (a -> b) -> a -> b
$ PlutusScript lang -> Value -> Datum -> ReferenceScript Era -> TxMod
forall lang.
IsPlutusScriptInEra lang =>
PlutusScript lang -> Value -> Datum -> ReferenceScript Era -> TxMod
AddPlutusScriptReferenceInput PlutusScript lang
script Value
value Datum
datum ReferenceScript Era
rscript
addSimpleScriptInput :: SimpleScript -> Value -> ReferenceScript Era -> TxModifier
addSimpleScriptInput :: SimpleScript -> Value -> ReferenceScript Era -> TxModifier
addSimpleScriptInput SimpleScript
script Value
value ReferenceScript Era
rscript = TxMod -> TxModifier
txMod (TxMod -> TxModifier) -> TxMod -> TxModifier
forall a b. (a -> b) -> a -> b
$ SimpleScript -> Value -> ReferenceScript Era -> Bool -> TxMod
AddSimpleScriptInput SimpleScript
script Value
value ReferenceScript Era
rscript Bool
False
addSimpleScriptReferenceInput :: SimpleScript -> Value -> ReferenceScript Era -> TxModifier
addSimpleScriptReferenceInput :: SimpleScript -> Value -> ReferenceScript Era -> TxModifier
addSimpleScriptReferenceInput SimpleScript
script Value
value ReferenceScript Era
rscript = TxMod -> TxModifier
txMod (TxMod -> TxModifier) -> TxMod -> TxModifier
forall a b. (a -> b) -> a -> b
$ SimpleScript -> Value -> ReferenceScript Era -> Bool -> TxMod
AddSimpleScriptInput SimpleScript
script Value
value ReferenceScript Era
rscript Bool
True
addPlutusScriptMint
:: (IsPlutusScriptInEra lang)
=> PlutusScript lang
-> AssetName
-> Quantity
-> ScriptData
-> TxModifier
addPlutusScriptMint :: forall lang.
IsPlutusScriptInEra lang =>
PlutusScript lang
-> AssetName -> Quantity -> Redeemer -> TxModifier
addPlutusScriptMint PlutusScript lang
script AssetName
name Quantity
qty Redeemer
redeemer =
TxMod -> TxModifier
txMod (TxMod -> TxModifier) -> TxMod -> TxModifier
forall a b. (a -> b) -> a -> b
$ PlutusScript lang -> AssetName -> Quantity -> Redeemer -> TxMod
forall lang.
IsPlutusScriptInEra lang =>
PlutusScript lang -> AssetName -> Quantity -> Redeemer -> TxMod
AddPlutusScriptMint PlutusScript lang
script AssetName
name Quantity
qty Redeemer
redeemer
alwaysSucceedsMintingPolicy :: PlutusScript PlutusScriptV2
alwaysSucceedsMintingPolicy :: PlutusScript PlutusScriptV2
alwaysSucceedsMintingPolicy =
ShortByteString -> PlutusScript PlutusScriptV2
forall lang. ShortByteString -> PlutusScript lang
PlutusScriptSerialised (ShortByteString -> PlutusScript PlutusScriptV2)
-> ShortByteString -> PlutusScript PlutusScriptV2
forall a b. (a -> b) -> a -> b
$ Natural -> ShortByteString
alwaysSucceedingNAryFunction Natural
2
changeRedeemerOf :: Input -> Redeemer -> TxModifier
changeRedeemerOf :: Input -> Redeemer -> TxModifier
changeRedeemerOf Input
i Redeemer
r
| AddressAny -> Bool
isKeyAddressAny (Input -> AddressAny
forall t. IsInputOrOutput t => t -> AddressAny
addressOf Input
i) = [Char] -> TxModifier
forall a. HasCallStack => [Char] -> a
error [Char]
"Cannot changeRedeemerOf public key input"
| Bool
otherwise = TxMod -> TxModifier
txMod (TxMod -> TxModifier) -> TxMod -> TxModifier
forall a b. (a -> b) -> a -> b
$ TxIn
-> Maybe Value
-> Maybe Datum
-> Maybe Redeemer
-> Maybe (ReferenceScript Era)
-> TxMod
ChangeScriptInput (Input -> TxIn
inputTxIn Input
i) Maybe Value
forall a. Maybe a
Nothing Maybe Datum
forall a. Maybe a
Nothing (Redeemer -> Maybe Redeemer
forall a. a -> Maybe a
Just Redeemer
r) Maybe (ReferenceScript Era)
forall a. Maybe a
Nothing
changeValidityRange :: (TxValidityLowerBound Era, TxValidityUpperBound Era) -> TxModifier
changeValidityRange :: (TxValidityLowerBound Era, TxValidityUpperBound Era) -> TxModifier
changeValidityRange (TxValidityLowerBound Era
lo, TxValidityUpperBound Era
hi) = TxMod -> TxModifier
txMod (TxMod -> TxModifier) -> TxMod -> TxModifier
forall a b. (a -> b) -> a -> b
$ Maybe (TxValidityLowerBound Era)
-> Maybe (TxValidityUpperBound Era) -> TxMod
ChangeValidityRange (TxValidityLowerBound Era -> Maybe (TxValidityLowerBound Era)
forall a. a -> Maybe a
Just TxValidityLowerBound Era
lo) (TxValidityUpperBound Era -> Maybe (TxValidityUpperBound Era)
forall a. a -> Maybe a
Just TxValidityUpperBound Era
hi)
changeValidityLowerBound :: TxValidityLowerBound Era -> TxModifier
changeValidityLowerBound :: TxValidityLowerBound Era -> TxModifier
changeValidityLowerBound TxValidityLowerBound Era
lo = TxMod -> TxModifier
txMod (TxMod -> TxModifier) -> TxMod -> TxModifier
forall a b. (a -> b) -> a -> b
$ Maybe (TxValidityLowerBound Era)
-> Maybe (TxValidityUpperBound Era) -> TxMod
ChangeValidityRange (TxValidityLowerBound Era -> Maybe (TxValidityLowerBound Era)
forall a. a -> Maybe a
Just TxValidityLowerBound Era
lo) Maybe (TxValidityUpperBound Era)
forall a. Maybe a
Nothing
changeValidityUpperBound :: TxValidityUpperBound Era -> TxModifier
changeValidityUpperBound :: TxValidityUpperBound Era -> TxModifier
changeValidityUpperBound TxValidityUpperBound Era
hi = TxMod -> TxModifier
txMod (TxMod -> TxModifier) -> TxMod -> TxModifier
forall a b. (a -> b) -> a -> b
$ Maybe (TxValidityLowerBound Era)
-> Maybe (TxValidityUpperBound Era) -> TxMod
ChangeValidityRange Maybe (TxValidityLowerBound Era)
forall a. Maybe a
Nothing (TxValidityUpperBound Era -> Maybe (TxValidityUpperBound Era)
forall a. a -> Maybe a
Just TxValidityUpperBound Era
hi)
removeRequiredSigner :: Hash PaymentKey -> TxModifier
removeRequiredSigner :: Hash PaymentKey -> TxModifier
removeRequiredSigner = TxMod -> TxModifier
txMod (TxMod -> TxModifier)
-> (Hash PaymentKey -> TxMod) -> Hash PaymentKey -> TxModifier
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Hash PaymentKey -> TxMod
RemoveRequiredSigner
replaceTx :: Tx Era -> UTxO Era -> TxModifier
replaceTx :: Tx Era -> UTxO Era -> TxModifier
replaceTx Tx Era
tx UTxO Era
utxos = TxMod -> TxModifier
txMod (TxMod -> TxModifier) -> TxMod -> TxModifier
forall a b. (a -> b) -> a -> b
$ Tx Era -> UTxO Era -> TxMod
ReplaceTx Tx Era
tx UTxO Era
utxos
renderAddressAny :: AddressAny -> Text
renderAddressAny :: AddressAny -> Text
renderAddressAny (AddressShelley Address ShelleyAddr
addr) = Address ShelleyAddr -> Text
forall addr. SerialiseAddress addr => addr -> Text
serialiseAddress Address ShelleyAddr
addr
renderAddressAny (AddressByron Address ByronAddr
addr) = [Char] -> Text
Text.pack (Address ByronAddr -> [Char]
forall a. Show a => a -> [Char]
show Address ByronAddr
addr)
renderDatumAny :: Datum -> Maybe Text
renderDatumAny :: Datum -> Maybe Text
renderDatumAny = Datum -> Maybe Text
renderDatum
instance ToJSON TxMod where
toJSON :: TxMod -> Value
toJSON (RemoveInput TxIn
txIn) =
[Pair] -> Value
object
[ Key
"type" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= (Text
"removeInput" :: Text)
, Key
"utxo" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= TxIn -> Text
renderTxIn TxIn
txIn
]
toJSON (RemoveOutput (TxIx Word
ix)) =
[Pair] -> Value
object
[ Key
"type" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= (Text
"removeOutput" :: Text)
, Key
"index" Key -> Word -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Word
ix
]
toJSON (ChangeOutput (TxIx Word
ix) Maybe AddressAny
mAddr Maybe Value
mVal Maybe Datum
mDatum Maybe (ReferenceScript Era)
mRefScript) =
[Pair] -> Value
object
[ Key
"type" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= (Text
"changeOutput" :: Text)
, Key
"index" Key -> Word -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Word
ix
, Key
"address" Key -> Maybe Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= (AddressAny -> Text) -> Maybe AddressAny -> Maybe Text
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap AddressAny -> Text
renderAddressAny Maybe AddressAny
mAddr
, Key
"value" Key -> Maybe ValueSummary -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= (Value -> ValueSummary) -> Maybe Value -> Maybe ValueSummary
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Value -> ValueSummary
toValueSummary Maybe Value
mVal
, Key
"datum" Key -> Maybe Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= (Maybe Datum
mDatum Maybe Datum -> (Datum -> Maybe Text) -> Maybe Text
forall a b. Maybe a -> (a -> Maybe b) -> Maybe b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Datum -> Maybe Text
renderDatumAny)
, Key
"referenceScript" Key -> Maybe Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= (ReferenceScript Era -> Text)
-> Maybe (ReferenceScript Era) -> Maybe Text
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ([Char] -> Text
Text.pack ([Char] -> Text)
-> (ReferenceScript Era -> [Char]) -> ReferenceScript Era -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ReferenceScript Era -> [Char]
forall a. Show a => a -> [Char]
show) Maybe (ReferenceScript Era)
mRefScript
]
toJSON (ChangeInput TxIn
txIn Maybe AddressAny
mAddr Maybe Value
mVal Maybe Datum
mDatum Maybe (ReferenceScript Era)
mRefScript) =
[Pair] -> Value
object
[ Key
"type" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= (Text
"changeInput" :: Text)
, Key
"utxo" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= TxIn -> Text
renderTxIn TxIn
txIn
, Key
"address" Key -> Maybe Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= (AddressAny -> Text) -> Maybe AddressAny -> Maybe Text
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap AddressAny -> Text
renderAddressAny Maybe AddressAny
mAddr
, Key
"value" Key -> Maybe ValueSummary -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= (Value -> ValueSummary) -> Maybe Value -> Maybe ValueSummary
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Value -> ValueSummary
toValueSummary Maybe Value
mVal
, Key
"datum" Key -> Maybe Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= (Maybe Datum
mDatum Maybe Datum -> (Datum -> Maybe Text) -> Maybe Text
forall a b. Maybe a -> (a -> Maybe b) -> Maybe b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Datum -> Maybe Text
renderDatumAny)
, Key
"referenceScript" Key -> Maybe Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= (ReferenceScript Era -> Text)
-> Maybe (ReferenceScript Era) -> Maybe Text
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ([Char] -> Text
Text.pack ([Char] -> Text)
-> (ReferenceScript Era -> [Char]) -> ReferenceScript Era -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ReferenceScript Era -> [Char]
forall a. Show a => a -> [Char]
show) Maybe (ReferenceScript Era)
mRefScript
]
toJSON (ChangeScriptInput TxIn
txIn Maybe Value
mVal Maybe Datum
mDatum Maybe Redeemer
mRedeemer Maybe (ReferenceScript Era)
mRefScript) =
[Pair] -> Value
object
[ Key
"type" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= (Text
"changeScriptInput" :: Text)
, Key
"utxo" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= TxIn -> Text
renderTxIn TxIn
txIn
, Key
"value" Key -> Maybe ValueSummary -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= (Value -> ValueSummary) -> Maybe Value -> Maybe ValueSummary
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Value -> ValueSummary
toValueSummary Maybe Value
mVal
, Key
"datum" Key -> Maybe Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= (Maybe Datum
mDatum Maybe Datum -> (Datum -> Maybe Text) -> Maybe Text
forall a b. Maybe a -> (a -> Maybe b) -> Maybe b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Datum -> Maybe Text
renderDatumAny)
, Key
"redeemer" Key -> Maybe Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= (Redeemer -> Text) -> Maybe Redeemer -> Maybe Text
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ([Char] -> Text
Text.pack ([Char] -> Text) -> (Redeemer -> [Char]) -> Redeemer -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Redeemer -> [Char]
forall a. Show a => a -> [Char]
show) Maybe Redeemer
mRedeemer
, Key
"referenceScript" Key -> Maybe Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= (ReferenceScript Era -> Text)
-> Maybe (ReferenceScript Era) -> Maybe Text
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ([Char] -> Text
Text.pack ([Char] -> Text)
-> (ReferenceScript Era -> [Char]) -> ReferenceScript Era -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ReferenceScript Era -> [Char]
forall a. Show a => a -> [Char]
show) Maybe (ReferenceScript Era)
mRefScript
]
toJSON (ChangeValidityRange Maybe (TxValidityLowerBound Era)
mLower Maybe (TxValidityUpperBound Era)
mUpper) =
[Pair] -> Value
object
[ Key
"type" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= (Text
"changeValidityRange" :: Text)
, Key
"lowerBound" Key -> Maybe Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= (TxValidityLowerBound Era -> Text)
-> Maybe (TxValidityLowerBound Era) -> Maybe Text
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ([Char] -> Text
Text.pack ([Char] -> Text)
-> (TxValidityLowerBound Era -> [Char])
-> TxValidityLowerBound Era
-> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TxValidityLowerBound Era -> [Char]
forall a. Show a => a -> [Char]
show) Maybe (TxValidityLowerBound Era)
mLower
, Key
"upperBound" Key -> Maybe Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= (TxValidityUpperBound Era -> Text)
-> Maybe (TxValidityUpperBound Era) -> Maybe Text
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ([Char] -> Text
Text.pack ([Char] -> Text)
-> (TxValidityUpperBound Era -> [Char])
-> TxValidityUpperBound Era
-> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TxValidityUpperBound Era -> [Char]
forall a. Show a => a -> [Char]
show) Maybe (TxValidityUpperBound Era)
mUpper
]
toJSON (AddOutput AddressAny
addr Value
val Datum
datum ReferenceScript Era
refScript) =
[Pair] -> Value
object
[ Key
"type" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= (Text
"addOutput" :: Text)
, Key
"address" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= AddressAny -> Text
renderAddressAny AddressAny
addr
, Key
"value" Key -> ValueSummary -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Value -> ValueSummary
toValueSummary Value
val
, Key
"datum" Key -> Maybe Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Datum -> Maybe Text
renderDatumAny Datum
datum
, Key
"referenceScript" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= [Char] -> Text
Text.pack (ReferenceScript Era -> [Char]
forall a. Show a => a -> [Char]
show ReferenceScript Era
refScript)
]
toJSON (AddInput AddressAny
addr Value
val Datum
datum ReferenceScript Era
refScript Bool
isRef) =
[Pair] -> Value
object
[ Key
"type" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= (Text
"addInput" :: Text)
, Key
"address" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= AddressAny -> Text
renderAddressAny AddressAny
addr
, Key
"value" Key -> ValueSummary -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Value -> ValueSummary
toValueSummary Value
val
, Key
"datum" Key -> Maybe Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Datum -> Maybe Text
renderDatumAny Datum
datum
, Key
"referenceScript" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= [Char] -> Text
Text.pack (ReferenceScript Era -> [Char]
forall a. Show a => a -> [Char]
show ReferenceScript Era
refScript)
, Key
"isReferenceInput" Key -> Bool -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Bool
isRef
]
toJSON (AddReferenceScriptInput ScriptHash
scriptHash Value
val Datum
datum Redeemer
redeemer) =
[Pair] -> Value
object
[ Key
"type" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= (Text
"addReferenceScriptInput" :: Text)
, Key
"scriptHash" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= ScriptHash -> Text
forall a. SerialiseAsRawBytes a => a -> Text
serialiseToRawBytesHexText ScriptHash
scriptHash
, Key
"value" Key -> ValueSummary -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Value -> ValueSummary
toValueSummary Value
val
, Key
"datum" Key -> Maybe Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Datum -> Maybe Text
renderDatumAny Datum
datum
, Key
"redeemer" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= [Char] -> Text
Text.pack (Redeemer -> [Char]
forall a. Show a => a -> [Char]
show Redeemer
redeemer)
]
toJSON (AddPlutusScriptInput PlutusScript lang
_script Value
val Datum
datum Redeemer
redeemer ReferenceScript Era
refScript) =
[Pair] -> Value
object
[ Key
"type" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= (Text
"addPlutusScriptInput" :: Text)
, Key
"value" Key -> ValueSummary -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Value -> ValueSummary
toValueSummary Value
val
, Key
"datum" Key -> Maybe Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Datum -> Maybe Text
renderDatumAny Datum
datum
, Key
"redeemer" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= [Char] -> Text
Text.pack (Redeemer -> [Char]
forall a. Show a => a -> [Char]
show Redeemer
redeemer)
, Key
"referenceScript" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= [Char] -> Text
Text.pack (ReferenceScript Era -> [Char]
forall a. Show a => a -> [Char]
show ReferenceScript Era
refScript)
]
toJSON (AddPlutusScriptReferenceInput PlutusScript lang
_script Value
val Datum
datum ReferenceScript Era
refScript) =
[Pair] -> Value
object
[ Key
"type" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= (Text
"addPlutusScriptReferenceInput" :: Text)
, Key
"value" Key -> ValueSummary -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Value -> ValueSummary
toValueSummary Value
val
, Key
"datum" Key -> Maybe Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Datum -> Maybe Text
renderDatumAny Datum
datum
, Key
"referenceScript" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= [Char] -> Text
Text.pack (ReferenceScript Era -> [Char]
forall a. Show a => a -> [Char]
show ReferenceScript Era
refScript)
]
toJSON (AddSimpleScriptInput SimpleScript
_script Value
val ReferenceScript Era
refScript Bool
isRef) =
[Pair] -> Value
object
[ Key
"type" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= (Text
"addSimpleScriptInput" :: Text)
, Key
"value" Key -> ValueSummary -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Value -> ValueSummary
toValueSummary Value
val
, Key
"referenceScript" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= [Char] -> Text
Text.pack (ReferenceScript Era -> [Char]
forall a. Show a => a -> [Char]
show ReferenceScript Era
refScript)
, Key
"isReferenceInput" Key -> Bool -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Bool
isRef
]
toJSON (AddPlutusScriptMint PlutusScript lang
_script AssetName
assetName Quantity
qty Redeemer
redeemer) =
[Pair] -> Value
object
[ Key
"type" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= (Text
"addPlutusScriptMint" :: Text)
, Key
"assetName" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= AssetName -> Text
renderAssetName AssetName
assetName
, Key
"quantity" Key -> Quantity -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Quantity
qty
, Key
"redeemer" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= [Char] -> Text
Text.pack (Redeemer -> [Char]
forall a. Show a => a -> [Char]
show Redeemer
redeemer)
]
toJSON (RemoveRequiredSigner Hash PaymentKey
keyHash) =
[Pair] -> Value
object
[ Key
"type" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= (Text
"removeRequiredSigner" :: Text)
, Key
"keyHash" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Hash PaymentKey -> Text
forall a. SerialiseAsRawBytes a => a -> Text
serialiseToRawBytesHexText Hash PaymentKey
keyHash
]
toJSON (ReplaceTx Tx Era
_tx UTxO Era
_utxo) =
[Pair] -> Value
object
[ Key
"type" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= (Text
"replaceTx" :: Text)
]