-- | Constraints for transactions
module Ledger.Tx.Constraints(
    -- $constraints
    TC.TxConstraints(..)
    , TC.TxConstraint(..)
    , TC.ScriptInputConstraint(..)
    , TC.ScriptOutputConstraint(..)
    -- * Defining constraints
    , TC.mustPayToTheScriptWithDatumHash
    , TC.mustPayToTheScriptWithDatumInTx
    , TC.mustPayToTheScriptWithInlineDatum
    , TC.mustPayToTheScriptWithReferenceScript
    , TC.mustPayToAddress
    , TC.mustPayToAddressWithDatumHash
    , TC.mustPayToAddressWithDatumInTx
    , TC.mustPayToAddressWithInlineDatum
    , TC.mustPayToAddressWithReferenceScript
    , TC.mustPayToAddressWithReferenceValidator
    , TC.mustPayToAddressWithReferenceMintingPolicy
    , TC.mustMintCurrency
    , TC.mustMintCurrencyWithRedeemer
    , TC.mustMintValue
    , TC.mustMintValueWithRedeemer
    , TC.mustSpendAtLeast
    , TC.mustSpendPubKeyOutput
    , TC.mustSpendOutputFromTheScript
    , TC.mustSpendOutputFromTheReferencedScript
    , TC.mustSpendScriptOutput
    , TC.mustSpendScriptOutputWithReference
    , TC.mustSpendScriptOutputWithMatchingDatumAndValue
    , TC.mustUseOutputAsCollateral
    , TC.mustReferenceOutput
    , TC.mustValidateInSlotRange
    , TC.mustValidateInTimeRange
    , TC.mustBeSignedBy
    , TC.mustProduceAtLeast
    , TC.mustIncludeDatumInTxWithHash
    , TC.mustIncludeDatumInTx
    , TC.mustSatisfyAnyOf
    -- * Must-pay constraints for specific types of addresses
    , TC.mustPayToPubKey
    , TC.mustPayToPubKeyAddress
    , TC.mustPayToPubKeyWithDatumHash
    , TC.mustPayToPubKeyAddressWithDatumHash
    , TC.mustPayToPubKeyWithDatumInTx
    , TC.mustPayToPubKeyAddressWithDatumInTx
    , TC.mustPayToPubKeyWithInlineDatum
    , TC.mustPayToPubKeyAddressWithInlineDatum
    , TC.mustPayToOtherScriptWithDatumHash
    , TC.mustPayToOtherScriptWithDatumInTx
    , TC.mustPayToOtherScriptWithInlineDatum
    , TC.mustPayToOtherScriptAddressWithDatumHash
    , TC.mustPayToOtherScriptAddressWithDatumInTx
    , TC.mustPayToOtherScriptAddressWithInlineDatum
    -- * Defining off-chain only constraints
    , TC.spendUtxosFromPlutusV1Script
    , TC.spendUtxosFromPlutusV1ScriptFilter
    , TC.spendUtxosFromTheScriptFilter
    , TC.spendUtxosFromTheScript
    , TC.spendUtxosFromTheReferencedScript
    , TC.spendUtxosFromPlutusV2Script
    , TC.spendUtxosFromPlutusV2ScriptFilter
    -- * Queries on constraints
    , TC.modifiesUtxoSet
    , TC.isSatisfiable
    -- * Off-chain transaction generation
    , OC.UnbalancedTx(..)
    , OC.MkTxError(..)
    , OC.mkTx
    , OC.adjustUnbalancedTx
    -- ** Combining multiple typed scripts into one transaction
    , OC.SomeLookupsAndConstraints(..)
    , OC.mkSomeTx
    , OC.mkTxWithParams
    -- ** Lookups
    , OC.ScriptLookups(..)
    , OC.typedValidatorLookups
    , OC.unspentOutputs
    , OC.mintingPolicy
    , OC.plutusV1MintingPolicy
    , OC.plutusV2MintingPolicy
    , OC.otherScript
    , OC.plutusV1OtherScript
    , OC.plutusV2OtherScript
    , OC.otherData
    , OC.paymentPubKey
    , OC.paymentPubKeyHash
    -- * Deprecated
    , TC.mustPayToTheScript
    , TC.mustPayToAddressWithDatum
    , TC.mustPayWithDatumToPubKey
    , TC.mustPayWithDatumToPubKeyAddress
    , TC.mustPayWithDatumInTxToPubKey
    , TC.mustPayWithDatumInTxToPubKeyAddress
    , TC.mustPayWithInlineDatumToPubKey
    , TC.mustPayWithInlineDatumToPubKeyAddress
    , TC.mustPayToOtherScript
    , TC.mustPayToOtherScriptAddress
    , TC.mustValidateIn
    ) where

import Ledger.Tx.Constraints.OffChain qualified as OC
import Ledger.Tx.Constraints.TxConstraints qualified as TC

-- $constraints
-- This module defines 'Ledger.Tx.Constraints.TxConstraints.TxConstraints', a list
-- of constraints on transactions. To construct a value of 'Ledger.Tx.Constraints.TxConstraints.TxConstraints' use
-- the 'Ledger.Tx.Constraints.TxConstraints.mustPayToTheScriptWithDatumHash',
-- 'Ledger.Tx.Constraints.TxConstraints.mustSpendAtLeast', etc functions. Once we have a
-- 'Ledger.Tx.Constraints.TxConstraints.TxConstraints' value it can be used both to generate a transaction that
-- satisfies the constraints (off-chain, using 'Ledger.Tx.Constraints.TxConstraints.OffChain.mkTx') and to check whether
-- a given pending transaction meets the constraints (on-chain, using
-- 'Ledger.Constraints.OnChain.V1.checkScriptContext', 'Ledger.Constraints.OnChain.V2.checkScriptContext').