{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE LambdaCase #-} {-# LANGUAGE OverloadedStrings #-} {-# OPTIONS_HADDOCK hide #-} -- | -- Copyright: 2020 Input Output (Hong Kong) Ltd., 2021-2022 Input Output Global Inc. (IOG), 2023-2025 Intersect -- License: Apache-2.0 module Command.Script ( Cmd (..) , mod , run ) where import Data.Text ( Text ) import Prelude hiding ( mod ) import Options.Applicative ( CommandFields , Mod , command , footerDoc , helper , info , progDesc , subparser ) import Options.Applicative.Help.Pretty ( Doc, annotate, bold, indent, pretty, vsep ) import System.IO.Extra ( progName ) import qualified Command.Script.Hash as Hash import qualified Command.Script.Preimage as Preimage import qualified Command.Script.Validation as Validation data Cmd = Hash Hash.Cmd | Validation Validation.Cmd | Preimage Preimage.Cmd deriving (Show) mod :: (Cmd -> parent) -> Mod CommandFields parent mod liftCmd = command "script" $ info (helper <*> fmap liftCmd parser) $ mempty <> progDesc "About scripts" <> footerDoc (Just $ vsep [ prettyText "Example:" , indent 2 $ annotate bold $ pretty $ "$ "<>progName<>" recovery-phrase generate --size 15 \\" , indent 4 $ annotate bold $ pretty $ "| "<>progName<>" key from-recovery-phrase Shared > root_shared.xsk" , indent 2 $ prettyText "" , indent 2 $ annotate bold $ prettyText "$ cat root_shared.xsk \\" , indent 4 $ annotate bold $ pretty $ "| "<>progName<>" key child 1854H/1815H/0H/0/0 > signingKey1.xsk" , indent 2 $ prettyText "" , indent 2 $ annotate bold $ prettyText "$ cat signingKey1.xsk \\" , indent 4 $ annotate bold $ pretty $ "| "<>progName<>" key public --without-chain-code \\" , indent 4 $ annotate bold $ pretty $ "| "<>progName<>" key hash > verKey1.vkh" , indent 2 $ prettyText "" , indent 2 $ annotate bold $ prettyText "$ cat root_shared.xsk \\" , indent 4 $ annotate bold $ pretty $ "| "<>progName<>" key child 1854H/1815H/0H/0/1 > signingKey2.xsk" , indent 2 $ prettyText "" , indent 2 $ annotate bold $ prettyText "$ cat signingKey2.xsk \\" , indent 4 $ annotate bold $ pretty $ "| "<>progName<>" key public --without-chain-code \\" , indent 4 $ annotate bold $ pretty $ "| "<>progName<>" key hash > verKey2.vkh" , indent 2 $ prettyText "" , indent 2 $ annotate bold $ pretty $ "$ "<>progName<>" script hash \"all [$(cat verKey1.vkh),$(cat verKey2.vkh)]\"" , indent 2 $ prettyText "" , indent 2 $ annotate bold $ pretty $ "$ "<>progName<>" script preimage \"all [addr_shared_vkh1zxt0uvrza94h3hv4jpv0ttddgnwkvdgeyq8jf9w30mcs6y8w3nq, active_from 100, active_until 150]\"" ]) where parser = subparser $ mconcat [ Hash.mod Hash , Validation.mod Validation , Preimage.mod Preimage ] prettyText :: Text -> Doc prettyText = pretty run :: Cmd -> IO () run = \case Hash sub -> Hash.run sub Validation sub -> Validation.run sub Preimage sub -> Preimage.run sub