module Cooked.MockChain.AutoReferenceScripts (toTxSkelWithReferenceScripts) where
import Control.Monad
import Cooked.MockChain.BlockChain
import Cooked.MockChain.UtxoSearch
import Cooked.Output
import Cooked.Skeleton
import Data.Map qualified as Map
import Data.Maybe
import Optics.Core
import Plutus.Script.Utils.Scripts qualified as Script
import PlutusLedgerApi.V3 qualified as Api
retrieveReferenceScript :: (MonadBlockChain m, Script.ToScriptHash s) => s -> m (Maybe Api.TxOutRef)
retrieveReferenceScript :: forall (m :: * -> *) s.
(MonadBlockChain m, ToScriptHash s) =>
s -> m (Maybe TxOutRef)
retrieveReferenceScript = ([TxOutRef] -> Maybe TxOutRef
forall a. [a] -> Maybe a
listToMaybe ([TxOutRef] -> Maybe TxOutRef)
-> ([(TxOutRef,
ConcreteOutput Credential OutputDatum Value ScriptHash)]
-> [TxOutRef])
-> [(TxOutRef,
ConcreteOutput Credential OutputDatum Value ScriptHash)]
-> Maybe TxOutRef
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((TxOutRef, ConcreteOutput Credential OutputDatum Value ScriptHash)
-> TxOutRef
forall a b. (a, b) -> a
fst ((TxOutRef, ConcreteOutput Credential OutputDatum Value ScriptHash)
-> TxOutRef)
-> [(TxOutRef,
ConcreteOutput Credential OutputDatum Value ScriptHash)]
-> [TxOutRef]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>) ([(TxOutRef,
ConcreteOutput Credential OutputDatum Value ScriptHash)]
-> Maybe TxOutRef)
-> m [(TxOutRef,
ConcreteOutput Credential OutputDatum Value ScriptHash)]
-> m (Maybe TxOutRef)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>) (m [(TxOutRef,
ConcreteOutput Credential OutputDatum Value ScriptHash)]
-> m (Maybe TxOutRef))
-> (s
-> m [(TxOutRef,
ConcreteOutput Credential OutputDatum Value ScriptHash)])
-> s
-> m (Maybe TxOutRef)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UtxoSearch
m (ConcreteOutput Credential OutputDatum Value ScriptHash)
-> m [(TxOutRef,
ConcreteOutput Credential OutputDatum Value ScriptHash)]
forall (m :: * -> *) a.
Monad m =>
UtxoSearch m a -> m [(TxOutRef, a)]
runUtxoSearch (UtxoSearch
m (ConcreteOutput Credential OutputDatum Value ScriptHash)
-> m [(TxOutRef,
ConcreteOutput Credential OutputDatum Value ScriptHash)])
-> (s
-> UtxoSearch
m (ConcreteOutput Credential OutputDatum Value ScriptHash))
-> s
-> m [(TxOutRef,
ConcreteOutput Credential OutputDatum Value ScriptHash)]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. s
-> UtxoSearch
m (ConcreteOutput Credential OutputDatum Value ScriptHash)
forall (m :: * -> *) s.
(MonadBlockChain m, ToScriptHash s) =>
s
-> UtxoSearch
m (ConcreteOutput Credential OutputDatum Value ScriptHash)
referenceScriptOutputsSearch
updateRedeemer :: (MonadBlockChain m, Script.ToScriptHash s) => s -> TxSkelRedeemer -> m TxSkelRedeemer
updateRedeemer :: forall (m :: * -> *) s.
(MonadBlockChain m, ToScriptHash s) =>
s -> TxSkelRedeemer -> m TxSkelRedeemer
updateRedeemer s
script txSkelRed :: TxSkelRedeemer
txSkelRed@(TxSkelRedeemer redeemer
_ Maybe TxOutRef
Nothing Bool
True) = do
Maybe TxOutRef
oRefM <- s -> m (Maybe TxOutRef)
forall (m :: * -> *) s.
(MonadBlockChain m, ToScriptHash s) =>
s -> m (Maybe TxOutRef)
retrieveReferenceScript s
script
case Maybe TxOutRef
oRefM of
Maybe TxOutRef
Nothing -> TxSkelRedeemer -> m TxSkelRedeemer
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return TxSkelRedeemer
txSkelRed
Just TxOutRef
oRef -> do
MockChainLogEntry -> m ()
forall (m :: * -> *).
MonadBlockChainBalancing m =>
MockChainLogEntry -> m ()
logEvent (MockChainLogEntry -> m ()) -> MockChainLogEntry -> m ()
forall a b. (a -> b) -> a -> b
$ TxSkelRedeemer -> TxOutRef -> ScriptHash -> MockChainLogEntry
MCLogAddedReferenceScript TxSkelRedeemer
txSkelRed TxOutRef
oRef (s -> ScriptHash
forall a. ToScriptHash a => a -> ScriptHash
Script.toScriptHash s
script)
TxSkelRedeemer -> m TxSkelRedeemer
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (TxSkelRedeemer -> m TxSkelRedeemer)
-> TxSkelRedeemer -> m TxSkelRedeemer
forall a b. (a -> b) -> a -> b
$ TxSkelRedeemer
txSkelRed TxSkelRedeemer -> TxOutRef -> TxSkelRedeemer
`withReferenceInput` TxOutRef
oRef
updateRedeemer s
_ TxSkelRedeemer
redeemer = TxSkelRedeemer -> m TxSkelRedeemer
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return TxSkelRedeemer
redeemer
toTxSkelWithReferenceScripts :: (MonadBlockChain m) => TxSkel -> m TxSkel
toTxSkelWithReferenceScripts :: forall (m :: * -> *). MonadBlockChain m => TxSkel -> m TxSkel
toTxSkelWithReferenceScripts TxSkel
txSkel = do
[Mint]
newMints <- [Mint] -> (Mint -> m Mint) -> m [Mint]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
t a -> (a -> m b) -> m (t b)
forM (TxSkelMints -> [Mint]
txSkelMintsToList (TxSkelMints -> [Mint]) -> TxSkelMints -> [Mint]
forall a b. (a -> b) -> a -> b
$ TxSkel
txSkel TxSkel -> Optic' A_Lens NoIx TxSkel TxSkelMints -> TxSkelMints
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic' A_Lens NoIx TxSkel TxSkelMints
txSkelMintsL) ((Mint -> m Mint) -> m [Mint]) -> (Mint -> m Mint) -> m [Mint]
forall a b. (a -> b) -> a -> b
$ \(Mint a
mPol TxSkelRedeemer
red [(TokenName, Integer)]
tks) ->
(\TxSkelRedeemer
x -> a -> TxSkelRedeemer -> [(TokenName, Integer)] -> Mint
forall a.
ToVersioned MintingPolicy a =>
a -> TxSkelRedeemer -> [(TokenName, Integer)] -> Mint
Mint a
mPol TxSkelRedeemer
x [(TokenName, Integer)]
tks) (TxSkelRedeemer -> Mint) -> m TxSkelRedeemer -> m Mint
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Versioned MintingPolicy -> TxSkelRedeemer -> m TxSkelRedeemer
forall (m :: * -> *) s.
(MonadBlockChain m, ToScriptHash s) =>
s -> TxSkelRedeemer -> m TxSkelRedeemer
updateRedeemer (forall s a. ToVersioned s a => a -> Versioned s
Script.toVersioned @Script.MintingPolicy a
mPol) TxSkelRedeemer
red
[(TxOutRef, TxSkelRedeemer)]
newInputs <- [(TxOutRef, TxSkelRedeemer)]
-> ((TxOutRef, TxSkelRedeemer) -> m (TxOutRef, TxSkelRedeemer))
-> m [(TxOutRef, TxSkelRedeemer)]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
t a -> (a -> m b) -> m (t b)
forM (Map TxOutRef TxSkelRedeemer -> [(TxOutRef, TxSkelRedeemer)]
forall k a. Map k a -> [(k, a)]
Map.toList (Map TxOutRef TxSkelRedeemer -> [(TxOutRef, TxSkelRedeemer)])
-> Map TxOutRef TxSkelRedeemer -> [(TxOutRef, TxSkelRedeemer)]
forall a b. (a -> b) -> a -> b
$ TxSkel
txSkel TxSkel
-> Optic' A_Lens NoIx TxSkel (Map TxOutRef TxSkelRedeemer)
-> Map TxOutRef TxSkelRedeemer
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic' A_Lens NoIx TxSkel (Map TxOutRef TxSkelRedeemer)
txSkelInsL) (((TxOutRef, TxSkelRedeemer) -> m (TxOutRef, TxSkelRedeemer))
-> m [(TxOutRef, TxSkelRedeemer)])
-> ((TxOutRef, TxSkelRedeemer) -> m (TxOutRef, TxSkelRedeemer))
-> m [(TxOutRef, TxSkelRedeemer)]
forall a b. (a -> b) -> a -> b
$ \(TxOutRef
oRef, TxSkelRedeemer
red) -> do
Maybe TxOut
outputM <- TxOutRef -> m (Maybe TxOut)
forall (m :: * -> *).
MonadBlockChainBalancing m =>
TxOutRef -> m (Maybe TxOut)
txOutByRef TxOutRef
oRef
case (ConcreteOutput ScriptHash OutputDatum Value ScriptHash
-> Optic'
A_Lens
NoIx
(ConcreteOutput ScriptHash OutputDatum Value ScriptHash)
(OwnerType
(ConcreteOutput ScriptHash OutputDatum Value ScriptHash))
-> OwnerType
(ConcreteOutput ScriptHash OutputDatum Value ScriptHash)
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic'
A_Lens
NoIx
(ConcreteOutput ScriptHash OutputDatum Value ScriptHash)
(OwnerType
(ConcreteOutput ScriptHash OutputDatum Value ScriptHash))
forall o. IsAbstractOutput o => Lens' o (OwnerType o)
outputOwnerL) (ConcreteOutput ScriptHash OutputDatum Value ScriptHash
-> OwnerType
(ConcreteOutput ScriptHash OutputDatum Value ScriptHash))
-> Maybe (ConcreteOutput ScriptHash OutputDatum Value ScriptHash)
-> Maybe
(OwnerType
(ConcreteOutput ScriptHash OutputDatum Value ScriptHash))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Maybe TxOut
outputM Maybe TxOut
-> (TxOut
-> Maybe (ConcreteOutput ScriptHash OutputDatum Value ScriptHash))
-> Maybe (ConcreteOutput ScriptHash OutputDatum Value ScriptHash)
forall a b. Maybe a -> (a -> Maybe b) -> Maybe b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= TxOut
-> Maybe (ConcreteOutput ScriptHash OutputDatum Value ScriptHash)
TxOut
-> Maybe
(ConcreteOutput
ScriptHash
(DatumType TxOut)
(ValueType TxOut)
(ReferenceScriptType TxOut))
forall out.
IsTxInfoOutput out =>
out
-> Maybe
(ConcreteOutput
ScriptHash
(DatumType out)
(ValueType out)
(ReferenceScriptType out))
isScriptOutput) of
Maybe
(OwnerType
(ConcreteOutput ScriptHash OutputDatum Value ScriptHash))
Nothing -> (TxOutRef, TxSkelRedeemer) -> m (TxOutRef, TxSkelRedeemer)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (TxOutRef
oRef, TxSkelRedeemer
red)
Just OwnerType (ConcreteOutput ScriptHash OutputDatum Value ScriptHash)
scriptHash -> (TxOutRef
oRef,) (TxSkelRedeemer -> (TxOutRef, TxSkelRedeemer))
-> m TxSkelRedeemer -> m (TxOutRef, TxSkelRedeemer)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> OwnerType (ConcreteOutput ScriptHash OutputDatum Value ScriptHash)
-> TxSkelRedeemer -> m TxSkelRedeemer
forall (m :: * -> *) s.
(MonadBlockChain m, ToScriptHash s) =>
s -> TxSkelRedeemer -> m TxSkelRedeemer
updateRedeemer OwnerType (ConcreteOutput ScriptHash OutputDatum Value ScriptHash)
scriptHash TxSkelRedeemer
red
[TxSkelProposal]
newProposals <- [TxSkelProposal]
-> (TxSkelProposal -> m TxSkelProposal) -> m [TxSkelProposal]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
t a -> (a -> m b) -> m (t b)
forM (TxSkel
txSkel TxSkel
-> Optic' A_Lens NoIx TxSkel [TxSkelProposal] -> [TxSkelProposal]
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic' A_Lens NoIx TxSkel [TxSkelProposal]
txSkelProposalsL) ((TxSkelProposal -> m TxSkelProposal) -> m [TxSkelProposal])
-> (TxSkelProposal -> m TxSkelProposal) -> m [TxSkelProposal]
forall a b. (a -> b) -> a -> b
$ \TxSkelProposal
prop ->
case TxSkelProposal
prop TxSkelProposal
-> Optic'
A_Lens
NoIx
TxSkelProposal
(Maybe (Versioned Script, TxSkelRedeemer))
-> Maybe (Versioned Script, TxSkelRedeemer)
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic'
A_Lens
NoIx
TxSkelProposal
(Maybe (Versioned Script, TxSkelRedeemer))
txSkelProposalWitnessL of
Maybe (Versioned Script, TxSkelRedeemer)
Nothing -> TxSkelProposal -> m TxSkelProposal
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return TxSkelProposal
prop
Just (Versioned Script
script, TxSkelRedeemer
red) -> (Maybe (Versioned Script, TxSkelRedeemer)
-> TxSkelProposal -> TxSkelProposal)
-> TxSkelProposal
-> Maybe (Versioned Script, TxSkelRedeemer)
-> TxSkelProposal
forall a b c. (a -> b -> c) -> b -> a -> c
flip (Optic'
A_Lens
NoIx
TxSkelProposal
(Maybe (Versioned Script, TxSkelRedeemer))
-> Maybe (Versioned Script, TxSkelRedeemer)
-> TxSkelProposal
-> TxSkelProposal
forall k (is :: IxList) s t a b.
Is k A_Setter =>
Optic k is s t a b -> b -> s -> t
set Optic'
A_Lens
NoIx
TxSkelProposal
(Maybe (Versioned Script, TxSkelRedeemer))
txSkelProposalWitnessL) TxSkelProposal
prop (Maybe (Versioned Script, TxSkelRedeemer) -> TxSkelProposal)
-> (TxSkelRedeemer -> Maybe (Versioned Script, TxSkelRedeemer))
-> TxSkelRedeemer
-> TxSkelProposal
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Versioned Script, TxSkelRedeemer)
-> Maybe (Versioned Script, TxSkelRedeemer)
forall a. a -> Maybe a
Just ((Versioned Script, TxSkelRedeemer)
-> Maybe (Versioned Script, TxSkelRedeemer))
-> (TxSkelRedeemer -> (Versioned Script, TxSkelRedeemer))
-> TxSkelRedeemer
-> Maybe (Versioned Script, TxSkelRedeemer)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Versioned Script
script,) (TxSkelRedeemer -> TxSkelProposal)
-> m TxSkelRedeemer -> m TxSkelProposal
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Versioned Script -> TxSkelRedeemer -> m TxSkelRedeemer
forall (m :: * -> *) s.
(MonadBlockChain m, ToScriptHash s) =>
s -> TxSkelRedeemer -> m TxSkelRedeemer
updateRedeemer Versioned Script
script TxSkelRedeemer
red
[(Either (Versioned Script) PubKeyHash,
(TxSkelRedeemer, Lovelace))]
newWithdrawals <- [(Either (Versioned Script) PubKeyHash,
(TxSkelRedeemer, Lovelace))]
-> ((Either (Versioned Script) PubKeyHash,
(TxSkelRedeemer, Lovelace))
-> m (Either (Versioned Script) PubKeyHash,
(TxSkelRedeemer, Lovelace)))
-> m [(Either (Versioned Script) PubKeyHash,
(TxSkelRedeemer, Lovelace))]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
t a -> (a -> m b) -> m (t b)
forM (Map
(Either (Versioned Script) PubKeyHash) (TxSkelRedeemer, Lovelace)
-> [(Either (Versioned Script) PubKeyHash,
(TxSkelRedeemer, Lovelace))]
forall k a. Map k a -> [(k, a)]
Map.toList (Map
(Either (Versioned Script) PubKeyHash) (TxSkelRedeemer, Lovelace)
-> [(Either (Versioned Script) PubKeyHash,
(TxSkelRedeemer, Lovelace))])
-> Map
(Either (Versioned Script) PubKeyHash) (TxSkelRedeemer, Lovelace)
-> [(Either (Versioned Script) PubKeyHash,
(TxSkelRedeemer, Lovelace))]
forall a b. (a -> b) -> a -> b
$ TxSkel
txSkel TxSkel
-> Optic'
A_Lens
NoIx
TxSkel
(Map
(Either (Versioned Script) PubKeyHash) (TxSkelRedeemer, Lovelace))
-> Map
(Either (Versioned Script) PubKeyHash) (TxSkelRedeemer, Lovelace)
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic'
A_Lens
NoIx
TxSkel
(Map
(Either (Versioned Script) PubKeyHash) (TxSkelRedeemer, Lovelace))
txSkelWithdrawalsL) (((Either (Versioned Script) PubKeyHash,
(TxSkelRedeemer, Lovelace))
-> m (Either (Versioned Script) PubKeyHash,
(TxSkelRedeemer, Lovelace)))
-> m [(Either (Versioned Script) PubKeyHash,
(TxSkelRedeemer, Lovelace))])
-> ((Either (Versioned Script) PubKeyHash,
(TxSkelRedeemer, Lovelace))
-> m (Either (Versioned Script) PubKeyHash,
(TxSkelRedeemer, Lovelace)))
-> m [(Either (Versioned Script) PubKeyHash,
(TxSkelRedeemer, Lovelace))]
forall a b. (a -> b) -> a -> b
$ \(Either (Versioned Script) PubKeyHash
wit, (TxSkelRedeemer
red, Lovelace
quantity)) -> case Either (Versioned Script) PubKeyHash
wit of
Right PubKeyHash
_ -> (Either (Versioned Script) PubKeyHash, (TxSkelRedeemer, Lovelace))
-> m (Either (Versioned Script) PubKeyHash,
(TxSkelRedeemer, Lovelace))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Either (Versioned Script) PubKeyHash
wit, (TxSkelRedeemer
red, Lovelace
quantity))
Left Versioned Script
script -> (Versioned Script -> Either (Versioned Script) PubKeyHash
forall a b. a -> Either a b
Left Versioned Script
script,) ((TxSkelRedeemer, Lovelace)
-> (Either (Versioned Script) PubKeyHash,
(TxSkelRedeemer, Lovelace)))
-> (TxSkelRedeemer -> (TxSkelRedeemer, Lovelace))
-> TxSkelRedeemer
-> (Either (Versioned Script) PubKeyHash,
(TxSkelRedeemer, Lovelace))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (,Lovelace
quantity) (TxSkelRedeemer
-> (Either (Versioned Script) PubKeyHash,
(TxSkelRedeemer, Lovelace)))
-> m TxSkelRedeemer
-> m (Either (Versioned Script) PubKeyHash,
(TxSkelRedeemer, Lovelace))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Versioned Script -> TxSkelRedeemer -> m TxSkelRedeemer
forall (m :: * -> *) s.
(MonadBlockChain m, ToScriptHash s) =>
s -> TxSkelRedeemer -> m TxSkelRedeemer
updateRedeemer Versioned Script
script TxSkelRedeemer
red
TxSkel -> m TxSkel
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (TxSkel -> m TxSkel) -> TxSkel -> m TxSkel
forall a b. (a -> b) -> a -> b
$
TxSkel
txSkel
TxSkel -> (TxSkel -> TxSkel) -> TxSkel
forall a b. a -> (a -> b) -> b
& Optic' A_Lens NoIx TxSkel TxSkelMints
txSkelMintsL
Optic' A_Lens NoIx TxSkel TxSkelMints
-> TxSkelMints -> TxSkel -> TxSkel
forall k (is :: IxList) s t a b.
Is k A_Setter =>
Optic k is s t a b -> b -> s -> t
.~ [Mint] -> TxSkelMints
txSkelMintsFromList [Mint]
newMints
TxSkel -> (TxSkel -> TxSkel) -> TxSkel
forall a b. a -> (a -> b) -> b
& Optic' A_Lens NoIx TxSkel (Map TxOutRef TxSkelRedeemer)
txSkelInsL
Optic' A_Lens NoIx TxSkel (Map TxOutRef TxSkelRedeemer)
-> Map TxOutRef TxSkelRedeemer -> TxSkel -> TxSkel
forall k (is :: IxList) s t a b.
Is k A_Setter =>
Optic k is s t a b -> b -> s -> t
.~ [(TxOutRef, TxSkelRedeemer)] -> Map TxOutRef TxSkelRedeemer
forall k a. Ord k => [(k, a)] -> Map k a
Map.fromList [(TxOutRef, TxSkelRedeemer)]
newInputs
TxSkel -> (TxSkel -> TxSkel) -> TxSkel
forall a b. a -> (a -> b) -> b
& Optic' A_Lens NoIx TxSkel [TxSkelProposal]
txSkelProposalsL
Optic' A_Lens NoIx TxSkel [TxSkelProposal]
-> [TxSkelProposal] -> TxSkel -> TxSkel
forall k (is :: IxList) s t a b.
Is k A_Setter =>
Optic k is s t a b -> b -> s -> t
.~ [TxSkelProposal]
newProposals
TxSkel -> (TxSkel -> TxSkel) -> TxSkel
forall a b. a -> (a -> b) -> b
& Optic'
A_Lens
NoIx
TxSkel
(Map
(Either (Versioned Script) PubKeyHash) (TxSkelRedeemer, Lovelace))
txSkelWithdrawalsL
Optic'
A_Lens
NoIx
TxSkel
(Map
(Either (Versioned Script) PubKeyHash) (TxSkelRedeemer, Lovelace))
-> Map
(Either (Versioned Script) PubKeyHash) (TxSkelRedeemer, Lovelace)
-> TxSkel
-> TxSkel
forall k (is :: IxList) s t a b.
Is k A_Setter =>
Optic k is s t a b -> b -> s -> t
.~ [(Either (Versioned Script) PubKeyHash,
(TxSkelRedeemer, Lovelace))]
-> Map
(Either (Versioned Script) PubKeyHash) (TxSkelRedeemer, Lovelace)
forall k a. Ord k => [(k, a)] -> Map k a
Map.fromList [(Either (Versioned Script) PubKeyHash,
(TxSkelRedeemer, Lovelace))]
newWithdrawals