-- | This module exposes translation functions to transform a 'TxSkel' into a
-- signed transaction
module Cooked.MockChain.GenerateTx
  ( txSignersAndBodyToCardanoTx,
    txSkelToCardanoTx,
  )
where

import Cardano.Api.Shelley qualified as Cardano
import Cooked.MockChain.BlockChain
import Cooked.MockChain.GenerateTx.Body
import Cooked.MockChain.GenerateTx.Witness
import Cooked.Skeleton
import Cooked.Wallet
import Data.Set (Set)
import PlutusLedgerApi.V3 qualified as Api

-- | Generates a Cardano transaction and signs it
txSignersAndBodyToCardanoTx :: [Wallet] -> Cardano.TxBody Cardano.ConwayEra -> Cardano.Tx Cardano.ConwayEra
txSignersAndBodyToCardanoTx :: [Wallet] -> TxBody ConwayEra -> Tx ConwayEra
txSignersAndBodyToCardanoTx [Wallet]
signers TxBody ConwayEra
txBody = TxBody ConwayEra -> [KeyWitness ConwayEra] -> Tx ConwayEra
forall era. TxBody era -> [KeyWitness era] -> Tx era
Cardano.Tx TxBody ConwayEra
txBody (TxBody ConwayEra -> Wallet -> KeyWitness ConwayEra
toKeyWitness TxBody ConwayEra
txBody (Wallet -> KeyWitness ConwayEra)
-> [Wallet] -> [KeyWitness ConwayEra]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Wallet]
signers)

-- | Generates a full Cardano transaction from a skeleton, fees and collaterals
txSkelToCardanoTx :: (MonadBlockChainBalancing m) => TxSkel -> Integer -> Maybe (Set Api.TxOutRef, Wallet) -> m (Cardano.Tx Cardano.ConwayEra)
txSkelToCardanoTx :: forall (m :: * -> *).
MonadBlockChainBalancing m =>
TxSkel
-> Integer -> Maybe (Set TxOutRef, Wallet) -> m (Tx ConwayEra)
txSkelToCardanoTx TxSkel
txSkel Integer
fee Maybe (Set TxOutRef, Wallet)
mCollaterals =
  [Wallet] -> TxBody ConwayEra -> Tx ConwayEra
txSignersAndBodyToCardanoTx (TxSkel -> [Wallet]
txSkelSigners TxSkel
txSkel) (TxBody ConwayEra -> Tx ConwayEra)
-> m (TxBody ConwayEra) -> m (Tx ConwayEra)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> TxSkel
-> Integer -> Maybe (Set TxOutRef, Wallet) -> m (TxBody ConwayEra)
forall (m :: * -> *).
MonadBlockChainBalancing m =>
TxSkel
-> Integer -> Maybe (Set TxOutRef, Wallet) -> m (TxBody ConwayEra)
txSkelToTxBody TxSkel
txSkel Integer
fee Maybe (Set TxOutRef, Wallet)
mCollaterals