11-- | A module that defines the different transaction data types, balancing
22-- | functionality, transaction fees, signing and submission.
33module Contract.Transaction
4- ( balanceMultipleTxs
4+ ( TxBlueprint
5+ , TxReceipt
6+ , balanceMultipleTxs
57 , balanceTx
68 , balanceTxE
79 , balanceTxs
@@ -18,6 +20,7 @@ module Contract.Transaction
1820 , mkPoolPubKeyHash
1921 , hashTransaction
2022 , buildTx
23+ , submitTxFromBlueprint
2124 , submitTxFromBuildPlan
2225 ) where
2326
@@ -98,8 +101,13 @@ import Contract.UnbalancedTx (mkUnbalancedTx)
98101import Control.Monad.Error.Class (catchError , liftEither , throwError )
99102import Control.Monad.Reader (ReaderT , asks , runReaderT )
100103import Control.Monad.Reader.Class (ask )
101- import Ctl.Internal.BalanceTx (CtlBalancer , CtlBalancerContext , defaultBalancer ) as X
102- import Ctl.Internal.BalanceTx (defaultBalancer )
104+ import Ctl.Internal.BalanceTx
105+ ( CtlBalancer
106+ , CtlBalancerContext
107+ , defaultBalancer
108+ , defaultBalancerErr
109+ ) as X
110+ import Ctl.Internal.BalanceTx (defaultBalancerErr )
103111import Ctl.Internal.Contract.AwaitTxConfirmed
104112 ( awaitTxConfirmed
105113 , awaitTxConfirmedWithTimeout
@@ -273,7 +281,7 @@ balanceTxE
273281 -> BalancerConstraints
274282 -> Contract (Either BalanceTxError.BalanceTxError Transaction )
275283balanceTxE tx utxos constraints =
276- defaultBalancer tx
284+ defaultBalancerErr tx
277285 { balancerConstraints: constraints
278286 , extraUtxos: utxos
279287 }
@@ -389,7 +397,11 @@ createAdditionalUtxos tx = do
389397 foldl (\utxo txOut -> Map .insert (txIn $ length utxo) txOut utxo) Map .empty
390398
391399submitTxFromConstraints
392- :: ScriptLookups
400+ :: Warn
401+ ( Text
402+ " Contract.TxConstraints is deprecated. Use `submitTxFromBlueprint` instead"
403+ )
404+ => ScriptLookups
393405 -> TxConstraints
394406 -> Contract TransactionHash
395407submitTxFromConstraints lookups constraints = do
@@ -399,7 +411,8 @@ submitTxFromConstraints lookups constraints = do
399411 submit balancedSignedTx
400412
401413submitTxFromBuildPlan
402- :: UtxoMap
414+ :: Warn (Text " Deprecated, use `submitTxFromBlueprint` instead" )
415+ => UtxoMap
403416 -> BalancerConstraints
404417 -> Array TransactionBuilderStep
405418 -> Contract Transaction
@@ -410,6 +423,40 @@ submitTxFromBuildPlan usedUtxos balancerConstraints plan = do
410423 void $ submit balancedSignedTx
411424 pure balancedSignedTx
412425
426+ -- | Blueprint containing the steps and context required to construct
427+ -- | and balance a transaction.
428+ type TxBlueprint (ctx :: Type ) =
429+ { buildSteps :: Array TransactionBuilderStep
430+ , balancer :: TxBalancer Contract Error ctx
431+ , balancerCtx :: ctx
432+ }
433+
434+ -- | Represents the result of submitting a transaction via
435+ -- | `submitTxFromBlueprint`, which includes the balanced signed transaction
436+ -- | along with its hash.
437+ type TxReceipt =
438+ { submittedTx :: Transaction
439+ , txHash :: TransactionHash
440+ }
441+
442+ -- | Builds, balances, signs, and submits a transaction defined by the given
443+ -- | `TxBlueprint`. Returns a `TxReceipt` containing the submitted transaction
444+ -- | and its hash.
445+ submitTxFromBlueprint
446+ :: forall (ctx :: Type )
447+ . TxBlueprint ctx
448+ -> Contract TxReceipt
449+ submitTxFromBlueprint blueprint = do
450+ unbalancedTx <- buildTx blueprint.buildSteps
451+ balancedTx <- liftEither =<< blueprint.balancer unbalancedTx
452+ blueprint.balancerCtx
453+ balancedSignedTx <- signTransaction balancedTx
454+ txHash <- submit balancedSignedTx
455+ pure
456+ { submittedTx: balancedSignedTx
457+ , txHash
458+ }
459+
413460lookupTxHash
414461 :: TransactionHash -> UtxoMap -> Array TransactionUnspentOutput
415462lookupTxHash txHash utxos =
0 commit comments