verifyAndApplyTx ::
       ProtocolMagic
    -> TxValidationRules
    -> BlockVersionData
    -> Set Address
    -> EpochIndex
    -> Bool
    -> (TxId, TxAux)
    -> ExceptT ToilVerFailure UtxoM TxUndo
verifyAndApplyTx pm txValRules adoptedBVD lockedAssets curEpoch verifyVersions tx@(_, txAux) = do
    whenLeft (checkTxAux txValRules txAux) (throwError . ToilInconsistentTxAux)
    let ctx = Utxo.VTxContext verifyVersions (makeNetworkMagic pm)
    vtur@VerifyTxUtxoRes {..} <- Utxo.verifyTxUtxo pm ctx lockedAssets txAux
    liftEither $ verifyGState adoptedBVD curEpoch txAux vtur
    lift $ applyTxToUtxo' tx
    pure vturUndo
verifyAndApplyTx ::
       ProtocolMagic
    -> TxValidationRules
    -> BlockVersionData
    -> Set Address
    -> EpochIndex
    -> Bool
    -> (TxId, TxAux)
    -> ExceptT ToilVerFailure UtxoM TxUndo
verifyAndApplyTx pm txValRules adoptedBVD lockedAssets curEpoch verifyVersions tx@(_, txAux) = do
    whenLeft (checkTxAux txValRules txAux) (throwError . ToilInconsistentTxAux)
    let ctx = Utxo.VTxContext verifyVersions (makeNetworkMagic pm)
    vtur@VerifyTxUtxoRes {..} <- Utxo.verifyTxUtxo pm ctx lockedAssets txAux
    liftEither $ verifyGState adoptedBVD curEpoch txAux vtur
    lift $ applyTxToUtxo' tx
    pure vturUndo
verifyAndApplyTx pm txValRules adoptedBVD lockedAssets curEpoch verifyVersions tx@(_, txAux) = do
    whenLeft (checkTxAux txValRules txAux) (throwError . ToilInconsistentTxAux)
    let ctx = Utxo.VTxContext verifyVersions (makeNetworkMagic pm)
    vtur@VerifyTxUtxoRes {..} <- Utxo.verifyTxUtxo pm ctx lockedAssets txAux
    liftEither $ verifyGState adoptedBVD curEpoch txAux vtur
    lift $ applyTxToUtxo' tx
    pure vturUndo