{-# LANGUAGE AllowAmbiguousTypes #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}

-- | Parsers for Dijkstra sub-transactions: the @sub-transaction@
-- command group and the @--signed-sub-tx-file@ option with which a top-level
-- transaction embeds signed sub-transactions.
module Cardano.CLI.EraBased.Transaction.SubTransaction.Option
  ( pSubTransactionCmds
  , pSubTransactionFiles
  )
where

import Cardano.Api
import Cardano.Api.Experimental qualified as Exp

import Cardano.CLI.EraBased.Common.Option
import Cardano.CLI.EraBased.Transaction.SubTransaction.Command
import Cardano.CLI.Option.Flag
import Cardano.CLI.Parser
import Cardano.CLI.Read
import Cardano.CLI.Type.Common
import Cardano.CLI.Type.Key

import Control.Monad (join)
import Data.Foldable (asum)
import Data.Function ((&))
import Options.Applicative (Parser, many, optional, some)
import Options.Applicative qualified as Opt
import Options.Applicative.Help qualified as H
import Prettyprinter (line)

-- | The @sub-transaction@ command group. Sub-transactions exist from Dijkstra
-- onwards, so the group is absent in Conway.
pSubTransactionCmds
  :: forall era. Exp.IsEra era => Maybe (Parser SubTransactionCmds)
pSubTransactionCmds :: forall era. IsEra era => Maybe (Parser SubTransactionCmds)
pSubTransactionCmds =
  case forall era. IsEra era => Era era
Exp.useEra @era of
    Era era
Exp.ConwayEra -> Maybe (Parser SubTransactionCmds)
forall a. Maybe a
Nothing
    Era era
Exp.DijkstraEra ->
      [Char]
-> InfoMod SubTransactionCmds
-> [Maybe (Parser SubTransactionCmds)]
-> Maybe (Parser SubTransactionCmds)
forall a.
[Char] -> InfoMod a -> [Maybe (Parser a)] -> Maybe (Parser a)
subInfoParser
        [Char]
"sub-transaction"
        ( [Char] -> InfoMod SubTransactionCmds
forall a. [Char] -> InfoMod a
Opt.progDesc ([Char] -> InfoMod SubTransactionCmds)
-> [Char] -> InfoMod SubTransactionCmds
forall a b. (a -> b) -> a -> b
$
            [[Char]] -> [Char]
forall a. Monoid a => [a] -> a
mconcat
              [ [Char]
"Sub-transaction commands. A sub-transaction is built and signed on its own, "
              , [Char]
"then embedded in a top-level transaction."
              ]
        )
        [ Parser SubTransactionCmds -> Maybe (Parser SubTransactionCmds)
forall a. a -> Maybe a
Just (Parser SubTransactionCmds -> Maybe (Parser SubTransactionCmds))
-> Parser SubTransactionCmds -> Maybe (Parser SubTransactionCmds)
forall a b. (a -> b) -> a -> b
$
            Mod CommandFields SubTransactionCmds -> Parser SubTransactionCmds
forall a. Mod CommandFields a -> Parser a
Opt.hsubparser (Mod CommandFields SubTransactionCmds -> Parser SubTransactionCmds)
-> Mod CommandFields SubTransactionCmds
-> Parser SubTransactionCmds
forall a b. (a -> b) -> a -> b
$
              [Char]
-> ParserInfo SubTransactionCmds
-> Mod CommandFields SubTransactionCmds
forall a. [Char] -> ParserInfo a -> Mod CommandFields a
commandWithMetavar [Char]
"build-raw" (ParserInfo SubTransactionCmds
 -> Mod CommandFields SubTransactionCmds)
-> ParserInfo SubTransactionCmds
-> Mod CommandFields SubTransactionCmds
forall a b. (a -> b) -> a -> b
$
                Parser SubTransactionCmds
-> InfoMod SubTransactionCmds -> ParserInfo SubTransactionCmds
forall a. Parser a -> InfoMod a -> ParserInfo a
Opt.info Parser SubTransactionCmds
pSubTransactionBuildRaw (InfoMod SubTransactionCmds -> ParserInfo SubTransactionCmds)
-> InfoMod SubTransactionCmds -> ParserInfo SubTransactionCmds
forall a b. (a -> b) -> a -> b
$
                  Maybe Doc -> InfoMod SubTransactionCmds
forall a. Maybe Doc -> InfoMod a
Opt.progDescDoc (Maybe Doc -> InfoMod SubTransactionCmds)
-> Maybe Doc -> InfoMod SubTransactionCmds
forall a b. (a -> b) -> a -> b
$
                    Doc -> Maybe Doc
forall a. a -> Maybe a
Just (Doc -> Maybe Doc) -> Doc -> Maybe Doc
forall a b. (a -> b) -> a -> b
$
                      [Doc] -> Doc
forall a. Monoid a => [a] -> a
mconcat
                        [ forall a ann. Pretty a => a -> Doc ann
pretty @String [Char]
"Build an unsigned sub-transaction (low-level, inconvenient)"
                        , Doc
forall ann. Doc ann
line
                        , Doc
"Canonical output fails if it would change sub-transaction data covered by an existing hash."
                        , Doc
forall ann. Doc ann
line
                        , Doc
forall ann. Doc ann
line
                        , Doc -> Doc
H.yellow (Doc -> Doc) -> Doc -> Doc
forall a b. (a -> b) -> a -> b
$
                            [Doc] -> Doc
forall a. Monoid a => [a] -> a
mconcat
                              [ Doc
"Please note "
                              , Doc -> Doc
H.underline Doc
"the order"
                              , Doc
" of some cmd options is crucial. If used incorrectly may produce "
                              , Doc
"undesired sub-transaction body. See nested [] notation above for details."
                              ]
                        ]
        , Parser SubTransactionCmds -> Maybe (Parser SubTransactionCmds)
forall a. a -> Maybe a
Just (Parser SubTransactionCmds -> Maybe (Parser SubTransactionCmds))
-> Parser SubTransactionCmds -> Maybe (Parser SubTransactionCmds)
forall a b. (a -> b) -> a -> b
$
            Mod CommandFields SubTransactionCmds -> Parser SubTransactionCmds
forall a. Mod CommandFields a -> Parser a
Opt.hsubparser (Mod CommandFields SubTransactionCmds -> Parser SubTransactionCmds)
-> Mod CommandFields SubTransactionCmds
-> Parser SubTransactionCmds
forall a b. (a -> b) -> a -> b
$
              [Char]
-> ParserInfo SubTransactionCmds
-> Mod CommandFields SubTransactionCmds
forall a. [Char] -> ParserInfo a -> Mod CommandFields a
commandWithMetavar [Char]
"sign" (ParserInfo SubTransactionCmds
 -> Mod CommandFields SubTransactionCmds)
-> ParserInfo SubTransactionCmds
-> Mod CommandFields SubTransactionCmds
forall a b. (a -> b) -> a -> b
$
                Parser SubTransactionCmds
-> InfoMod SubTransactionCmds -> ParserInfo SubTransactionCmds
forall a. Parser a -> InfoMod a -> ParserInfo a
Opt.info Parser SubTransactionCmds
pSubTransactionSign (InfoMod SubTransactionCmds -> ParserInfo SubTransactionCmds)
-> InfoMod SubTransactionCmds -> ParserInfo SubTransactionCmds
forall a b. (a -> b) -> a -> b
$
                  [Char] -> InfoMod SubTransactionCmds
forall a. [Char] -> InfoMod a
Opt.progDesc [Char]
"Sign a sub-transaction"
        , Parser SubTransactionCmds -> Maybe (Parser SubTransactionCmds)
forall a. a -> Maybe a
Just (Parser SubTransactionCmds -> Maybe (Parser SubTransactionCmds))
-> Parser SubTransactionCmds -> Maybe (Parser SubTransactionCmds)
forall a b. (a -> b) -> a -> b
$
            Mod CommandFields SubTransactionCmds -> Parser SubTransactionCmds
forall a. Mod CommandFields a -> Parser a
Opt.hsubparser (Mod CommandFields SubTransactionCmds -> Parser SubTransactionCmds)
-> Mod CommandFields SubTransactionCmds
-> Parser SubTransactionCmds
forall a b. (a -> b) -> a -> b
$
              [Char]
-> ParserInfo SubTransactionCmds
-> Mod CommandFields SubTransactionCmds
forall a. [Char] -> ParserInfo a -> Mod CommandFields a
commandWithMetavar [Char]
"txid" (ParserInfo SubTransactionCmds
 -> Mod CommandFields SubTransactionCmds)
-> ParserInfo SubTransactionCmds
-> Mod CommandFields SubTransactionCmds
forall a b. (a -> b) -> a -> b
$
                Parser SubTransactionCmds
-> InfoMod SubTransactionCmds -> ParserInfo SubTransactionCmds
forall a. Parser a -> InfoMod a -> ParserInfo a
Opt.info Parser SubTransactionCmds
pSubTransactionTxId (InfoMod SubTransactionCmds -> ParserInfo SubTransactionCmds)
-> InfoMod SubTransactionCmds -> ParserInfo SubTransactionCmds
forall a b. (a -> b) -> a -> b
$
                  [Char] -> InfoMod SubTransactionCmds
forall a. [Char] -> InfoMod a
Opt.progDesc [Char]
"Print a sub-transaction identifier."
        ]

pSubTransactionBuildRaw :: Parser SubTransactionCmds
pSubTransactionBuildRaw :: Parser SubTransactionCmds
pSubTransactionBuildRaw =
  (SubTransactionBuildRawCmdArgs -> SubTransactionCmds)
-> Parser SubTransactionBuildRawCmdArgs
-> Parser SubTransactionCmds
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap SubTransactionBuildRawCmdArgs -> SubTransactionCmds
SubTransactionBuildRawCmd (Parser SubTransactionBuildRawCmdArgs -> Parser SubTransactionCmds)
-> Parser SubTransactionBuildRawCmdArgs
-> Parser SubTransactionCmds
forall a b. (a -> b) -> a -> b
$
    [(TxIn, Maybe AnySpendScript)]
-> [TxIn]
-> [TxOutAnyEra]
-> Maybe (MultiAsset, [AnyMintScript])
-> Maybe SlotNo
-> Maybe SlotNo
-> [(CertificateFile, Maybe AnyNonAssetScript)]
-> [(StakeAddress, Coin, Maybe AnyNonAssetScript)]
-> TxMetadataJsonSchema
-> [ScriptFile]
-> [MetadataFile]
-> Maybe ProtocolParamsFile
-> [(VoteFile 'In, Maybe AnyNonAssetScript)]
-> [(ProposalFile 'In, Maybe AnyNonAssetScript)]
-> Maybe TxCurrentTreasuryValue
-> Maybe TxTreasuryDonation
-> [Guard]
-> [TopLevelGuard]
-> TxCborFormat
-> UnsignedSubTxFile 'Out
-> SubTransactionBuildRawCmdArgs
SubTransactionBuildRawCmdArgs
      ([(TxIn, Maybe AnySpendScript)]
 -> [TxIn]
 -> [TxOutAnyEra]
 -> Maybe (MultiAsset, [AnyMintScript])
 -> Maybe SlotNo
 -> Maybe SlotNo
 -> [(CertificateFile, Maybe AnyNonAssetScript)]
 -> [(StakeAddress, Coin, Maybe AnyNonAssetScript)]
 -> TxMetadataJsonSchema
 -> [ScriptFile]
 -> [MetadataFile]
 -> Maybe ProtocolParamsFile
 -> [(VoteFile 'In, Maybe AnyNonAssetScript)]
 -> [(ProposalFile 'In, Maybe AnyNonAssetScript)]
 -> Maybe TxCurrentTreasuryValue
 -> Maybe TxTreasuryDonation
 -> [Guard]
 -> [TopLevelGuard]
 -> TxCborFormat
 -> UnsignedSubTxFile 'Out
 -> SubTransactionBuildRawCmdArgs)
-> Parser [(TxIn, Maybe AnySpendScript)]
-> Parser
     ([TxIn]
      -> [TxOutAnyEra]
      -> Maybe (MultiAsset, [AnyMintScript])
      -> Maybe SlotNo
      -> Maybe SlotNo
      -> [(CertificateFile, Maybe AnyNonAssetScript)]
      -> [(StakeAddress, Coin, Maybe AnyNonAssetScript)]
      -> TxMetadataJsonSchema
      -> [ScriptFile]
      -> [MetadataFile]
      -> Maybe ProtocolParamsFile
      -> [(VoteFile 'In, Maybe AnyNonAssetScript)]
      -> [(ProposalFile 'In, Maybe AnyNonAssetScript)]
      -> Maybe TxCurrentTreasuryValue
      -> Maybe TxTreasuryDonation
      -> [Guard]
      -> [TopLevelGuard]
      -> TxCborFormat
      -> UnsignedSubTxFile 'Out
      -> SubTransactionBuildRawCmdArgs)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser (TxIn, Maybe AnySpendScript)
-> Parser [(TxIn, Maybe AnySpendScript)]
forall a. Parser a -> Parser [a]
forall (f :: * -> *) a. Alternative f => f a -> f [a]
some
        ( Parser AnySLanguage
-> [Char]
-> BalanceTxExecUnits
-> Parser (TxIn, Maybe AnySpendScript)
pTxInWithPlutusReferenceLanguage
            (Era DijkstraEra -> [Char] -> Parser AnySLanguage
forall era. Era era -> [Char] -> Parser AnySLanguage
pPlutusV4ReferenceLanguage Era DijkstraEra
Exp.DijkstraEra [Char]
"spending-")
            [Char]
"the spending of the transaction input. Only native scripts or Plutus V4 scripts are supported."
            BalanceTxExecUnits
ManualBalance
        )
      Parser
  ([TxIn]
   -> [TxOutAnyEra]
   -> Maybe (MultiAsset, [AnyMintScript])
   -> Maybe SlotNo
   -> Maybe SlotNo
   -> [(CertificateFile, Maybe AnyNonAssetScript)]
   -> [(StakeAddress, Coin, Maybe AnyNonAssetScript)]
   -> TxMetadataJsonSchema
   -> [ScriptFile]
   -> [MetadataFile]
   -> Maybe ProtocolParamsFile
   -> [(VoteFile 'In, Maybe AnyNonAssetScript)]
   -> [(ProposalFile 'In, Maybe AnyNonAssetScript)]
   -> Maybe TxCurrentTreasuryValue
   -> Maybe TxTreasuryDonation
   -> [Guard]
   -> [TopLevelGuard]
   -> TxCborFormat
   -> UnsignedSubTxFile 'Out
   -> SubTransactionBuildRawCmdArgs)
-> Parser [TxIn]
-> Parser
     ([TxOutAnyEra]
      -> Maybe (MultiAsset, [AnyMintScript])
      -> Maybe SlotNo
      -> Maybe SlotNo
      -> [(CertificateFile, Maybe AnyNonAssetScript)]
      -> [(StakeAddress, Coin, Maybe AnyNonAssetScript)]
      -> TxMetadataJsonSchema
      -> [ScriptFile]
      -> [MetadataFile]
      -> Maybe ProtocolParamsFile
      -> [(VoteFile 'In, Maybe AnyNonAssetScript)]
      -> [(ProposalFile 'In, Maybe AnyNonAssetScript)]
      -> Maybe TxCurrentTreasuryValue
      -> Maybe TxTreasuryDonation
      -> [Guard]
      -> [TopLevelGuard]
      -> TxCborFormat
      -> UnsignedSubTxFile 'Out
      -> SubTransactionBuildRawCmdArgs)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser TxIn -> Parser [TxIn]
forall a. Parser a -> Parser [a]
forall (f :: * -> *) a. Alternative f => f a -> f [a]
many Parser TxIn
pReadOnlyReferenceTxIn
      Parser
  ([TxOutAnyEra]
   -> Maybe (MultiAsset, [AnyMintScript])
   -> Maybe SlotNo
   -> Maybe SlotNo
   -> [(CertificateFile, Maybe AnyNonAssetScript)]
   -> [(StakeAddress, Coin, Maybe AnyNonAssetScript)]
   -> TxMetadataJsonSchema
   -> [ScriptFile]
   -> [MetadataFile]
   -> Maybe ProtocolParamsFile
   -> [(VoteFile 'In, Maybe AnyNonAssetScript)]
   -> [(ProposalFile 'In, Maybe AnyNonAssetScript)]
   -> Maybe TxCurrentTreasuryValue
   -> Maybe TxTreasuryDonation
   -> [Guard]
   -> [TopLevelGuard]
   -> TxCborFormat
   -> UnsignedSubTxFile 'Out
   -> SubTransactionBuildRawCmdArgs)
-> Parser [TxOutAnyEra]
-> Parser
     (Maybe (MultiAsset, [AnyMintScript])
      -> Maybe SlotNo
      -> Maybe SlotNo
      -> [(CertificateFile, Maybe AnyNonAssetScript)]
      -> [(StakeAddress, Coin, Maybe AnyNonAssetScript)]
      -> TxMetadataJsonSchema
      -> [ScriptFile]
      -> [MetadataFile]
      -> Maybe ProtocolParamsFile
      -> [(VoteFile 'In, Maybe AnyNonAssetScript)]
      -> [(ProposalFile 'In, Maybe AnyNonAssetScript)]
      -> Maybe TxCurrentTreasuryValue
      -> Maybe TxTreasuryDonation
      -> [Guard]
      -> [TopLevelGuard]
      -> TxCborFormat
      -> UnsignedSubTxFile 'Out
      -> SubTransactionBuildRawCmdArgs)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser TxOutAnyEra -> Parser [TxOutAnyEra]
forall a. Parser a -> Parser [a]
forall (f :: * -> *) a. Alternative f => f a -> f [a]
many Parser TxOutAnyEra
pTxOut
      Parser
  (Maybe (MultiAsset, [AnyMintScript])
   -> Maybe SlotNo
   -> Maybe SlotNo
   -> [(CertificateFile, Maybe AnyNonAssetScript)]
   -> [(StakeAddress, Coin, Maybe AnyNonAssetScript)]
   -> TxMetadataJsonSchema
   -> [ScriptFile]
   -> [MetadataFile]
   -> Maybe ProtocolParamsFile
   -> [(VoteFile 'In, Maybe AnyNonAssetScript)]
   -> [(ProposalFile 'In, Maybe AnyNonAssetScript)]
   -> Maybe TxCurrentTreasuryValue
   -> Maybe TxTreasuryDonation
   -> [Guard]
   -> [TopLevelGuard]
   -> TxCborFormat
   -> UnsignedSubTxFile 'Out
   -> SubTransactionBuildRawCmdArgs)
-> Parser (Maybe (MultiAsset, [AnyMintScript]))
-> Parser
     (Maybe SlotNo
      -> Maybe SlotNo
      -> [(CertificateFile, Maybe AnyNonAssetScript)]
      -> [(StakeAddress, Coin, Maybe AnyNonAssetScript)]
      -> TxMetadataJsonSchema
      -> [ScriptFile]
      -> [MetadataFile]
      -> Maybe ProtocolParamsFile
      -> [(VoteFile 'In, Maybe AnyNonAssetScript)]
      -> [(ProposalFile 'In, Maybe AnyNonAssetScript)]
      -> Maybe TxCurrentTreasuryValue
      -> Maybe TxTreasuryDonation
      -> [Guard]
      -> [TopLevelGuard]
      -> TxCborFormat
      -> UnsignedSubTxFile 'Out
      -> SubTransactionBuildRawCmdArgs)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ( (Maybe (Maybe (MultiAsset, [AnyMintScript]))
 -> Maybe (MultiAsset, [AnyMintScript]))
-> Parser (Maybe (Maybe (MultiAsset, [AnyMintScript])))
-> Parser (Maybe (MultiAsset, [AnyMintScript]))
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Maybe (Maybe (MultiAsset, [AnyMintScript]))
-> Maybe (MultiAsset, [AnyMintScript])
forall (m :: * -> *) a. Monad m => m (m a) -> m a
join (Parser (Maybe (Maybe (MultiAsset, [AnyMintScript])))
 -> Parser (Maybe (MultiAsset, [AnyMintScript])))
-> (Parser (Maybe (MultiAsset, [AnyMintScript]))
    -> Parser (Maybe (Maybe (MultiAsset, [AnyMintScript]))))
-> Parser (Maybe (MultiAsset, [AnyMintScript]))
-> Parser (Maybe (MultiAsset, [AnyMintScript]))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Parser (Maybe (MultiAsset, [AnyMintScript]))
-> Parser (Maybe (Maybe (MultiAsset, [AnyMintScript])))
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser (Maybe (MultiAsset, [AnyMintScript]))
 -> Parser (Maybe (MultiAsset, [AnyMintScript])))
-> Parser (Maybe (MultiAsset, [AnyMintScript]))
-> Parser (Maybe (MultiAsset, [AnyMintScript]))
forall a b. (a -> b) -> a -> b
$
              forall era.
IsEra era =>
Parser AnySLanguage
-> [Char]
-> BalanceTxExecUnits
-> Parser (Maybe (MultiAsset, [AnyMintScript]))
pMintMultiAssetWithPlutusReferenceLanguage @Exp.DijkstraEra
                (Era DijkstraEra -> [Char] -> Parser AnySLanguage
forall era. Era era -> [Char] -> Parser AnySLanguage
pPlutusV4ReferenceLanguage Era DijkstraEra
Exp.DijkstraEra [Char]
"mint-")
                [Char]
"the minting of assets for a particular policy Id. Only native scripts or Plutus V4 scripts are supported."
                BalanceTxExecUnits
ManualBalance
          )
      Parser
  (Maybe SlotNo
   -> Maybe SlotNo
   -> [(CertificateFile, Maybe AnyNonAssetScript)]
   -> [(StakeAddress, Coin, Maybe AnyNonAssetScript)]
   -> TxMetadataJsonSchema
   -> [ScriptFile]
   -> [MetadataFile]
   -> Maybe ProtocolParamsFile
   -> [(VoteFile 'In, Maybe AnyNonAssetScript)]
   -> [(ProposalFile 'In, Maybe AnyNonAssetScript)]
   -> Maybe TxCurrentTreasuryValue
   -> Maybe TxTreasuryDonation
   -> [Guard]
   -> [TopLevelGuard]
   -> TxCborFormat
   -> UnsignedSubTxFile 'Out
   -> SubTransactionBuildRawCmdArgs)
-> Parser (Maybe SlotNo)
-> Parser
     (Maybe SlotNo
      -> [(CertificateFile, Maybe AnyNonAssetScript)]
      -> [(StakeAddress, Coin, Maybe AnyNonAssetScript)]
      -> TxMetadataJsonSchema
      -> [ScriptFile]
      -> [MetadataFile]
      -> Maybe ProtocolParamsFile
      -> [(VoteFile 'In, Maybe AnyNonAssetScript)]
      -> [(ProposalFile 'In, Maybe AnyNonAssetScript)]
      -> Maybe TxCurrentTreasuryValue
      -> Maybe TxTreasuryDonation
      -> [Guard]
      -> [TopLevelGuard]
      -> TxCborFormat
      -> UnsignedSubTxFile 'Out
      -> SubTransactionBuildRawCmdArgs)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser SlotNo -> Parser (Maybe SlotNo)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional Parser SlotNo
pInvalidBefore
      Parser
  (Maybe SlotNo
   -> [(CertificateFile, Maybe AnyNonAssetScript)]
   -> [(StakeAddress, Coin, Maybe AnyNonAssetScript)]
   -> TxMetadataJsonSchema
   -> [ScriptFile]
   -> [MetadataFile]
   -> Maybe ProtocolParamsFile
   -> [(VoteFile 'In, Maybe AnyNonAssetScript)]
   -> [(ProposalFile 'In, Maybe AnyNonAssetScript)]
   -> Maybe TxCurrentTreasuryValue
   -> Maybe TxTreasuryDonation
   -> [Guard]
   -> [TopLevelGuard]
   -> TxCborFormat
   -> UnsignedSubTxFile 'Out
   -> SubTransactionBuildRawCmdArgs)
-> Parser (Maybe SlotNo)
-> Parser
     ([(CertificateFile, Maybe AnyNonAssetScript)]
      -> [(StakeAddress, Coin, Maybe AnyNonAssetScript)]
      -> TxMetadataJsonSchema
      -> [ScriptFile]
      -> [MetadataFile]
      -> Maybe ProtocolParamsFile
      -> [(VoteFile 'In, Maybe AnyNonAssetScript)]
      -> [(ProposalFile 'In, Maybe AnyNonAssetScript)]
      -> Maybe TxCurrentTreasuryValue
      -> Maybe TxTreasuryDonation
      -> [Guard]
      -> [TopLevelGuard]
      -> TxCborFormat
      -> UnsignedSubTxFile 'Out
      -> SubTransactionBuildRawCmdArgs)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser SlotNo -> Parser (Maybe SlotNo)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional Parser SlotNo
pInvalidHereafterSlot
      Parser
  ([(CertificateFile, Maybe AnyNonAssetScript)]
   -> [(StakeAddress, Coin, Maybe AnyNonAssetScript)]
   -> TxMetadataJsonSchema
   -> [ScriptFile]
   -> [MetadataFile]
   -> Maybe ProtocolParamsFile
   -> [(VoteFile 'In, Maybe AnyNonAssetScript)]
   -> [(ProposalFile 'In, Maybe AnyNonAssetScript)]
   -> Maybe TxCurrentTreasuryValue
   -> Maybe TxTreasuryDonation
   -> [Guard]
   -> [TopLevelGuard]
   -> TxCborFormat
   -> UnsignedSubTxFile 'Out
   -> SubTransactionBuildRawCmdArgs)
-> Parser [(CertificateFile, Maybe AnyNonAssetScript)]
-> Parser
     ([(StakeAddress, Coin, Maybe AnyNonAssetScript)]
      -> TxMetadataJsonSchema
      -> [ScriptFile]
      -> [MetadataFile]
      -> Maybe ProtocolParamsFile
      -> [(VoteFile 'In, Maybe AnyNonAssetScript)]
      -> [(ProposalFile 'In, Maybe AnyNonAssetScript)]
      -> Maybe TxCurrentTreasuryValue
      -> Maybe TxTreasuryDonation
      -> [Guard]
      -> [TopLevelGuard]
      -> TxCborFormat
      -> UnsignedSubTxFile 'Out
      -> SubTransactionBuildRawCmdArgs)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser (CertificateFile, Maybe AnyNonAssetScript)
-> Parser [(CertificateFile, Maybe AnyNonAssetScript)]
forall a. Parser a -> Parser [a]
forall (f :: * -> *) a. Alternative f => f a -> f [a]
many
        ( Parser AnySLanguage
-> [Char]
-> BalanceTxExecUnits
-> Parser (CertificateFile, Maybe AnyNonAssetScript)
pCertificateFileWithPlutusReferenceLanguage
            (Era DijkstraEra -> [Char] -> Parser AnySLanguage
forall era. Era era -> [Char] -> Parser AnySLanguage
pPlutusV4ReferenceLanguage Era DijkstraEra
Exp.DijkstraEra [Char]
"certificate-")
            [Char]
"the use of the certificate. Only native scripts or Plutus V4 scripts are supported."
            BalanceTxExecUnits
ManualBalance
        )
      Parser
  ([(StakeAddress, Coin, Maybe AnyNonAssetScript)]
   -> TxMetadataJsonSchema
   -> [ScriptFile]
   -> [MetadataFile]
   -> Maybe ProtocolParamsFile
   -> [(VoteFile 'In, Maybe AnyNonAssetScript)]
   -> [(ProposalFile 'In, Maybe AnyNonAssetScript)]
   -> Maybe TxCurrentTreasuryValue
   -> Maybe TxTreasuryDonation
   -> [Guard]
   -> [TopLevelGuard]
   -> TxCborFormat
   -> UnsignedSubTxFile 'Out
   -> SubTransactionBuildRawCmdArgs)
-> Parser [(StakeAddress, Coin, Maybe AnyNonAssetScript)]
-> Parser
     (TxMetadataJsonSchema
      -> [ScriptFile]
      -> [MetadataFile]
      -> Maybe ProtocolParamsFile
      -> [(VoteFile 'In, Maybe AnyNonAssetScript)]
      -> [(ProposalFile 'In, Maybe AnyNonAssetScript)]
      -> Maybe TxCurrentTreasuryValue
      -> Maybe TxTreasuryDonation
      -> [Guard]
      -> [TopLevelGuard]
      -> TxCborFormat
      -> UnsignedSubTxFile 'Out
      -> SubTransactionBuildRawCmdArgs)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser (StakeAddress, Coin, Maybe AnyNonAssetScript)
-> Parser [(StakeAddress, Coin, Maybe AnyNonAssetScript)]
forall a. Parser a -> Parser [a]
forall (f :: * -> *) a. Alternative f => f a -> f [a]
many
        ( Parser AnySLanguage
-> [Char]
-> BalanceTxExecUnits
-> Parser (StakeAddress, Coin, Maybe AnyNonAssetScript)
pWithdrawalWithPlutusReferenceLanguage
            (Era DijkstraEra -> [Char] -> Parser AnySLanguage
forall era. Era era -> [Char] -> Parser AnySLanguage
pPlutusV4ReferenceLanguage Era DijkstraEra
Exp.DijkstraEra [Char]
"withdrawal-")
            [Char]
"the withdrawal of rewards. Only native scripts or Plutus V4 scripts are supported."
            BalanceTxExecUnits
ManualBalance
        )
      Parser
  (TxMetadataJsonSchema
   -> [ScriptFile]
   -> [MetadataFile]
   -> Maybe ProtocolParamsFile
   -> [(VoteFile 'In, Maybe AnyNonAssetScript)]
   -> [(ProposalFile 'In, Maybe AnyNonAssetScript)]
   -> Maybe TxCurrentTreasuryValue
   -> Maybe TxTreasuryDonation
   -> [Guard]
   -> [TopLevelGuard]
   -> TxCborFormat
   -> UnsignedSubTxFile 'Out
   -> SubTransactionBuildRawCmdArgs)
-> Parser TxMetadataJsonSchema
-> Parser
     ([ScriptFile]
      -> [MetadataFile]
      -> Maybe ProtocolParamsFile
      -> [(VoteFile 'In, Maybe AnyNonAssetScript)]
      -> [(ProposalFile 'In, Maybe AnyNonAssetScript)]
      -> Maybe TxCurrentTreasuryValue
      -> Maybe TxTreasuryDonation
      -> [Guard]
      -> [TopLevelGuard]
      -> TxCborFormat
      -> UnsignedSubTxFile 'Out
      -> SubTransactionBuildRawCmdArgs)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser TxMetadataJsonSchema
pTxMetadataJsonSchema
      Parser
  ([ScriptFile]
   -> [MetadataFile]
   -> Maybe ProtocolParamsFile
   -> [(VoteFile 'In, Maybe AnyNonAssetScript)]
   -> [(ProposalFile 'In, Maybe AnyNonAssetScript)]
   -> Maybe TxCurrentTreasuryValue
   -> Maybe TxTreasuryDonation
   -> [Guard]
   -> [TopLevelGuard]
   -> TxCborFormat
   -> UnsignedSubTxFile 'Out
   -> SubTransactionBuildRawCmdArgs)
-> Parser [ScriptFile]
-> Parser
     ([MetadataFile]
      -> Maybe ProtocolParamsFile
      -> [(VoteFile 'In, Maybe AnyNonAssetScript)]
      -> [(ProposalFile 'In, Maybe AnyNonAssetScript)]
      -> Maybe TxCurrentTreasuryValue
      -> Maybe TxTreasuryDonation
      -> [Guard]
      -> [TopLevelGuard]
      -> TxCborFormat
      -> UnsignedSubTxFile 'Out
      -> SubTransactionBuildRawCmdArgs)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser ScriptFile -> Parser [ScriptFile]
forall a. Parser a -> Parser [a]
forall (f :: * -> *) a. Alternative f => f a -> f [a]
many ([Char] -> Maybe [Char] -> [Char] -> Parser ScriptFile
pScriptFor [Char]
"auxiliary-script-file" Maybe [Char]
forall a. Maybe a
Nothing [Char]
"Filepath of auxiliary script(s)")
      Parser
  ([MetadataFile]
   -> Maybe ProtocolParamsFile
   -> [(VoteFile 'In, Maybe AnyNonAssetScript)]
   -> [(ProposalFile 'In, Maybe AnyNonAssetScript)]
   -> Maybe TxCurrentTreasuryValue
   -> Maybe TxTreasuryDonation
   -> [Guard]
   -> [TopLevelGuard]
   -> TxCborFormat
   -> UnsignedSubTxFile 'Out
   -> SubTransactionBuildRawCmdArgs)
-> Parser [MetadataFile]
-> Parser
     (Maybe ProtocolParamsFile
      -> [(VoteFile 'In, Maybe AnyNonAssetScript)]
      -> [(ProposalFile 'In, Maybe AnyNonAssetScript)]
      -> Maybe TxCurrentTreasuryValue
      -> Maybe TxTreasuryDonation
      -> [Guard]
      -> [TopLevelGuard]
      -> TxCborFormat
      -> UnsignedSubTxFile 'Out
      -> SubTransactionBuildRawCmdArgs)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser MetadataFile -> Parser [MetadataFile]
forall a. Parser a -> Parser [a]
forall (f :: * -> *) a. Alternative f => f a -> f [a]
many Parser MetadataFile
pMetadataFile
      Parser
  (Maybe ProtocolParamsFile
   -> [(VoteFile 'In, Maybe AnyNonAssetScript)]
   -> [(ProposalFile 'In, Maybe AnyNonAssetScript)]
   -> Maybe TxCurrentTreasuryValue
   -> Maybe TxTreasuryDonation
   -> [Guard]
   -> [TopLevelGuard]
   -> TxCborFormat
   -> UnsignedSubTxFile 'Out
   -> SubTransactionBuildRawCmdArgs)
-> Parser (Maybe ProtocolParamsFile)
-> Parser
     ([(VoteFile 'In, Maybe AnyNonAssetScript)]
      -> [(ProposalFile 'In, Maybe AnyNonAssetScript)]
      -> Maybe TxCurrentTreasuryValue
      -> Maybe TxTreasuryDonation
      -> [Guard]
      -> [TopLevelGuard]
      -> TxCborFormat
      -> UnsignedSubTxFile 'Out
      -> SubTransactionBuildRawCmdArgs)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser ProtocolParamsFile -> Parser (Maybe ProtocolParamsFile)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional Parser ProtocolParamsFile
pProtocolParamsFile
      Parser
  ([(VoteFile 'In, Maybe AnyNonAssetScript)]
   -> [(ProposalFile 'In, Maybe AnyNonAssetScript)]
   -> Maybe TxCurrentTreasuryValue
   -> Maybe TxTreasuryDonation
   -> [Guard]
   -> [TopLevelGuard]
   -> TxCborFormat
   -> UnsignedSubTxFile 'Out
   -> SubTransactionBuildRawCmdArgs)
-> Parser [(VoteFile 'In, Maybe AnyNonAssetScript)]
-> Parser
     ([(ProposalFile 'In, Maybe AnyNonAssetScript)]
      -> Maybe TxCurrentTreasuryValue
      -> Maybe TxTreasuryDonation
      -> [Guard]
      -> [TopLevelGuard]
      -> TxCborFormat
      -> UnsignedSubTxFile 'Out
      -> SubTransactionBuildRawCmdArgs)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser (VoteFile 'In, Maybe AnyNonAssetScript)
-> Parser [(VoteFile 'In, Maybe AnyNonAssetScript)]
forall a. Parser a -> Parser [a]
forall (f :: * -> *) a. Alternative f => f a -> f [a]
many
        ( Parser AnySLanguage
-> [Char]
-> BalanceTxExecUnits
-> Parser (VoteFile 'In, Maybe AnyNonAssetScript)
pVoteFileWithPlutusReferenceLanguage
            (Era DijkstraEra -> [Char] -> Parser AnySLanguage
forall era. Era era -> [Char] -> Parser AnySLanguage
pPlutusV4ReferenceLanguage Era DijkstraEra
Exp.DijkstraEra [Char]
"vote-")
            [Char]
"a vote. Only native scripts or Plutus V4 scripts are supported."
            BalanceTxExecUnits
ManualBalance
        )
      Parser
  ([(ProposalFile 'In, Maybe AnyNonAssetScript)]
   -> Maybe TxCurrentTreasuryValue
   -> Maybe TxTreasuryDonation
   -> [Guard]
   -> [TopLevelGuard]
   -> TxCborFormat
   -> UnsignedSubTxFile 'Out
   -> SubTransactionBuildRawCmdArgs)
-> Parser [(ProposalFile 'In, Maybe AnyNonAssetScript)]
-> Parser
     (Maybe TxCurrentTreasuryValue
      -> Maybe TxTreasuryDonation
      -> [Guard]
      -> [TopLevelGuard]
      -> TxCborFormat
      -> UnsignedSubTxFile 'Out
      -> SubTransactionBuildRawCmdArgs)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser (ProposalFile 'In, Maybe AnyNonAssetScript)
-> Parser [(ProposalFile 'In, Maybe AnyNonAssetScript)]
forall a. Parser a -> Parser [a]
forall (f :: * -> *) a. Alternative f => f a -> f [a]
many
        ( Parser AnySLanguage
-> [Char]
-> BalanceTxExecUnits
-> Parser (ProposalFile 'In, Maybe AnyNonAssetScript)
pProposalFileWithPlutusReferenceLanguage
            (Era DijkstraEra -> [Char] -> Parser AnySLanguage
forall era. Era era -> [Char] -> Parser AnySLanguage
pPlutusV4ReferenceLanguage Era DijkstraEra
Exp.DijkstraEra [Char]
"proposal-")
            [Char]
"a proposal. Only native scripts or Plutus V4 scripts are supported."
            BalanceTxExecUnits
ManualBalance
        )
      Parser
  (Maybe TxCurrentTreasuryValue
   -> Maybe TxTreasuryDonation
   -> [Guard]
   -> [TopLevelGuard]
   -> TxCborFormat
   -> UnsignedSubTxFile 'Out
   -> SubTransactionBuildRawCmdArgs)
-> Parser (Maybe TxCurrentTreasuryValue)
-> Parser
     (Maybe TxTreasuryDonation
      -> [Guard]
      -> [TopLevelGuard]
      -> TxCborFormat
      -> UnsignedSubTxFile 'Out
      -> SubTransactionBuildRawCmdArgs)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser (Maybe TxCurrentTreasuryValue)
pCurrentTreasuryValue
      Parser
  (Maybe TxTreasuryDonation
   -> [Guard]
   -> [TopLevelGuard]
   -> TxCborFormat
   -> UnsignedSubTxFile 'Out
   -> SubTransactionBuildRawCmdArgs)
-> Parser (Maybe TxTreasuryDonation)
-> Parser
     ([Guard]
      -> [TopLevelGuard]
      -> TxCborFormat
      -> UnsignedSubTxFile 'Out
      -> SubTransactionBuildRawCmdArgs)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser (Maybe TxTreasuryDonation)
pTreasuryDonation
      Parser
  ([Guard]
   -> [TopLevelGuard]
   -> TxCborFormat
   -> UnsignedSubTxFile 'Out
   -> SubTransactionBuildRawCmdArgs)
-> Parser [Guard]
-> Parser
     ([TopLevelGuard]
      -> TxCborFormat
      -> UnsignedSubTxFile 'Out
      -> SubTransactionBuildRawCmdArgs)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser Guard -> Parser [Guard]
forall a. Parser a -> Parser [a]
forall (f :: * -> *) a. Alternative f => f a -> f [a]
many Parser Guard
pGuard
      Parser
  ([TopLevelGuard]
   -> TxCborFormat
   -> UnsignedSubTxFile 'Out
   -> SubTransactionBuildRawCmdArgs)
-> Parser [TopLevelGuard]
-> Parser
     (TxCborFormat
      -> UnsignedSubTxFile 'Out -> SubTransactionBuildRawCmdArgs)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser TopLevelGuard -> Parser [TopLevelGuard]
forall a. Parser a -> Parser [a]
forall (f :: * -> *) a. Alternative f => f a -> f [a]
many Parser TopLevelGuard
pTopLevelGuard
      Parser
  (TxCborFormat
   -> UnsignedSubTxFile 'Out -> SubTransactionBuildRawCmdArgs)
-> Parser TxCborFormat
-> Parser (UnsignedSubTxFile 'Out -> SubTransactionBuildRawCmdArgs)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser TxCborFormat
pIsCborOutCanonical
      Parser (UnsignedSubTxFile 'Out -> SubTransactionBuildRawCmdArgs)
-> Parser (UnsignedSubTxFile 'Out)
-> Parser SubTransactionBuildRawCmdArgs
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser (UnsignedSubTxFile 'Out)
pUnsignedSubTxFileOut

pSubTransactionSign :: Parser SubTransactionCmds
pSubTransactionSign :: Parser SubTransactionCmds
pSubTransactionSign =
  (SubTransactionSignCmdArgs -> SubTransactionCmds)
-> Parser SubTransactionSignCmdArgs -> Parser SubTransactionCmds
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap SubTransactionSignCmdArgs -> SubTransactionCmds
SubTransactionSignCmd (Parser SubTransactionSignCmdArgs -> Parser SubTransactionCmds)
-> Parser SubTransactionSignCmdArgs -> Parser SubTransactionCmds
forall a b. (a -> b) -> a -> b
$
    UnsignedSubTxFile 'In
-> [WitnessSigningData]
-> SignedSubTxFile 'Out
-> SubTransactionSignCmdArgs
SubTransactionSignCmdArgs
      (UnsignedSubTxFile 'In
 -> [WitnessSigningData]
 -> SignedSubTxFile 'Out
 -> SubTransactionSignCmdArgs)
-> Parser (UnsignedSubTxFile 'In)
-> Parser
     ([WitnessSigningData]
      -> SignedSubTxFile 'Out -> SubTransactionSignCmdArgs)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser (UnsignedSubTxFile 'In)
pUnsignedSubTxFileIn
      Parser
  ([WitnessSigningData]
   -> SignedSubTxFile 'Out -> SubTransactionSignCmdArgs)
-> Parser [WitnessSigningData]
-> Parser (SignedSubTxFile 'Out -> SubTransactionSignCmdArgs)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser WitnessSigningData -> Parser [WitnessSigningData]
forall a. Parser a -> Parser [a]
forall (f :: * -> *) a. Alternative f => f a -> f [a]
many Parser WitnessSigningData
pSubTransactionSigningData
      Parser (SignedSubTxFile 'Out -> SubTransactionSignCmdArgs)
-> Parser (SignedSubTxFile 'Out)
-> Parser SubTransactionSignCmdArgs
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser (SignedSubTxFile 'Out)
pSignedSubTxFileOut

pSubTransactionTxId :: Parser SubTransactionCmds
pSubTransactionTxId :: Parser SubTransactionCmds
pSubTransactionTxId =
  (SubTransactionTxIdCmdArgs -> SubTransactionCmds)
-> Parser SubTransactionTxIdCmdArgs -> Parser SubTransactionCmds
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap SubTransactionTxIdCmdArgs -> SubTransactionCmds
SubTransactionTxIdCmd (Parser SubTransactionTxIdCmdArgs -> Parser SubTransactionCmds)
-> Parser SubTransactionTxIdCmdArgs -> Parser SubTransactionCmds
forall a b. (a -> b) -> a -> b
$
    InputSubTxFile
-> Vary '[FormatJson, FormatText, FormatYaml]
-> SubTransactionTxIdCmdArgs
SubTransactionTxIdCmdArgs
      (InputSubTxFile
 -> Vary '[FormatJson, FormatText, FormatYaml]
 -> SubTransactionTxIdCmdArgs)
-> Parser InputSubTxFile
-> Parser
     (Vary '[FormatJson, FormatText, FormatYaml]
      -> SubTransactionTxIdCmdArgs)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser InputSubTxFile
pInputSubTxFile
      Parser
  (Vary '[FormatJson, FormatText, FormatYaml]
   -> SubTransactionTxIdCmdArgs)
-> Parser (Vary '[FormatJson, FormatText, FormatYaml])
-> Parser SubTransactionTxIdCmdArgs
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> [Char]
-> [Flag (Vary '[FormatJson, FormatText, FormatYaml])]
-> Parser (Vary '[FormatJson, FormatText, FormatYaml])
forall (fs :: [*]). [Char] -> [Flag (Vary fs)] -> Parser (Vary fs)
pFormatFlags
        [Char]
"output"
        [ Flag (Vary '[FormatJson, FormatText, FormatYaml])
forall (fs :: [*]). (FormatJson :| fs) => Flag (Vary fs)
flagFormatJson Flag (Vary '[FormatJson, FormatText, FormatYaml])
-> (Flag (Vary '[FormatJson, FormatText, FormatYaml])
    -> Flag (Vary '[FormatJson, FormatText, FormatYaml]))
-> Flag (Vary '[FormatJson, FormatText, FormatYaml])
forall a b. a -> (a -> b) -> b
& Flag (Vary '[FormatJson, FormatText, FormatYaml])
-> Flag (Vary '[FormatJson, FormatText, FormatYaml])
forall a. Flag a -> Flag a
setDefault
        , Flag (Vary '[FormatJson, FormatText, FormatYaml])
forall (fs :: [*]). (FormatText :| fs) => Flag (Vary fs)
flagFormatText
        , Flag (Vary '[FormatJson, FormatText, FormatYaml])
forall (fs :: [*]). (FormatYaml :| fs) => Flag (Vary fs)
flagFormatYaml
        ]

-- Leaf parsers

-- | A credential that the enclosing top-level transaction must include as a guard
-- when it embeds this sub-transaction. File inputs allow datum requirements to
-- be checked when reading the script; hashes leave that check to the ledger.
pTopLevelGuard :: Parser TopLevelGuard
pTopLevelGuard :: Parser TopLevelGuard
pTopLevelGuard =
  [Parser TopLevelGuard] -> Parser TopLevelGuard
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
    [ VerificationKeyOrHashOrFile PaymentKey -> TopLevelGuard
TopLevelKeyGuard (VerificationKeyOrHashOrFile PaymentKey -> TopLevelGuard)
-> Parser (VerificationKeyOrHashOrFile PaymentKey)
-> Parser TopLevelGuard
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Char] -> [Char] -> Parser (VerificationKeyOrHashOrFile PaymentKey)
pGuardKey [Char]
"top-level-guard" [Char]
"enclosing transaction"
    , GuardScript -> Maybe ScriptDataOrFile -> TopLevelGuard
TopLevelScriptGuard (GuardScript -> Maybe ScriptDataOrFile -> TopLevelGuard)
-> Parser GuardScript
-> Parser (Maybe ScriptDataOrFile -> TopLevelGuard)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser GuardScript
pTopLevelGuardScript Parser (Maybe ScriptDataOrFile -> TopLevelGuard)
-> Parser (Maybe ScriptDataOrFile) -> Parser TopLevelGuard
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser ScriptDataOrFile -> Parser (Maybe ScriptDataOrFile)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional Parser ScriptDataOrFile
pTopLevelGuardDatum
    ]

pTopLevelGuardScript :: Parser GuardScript
pTopLevelGuardScript :: Parser GuardScript
pTopLevelGuardScript =
  [Parser GuardScript] -> Parser GuardScript
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
    [ ScriptHash -> GuardScript
GuardScriptHash
        (ScriptHash -> GuardScript)
-> Parser ScriptHash -> Parser GuardScript
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Char] -> [Char] -> Parser ScriptHash
pScriptHash
          [Char]
"top-level-guard-script-hash"
          [Char]
"Hash of a script required as a guard in the enclosing transaction (hex-encoded). Supply its witness in the enclosing transaction."
    , ScriptFile -> GuardScript
GuardScriptFile
        (ScriptFile -> GuardScript)
-> Parser ScriptFile -> Parser GuardScript
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Char] -> Maybe [Char] -> [Char] -> Parser ScriptFile
pScriptFor
          [Char]
"top-level-guard-script-file"
          Maybe [Char]
forall a. Maybe a
Nothing
          [Char]
"Script file whose hash is required as a guard in the enclosing transaction; no witness is added here. Plutus scripts must be V4 and require a datum; native scripts must not have one."
    ]

pTopLevelGuardDatum :: Parser ScriptDataOrFile
pTopLevelGuardDatum :: Parser ScriptDataOrFile
pTopLevelGuardDatum =
  [Char] -> [Char] -> [Char] -> Parser ScriptDataOrFile
pScriptDataOrFile
    [Char]
"top-level-guard-datum"
    [Char]
"Datum for the preceding script guard. Required only for Plutus scripts; must be omitted for key and native-script guards."
    [Char]
"Datum file for the preceding script guard. Required only for Plutus scripts; must be omitted for key and native-script guards."

-- | A guard credential: the sub-transaction requires this key's signature or
-- this script's approval. Guards replace required signers in Dijkstra.
pGuard :: Parser Guard
pGuard :: Parser Guard
pGuard =
  [Parser Guard] -> Parser Guard
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
    [ VerificationKeyOrHashOrFile PaymentKey -> Guard
KeyGuard (VerificationKeyOrHashOrFile PaymentKey -> Guard)
-> Parser (VerificationKeyOrHashOrFile PaymentKey) -> Parser Guard
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Char] -> [Char] -> Parser (VerificationKeyOrHashOrFile PaymentKey)
pGuardKey [Char]
"guard" [Char]
"sub-transaction"
    , GuardScript -> Maybe (ScriptDataOrFile, ExecutionUnits) -> Guard
ScriptGuard (GuardScript -> Maybe (ScriptDataOrFile, ExecutionUnits) -> Guard)
-> Parser GuardScript
-> Parser (Maybe (ScriptDataOrFile, ExecutionUnits) -> Guard)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser GuardScript
pGuardScript Parser (Maybe (ScriptDataOrFile, ExecutionUnits) -> Guard)
-> Parser (Maybe (ScriptDataOrFile, ExecutionUnits))
-> Parser Guard
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser (ScriptDataOrFile, ExecutionUnits)
-> Parser (Maybe (ScriptDataOrFile, ExecutionUnits))
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional Parser (ScriptDataOrFile, ExecutionUnits)
pGuardRedeemer
    ]

pGuardScript :: Parser GuardScript
pGuardScript :: Parser GuardScript
pGuardScript =
  [Parser GuardScript] -> Parser GuardScript
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
    [ ScriptHash -> GuardScript
GuardScriptHash
        (ScriptHash -> GuardScript)
-> Parser ScriptHash -> Parser GuardScript
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Char] -> [Char] -> Parser ScriptHash
pScriptHash
          [Char]
"guard-script-hash"
          [Char]
"Hash of a native or Plutus V4 guard script (hex-encoded). Supply the script through another witness or a reference input. When supplying only a hash, you must provide --guard-redeemer-* and --guard-execution-units if the script is Plutus; the CLI cannot determine the script type from its hash."
    , ScriptFile -> GuardScript
GuardScriptFile
        (ScriptFile -> GuardScript)
-> Parser ScriptFile -> Parser GuardScript
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Char] -> Maybe [Char] -> [Char] -> Parser ScriptFile
pScriptFor
          [Char]
"guard-script-file"
          Maybe [Char]
forall a. Maybe a
Nothing
          [Char]
"Filepath of a native or Plutus V4 script whose approval the sub-transaction requires. Plutus scripts require --guard-redeemer-* and --guard-execution-units; native scripts accept neither."
    ]

pGuardRedeemer :: Parser (ScriptDataOrFile, ExecutionUnits)
pGuardRedeemer :: Parser (ScriptDataOrFile, ExecutionUnits)
pGuardRedeemer =
  (,)
    (ScriptDataOrFile
 -> ExecutionUnits -> (ScriptDataOrFile, ExecutionUnits))
-> Parser ScriptDataOrFile
-> Parser (ExecutionUnits -> (ScriptDataOrFile, ExecutionUnits))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Char] -> [Char] -> [Char] -> Parser ScriptDataOrFile
pScriptDataOrFile
      [Char]
"guard-redeemer"
      [Char]
"Redeemer for the preceding script guard. Required only for Plutus V4 scripts, together with --guard-execution-units."
      [Char]
"Redeemer file for the preceding script guard. Required only for Plutus V4 scripts, together with --guard-execution-units."
    Parser (ExecutionUnits -> (ScriptDataOrFile, ExecutionUnits))
-> Parser ExecutionUnits
-> Parser (ScriptDataOrFile, ExecutionUnits)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> [Char] -> Parser ExecutionUnits
pExecutionUnits [Char]
"guard"

-- | Share key forms while keeping the required transaction explicit in help.
pGuardKey :: String -> String -> Parser (VerificationKeyOrHashOrFile PaymentKey)
pGuardKey :: [Char] -> [Char] -> Parser (VerificationKeyOrHashOrFile PaymentKey)
pGuardKey [Char]
prefix [Char]
transaction =
  [Parser (VerificationKeyOrHashOrFile PaymentKey)]
-> Parser (VerificationKeyOrHashOrFile PaymentKey)
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
    [ VerificationKeyOrFile PaymentKey
-> VerificationKeyOrHashOrFile PaymentKey
forall keyrole.
VerificationKeyOrFile keyrole
-> VerificationKeyOrHashOrFile keyrole
VerificationKeyOrFile (VerificationKeyOrFile PaymentKey
 -> VerificationKeyOrHashOrFile PaymentKey)
-> (VerificationKey PaymentKey -> VerificationKeyOrFile PaymentKey)
-> VerificationKey PaymentKey
-> VerificationKeyOrHashOrFile PaymentKey
forall b c a. (b -> c) -> (a -> b) -> a -> c
. VerificationKey PaymentKey -> VerificationKeyOrFile PaymentKey
forall keyrole.
VerificationKey keyrole -> VerificationKeyOrFile keyrole
VerificationKeyValue (VerificationKey PaymentKey
 -> VerificationKeyOrHashOrFile PaymentKey)
-> Parser (VerificationKey PaymentKey)
-> Parser (VerificationKeyOrHashOrFile PaymentKey)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser (VerificationKey PaymentKey)
key
    , VerificationKeyOrFile PaymentKey
-> VerificationKeyOrHashOrFile PaymentKey
forall keyrole.
VerificationKeyOrFile keyrole
-> VerificationKeyOrHashOrFile keyrole
VerificationKeyOrFile (VerificationKeyOrFile PaymentKey
 -> VerificationKeyOrHashOrFile PaymentKey)
-> (File (VerificationKey ()) 'In
    -> VerificationKeyOrFile PaymentKey)
-> File (VerificationKey ()) 'In
-> VerificationKeyOrHashOrFile PaymentKey
forall b c a. (b -> c) -> (a -> b) -> a -> c
. File (VerificationKey ()) 'In -> VerificationKeyOrFile PaymentKey
forall keyrole.
File (VerificationKey ()) 'In -> VerificationKeyOrFile keyrole
VerificationKeyFilePath (File (VerificationKey ()) 'In
 -> VerificationKeyOrHashOrFile PaymentKey)
-> Parser (File (VerificationKey ()) 'In)
-> Parser (VerificationKeyOrHashOrFile PaymentKey)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser (File (VerificationKey ()) 'In)
keyFile
    , Hash PaymentKey -> VerificationKeyOrHashOrFile PaymentKey
forall keyrole. Hash keyrole -> VerificationKeyOrHashOrFile keyrole
VerificationKeyHash (Hash PaymentKey -> VerificationKeyOrHashOrFile PaymentKey)
-> Parser (Hash PaymentKey)
-> Parser (VerificationKeyOrHashOrFile PaymentKey)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser (Hash PaymentKey)
keyHash
    ]
 where
  otherRoles :: [Char]
otherRoles =
    [Char]
" For other signing-key roles, hash the verification key first and use --" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
prefix [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
"-key-hash."
  key :: Parser (VerificationKey PaymentKey)
key =
    ReadM (VerificationKey PaymentKey)
-> Mod OptionFields (VerificationKey PaymentKey)
-> Parser (VerificationKey PaymentKey)
forall a. ReadM a -> Mod OptionFields a -> Parser a
Opt.option (Maybe [Char] -> ReadM (VerificationKey PaymentKey)
forall a.
SerialiseAsRawBytes (VerificationKey a) =>
Maybe [Char] -> ReadM (VerificationKey a)
rVerificationKey (Maybe [Char] -> ReadM (VerificationKey PaymentKey))
-> Maybe [Char] -> ReadM (VerificationKey PaymentKey)
forall a b. (a -> b) -> a -> b
$ [Char] -> Maybe [Char]
forall a. a -> Maybe a
Just [Char]
"Invalid guard verification key") (Mod OptionFields (VerificationKey PaymentKey)
 -> Parser (VerificationKey PaymentKey))
-> Mod OptionFields (VerificationKey PaymentKey)
-> Parser (VerificationKey PaymentKey)
forall a b. (a -> b) -> a -> b
$
      [Mod OptionFields (VerificationKey PaymentKey)]
-> Mod OptionFields (VerificationKey PaymentKey)
forall a. Monoid a => [a] -> a
mconcat
        [ [Char] -> Mod OptionFields (VerificationKey PaymentKey)
forall (f :: * -> *) a. HasName f => [Char] -> Mod f a
Opt.long ([Char]
prefix [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
"-verification-key")
        , [Char] -> Mod OptionFields (VerificationKey PaymentKey)
forall (f :: * -> *) a. HasMetavar f => [Char] -> Mod f a
Opt.metavar [Char]
"STRING"
        , [Char] -> Mod OptionFields (VerificationKey PaymentKey)
forall (f :: * -> *) a. [Char] -> Mod f a
Opt.help ([Char] -> Mod OptionFields (VerificationKey PaymentKey))
-> [Char] -> Mod OptionFields (VerificationKey PaymentKey)
forall a b. (a -> b) -> a -> b
$
            [Char]
"Payment verification key whose signature the "
              [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
transaction
              [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
" requires (hex-encoded)."
              [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
otherRoles
        ]
  keyFile :: Parser (File (VerificationKey ()) 'In)
keyFile =
    [Char] -> File (VerificationKey ()) 'In
forall content (direction :: FileDirection).
[Char] -> File content direction
File
      ([Char] -> File (VerificationKey ()) 'In)
-> Parser [Char] -> Parser (File (VerificationKey ()) 'In)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Char] -> [Char] -> Parser [Char]
parseFilePath
        ([Char]
prefix [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
"-verification-key-file")
        ( [Char]
"Filepath of a payment verification key whose signature the "
            [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
transaction
            [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
" requires."
            [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
otherRoles
        )
  keyHash :: Parser (Hash PaymentKey)
keyHash =
    ReadM (Hash PaymentKey)
-> Mod OptionFields (Hash PaymentKey) -> Parser (Hash PaymentKey)
forall a. ReadM a -> Mod OptionFields a -> Parser a
Opt.option (Parser (Hash PaymentKey) -> ReadM (Hash PaymentKey)
forall a. Parser a -> ReadM a
readerFromParsecParser Parser (Hash PaymentKey)
forall a. SerialiseAsRawBytes (Hash a) => Parser (Hash a)
parseHexHash) (Mod OptionFields (Hash PaymentKey) -> Parser (Hash PaymentKey))
-> Mod OptionFields (Hash PaymentKey) -> Parser (Hash PaymentKey)
forall a b. (a -> b) -> a -> b
$
      [Mod OptionFields (Hash PaymentKey)]
-> Mod OptionFields (Hash PaymentKey)
forall a. Monoid a => [a] -> a
mconcat
        [ [Char] -> Mod OptionFields (Hash PaymentKey)
forall (f :: * -> *) a. HasName f => [Char] -> Mod f a
Opt.long ([Char]
prefix [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
"-key-hash")
        , [Char] -> Mod OptionFields (Hash PaymentKey)
forall (f :: * -> *) a. HasMetavar f => [Char] -> Mod f a
Opt.metavar [Char]
"HASH"
        , [Char] -> Mod OptionFields (Hash PaymentKey)
forall (f :: * -> *) a. [Char] -> Mod f a
Opt.help ([Char] -> Mod OptionFields (Hash PaymentKey))
-> [Char] -> Mod OptionFields (Hash PaymentKey)
forall a b. (a -> b) -> a -> b
$
            [Char]
"Hash of a verification key whose signature the "
              [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
transaction
              [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
" requires (hex-encoded). Accepts hashes from any Shelley signing-key role, including stake, DRep and committee keys."
        ]

-- | Like 'pInvalidHereafter' without the deprecated aliases and without the
-- era-indexed wrapper; sub-transactions carry a plain slot.
pInvalidHereafterSlot :: Parser SlotNo
pInvalidHereafterSlot :: Parser SlotNo
pInvalidHereafterSlot =
  (Word64 -> SlotNo) -> Parser Word64 -> Parser SlotNo
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Word64 -> SlotNo
SlotNo (Parser Word64 -> Parser SlotNo) -> Parser Word64 -> Parser SlotNo
forall a b. (a -> b) -> a -> b
$
    ReadM Word64 -> Mod OptionFields Word64 -> Parser Word64
forall a. ReadM a -> Mod OptionFields a -> Parser a
Opt.option ([Char] -> ReadM Word64
forall a. (Bounded a, Integral a, Show a) => [Char] -> ReadM a
bounded [Char]
"SLOT") (Mod OptionFields Word64 -> Parser Word64)
-> Mod OptionFields Word64 -> Parser Word64
forall a b. (a -> b) -> a -> b
$
      [Mod OptionFields Word64] -> Mod OptionFields Word64
forall a. Monoid a => [a] -> a
mconcat
        [ [Char] -> Mod OptionFields Word64
forall (f :: * -> *) a. HasName f => [Char] -> Mod f a
Opt.long [Char]
"invalid-hereafter"
        , [Char] -> Mod OptionFields Word64
forall (f :: * -> *) a. HasMetavar f => [Char] -> Mod f a
Opt.metavar [Char]
"SLOT"
        , [Char] -> Mod OptionFields Word64
forall (f :: * -> *) a. [Char] -> Mod f a
Opt.help [Char]
"Time that transaction is valid until (in slots)."
        ]

pUnsignedSubTxFileOut :: Parser (UnsignedSubTxFile Out)
pUnsignedSubTxFileOut :: Parser (UnsignedSubTxFile 'Out)
pUnsignedSubTxFileOut =
  [Char] -> UnsignedSubTxFile 'Out
forall content (direction :: FileDirection).
[Char] -> File content direction
File ([Char] -> UnsignedSubTxFile 'Out)
-> Parser [Char] -> Parser (UnsignedSubTxFile 'Out)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Char] -> [Char] -> Parser [Char]
parseFilePath [Char]
"out-file" [Char]
"Output filepath of the JSON unsigned sub-transaction."

pSignedSubTxFileOut :: Parser (SignedSubTxFile Out)
pSignedSubTxFileOut :: Parser (SignedSubTxFile 'Out)
pSignedSubTxFileOut =
  [Char] -> SignedSubTxFile 'Out
forall content (direction :: FileDirection).
[Char] -> File content direction
File ([Char] -> SignedSubTxFile 'Out)
-> Parser [Char] -> Parser (SignedSubTxFile 'Out)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Char] -> [Char] -> Parser [Char]
parseFilePath [Char]
"out-file" [Char]
"Output filepath of the JSON signed sub-transaction."

pUnsignedSubTxFileIn :: Parser (UnsignedSubTxFile In)
pUnsignedSubTxFileIn :: Parser (UnsignedSubTxFile 'In)
pUnsignedSubTxFileIn =
  [Char] -> UnsignedSubTxFile 'In
forall content (direction :: FileDirection).
[Char] -> File content direction
File ([Char] -> UnsignedSubTxFile 'In)
-> Parser [Char] -> Parser (UnsignedSubTxFile 'In)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Char] -> [Char] -> Parser [Char]
parseFilePath [Char]
"sub-tx-file" [Char]
"Input filepath of the JSON unsigned sub-transaction."

pSignedSubTxFileIn :: Parser (SignedSubTxFile In)
pSignedSubTxFileIn :: Parser (SignedSubTxFile 'In)
pSignedSubTxFileIn =
  [Char] -> SignedSubTxFile 'In
forall content (direction :: FileDirection).
[Char] -> File content direction
File ([Char] -> SignedSubTxFile 'In)
-> Parser [Char] -> Parser (SignedSubTxFile 'In)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Char] -> [Char] -> Parser [Char]
parseFilePath [Char]
"signed-sub-tx-file" [Char]
"Input filepath of the JSON signed sub-transaction."

-- | Sub-transactions use Shelley witnesses, so no Byron address is accepted.
-- The signing-key file's type is checked when it is read.
pSubTransactionSigningData :: Parser WitnessSigningData
pSubTransactionSigningData :: Parser WitnessSigningData
pSubTransactionSigningData =
  (SigningKeyFile 'In
-> Maybe (Address ByronAddr) -> WitnessSigningData
`KeyWitnessSigningData` Maybe (Address ByronAddr)
forall a. Maybe a
Nothing) (SigningKeyFile 'In -> WitnessSigningData)
-> Parser (SigningKeyFile 'In) -> Parser WitnessSigningData
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser (SigningKeyFile 'In)
pSigningKeyFileIn

pInputSubTxFile :: Parser InputSubTxFile
pInputSubTxFile :: Parser InputSubTxFile
pInputSubTxFile =
  [Parser InputSubTxFile] -> Parser InputSubTxFile
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
    [ UnsignedSubTxFile 'In -> InputSubTxFile
InputUnsignedSubTxFile (UnsignedSubTxFile 'In -> InputSubTxFile)
-> Parser (UnsignedSubTxFile 'In) -> Parser InputSubTxFile
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser (UnsignedSubTxFile 'In)
pUnsignedSubTxFileIn
    , SignedSubTxFile 'In -> InputSubTxFile
InputSignedSubTxFile (SignedSubTxFile 'In -> InputSubTxFile)
-> Parser (SignedSubTxFile 'In) -> Parser InputSubTxFile
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser (SignedSubTxFile 'In)
pSignedSubTxFileIn
    ]

-- | Signed sub-transactions to embed in a top-level transaction. Only Dijkstra
-- has sub-transactions, so the option does not exist in Conway.
pSubTransactionFiles :: forall era. Exp.IsEra era => Parser [SignedSubTxFile In]
pSubTransactionFiles :: forall era. IsEra era => Parser [SignedSubTxFile 'In]
pSubTransactionFiles = case forall era. IsEra era => Era era
Exp.useEra @era of
  Era era
Exp.ConwayEra -> [SignedSubTxFile 'In] -> Parser [SignedSubTxFile 'In]
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure []
  Era era
Exp.DijkstraEra ->
    Parser (SignedSubTxFile 'In) -> Parser [SignedSubTxFile 'In]
forall a. Parser a -> Parser [a]
forall (f :: * -> *) a. Alternative f => f a -> f [a]
many (Parser (SignedSubTxFile 'In) -> Parser [SignedSubTxFile 'In])
-> Parser (SignedSubTxFile 'In) -> Parser [SignedSubTxFile 'In]
forall a b. (a -> b) -> a -> b
$
      [Char] -> SignedSubTxFile 'In
forall content (direction :: FileDirection).
[Char] -> File content direction
File
        ([Char] -> SignedSubTxFile 'In)
-> Parser [Char] -> Parser (SignedSubTxFile 'In)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Char] -> [Char] -> Parser [Char]
parseFilePath
          [Char]
"signed-sub-tx-file"
          [Char]
"Filepath of a signed sub-transaction to embed in this transaction (zero or more)."