Skip to content

Commit

Permalink
Add shelley cli command to convert a script to an address
Browse files Browse the repository at this point in the history
  • Loading branch information
Jimbo4350 committed Aug 11, 2020
1 parent 5f8f897 commit 43bb278
Show file tree
Hide file tree
Showing 4 changed files with 43 additions and 1 deletion.
1 change: 1 addition & 0 deletions cardano-cli/src/Cardano/CLI/Shelley/Commands.hs
Expand Up @@ -76,6 +76,7 @@ data AddressCmd
| AddressKeyHash VerificationKeyFile (Maybe OutputFile)
| AddressBuild VerificationKeyFile (Maybe VerificationKeyFile) NetworkId (Maybe OutputFile)
| AddressBuildMultiSig --TODO
| AddressBuildScript ScriptFile NetworkId (Maybe OutputFile)
| AddressInfo Text (Maybe OutputFile)
deriving (Eq, Show)

Expand Down
18 changes: 18 additions & 0 deletions cardano-cli/src/Cardano/CLI/Shelley/Parsers.hs
Expand Up @@ -126,6 +126,8 @@ pAddressCmd =
(Opt.info pAddressBuild $ Opt.progDesc "Build a Shelley payment address, with optional delegation to a stake address.")
, Opt.command "build-multisig"
(Opt.info pAddressBuildMultiSig $ Opt.progDesc "Build a Shelley payment multi-sig address.")
, Opt.command "build-script"
(Opt.info pAddressBuildScript $ Opt.progDesc "Build a Shelley script address.")
, Opt.command "info"
(Opt.info pAddressInfo $ Opt.progDesc "Print information about an address.")
]
Expand All @@ -150,6 +152,12 @@ pAddressCmd =
pAddressBuildMultiSig :: Parser AddressCmd
pAddressBuildMultiSig = pure AddressBuildMultiSig

pAddressBuildScript :: Parser AddressCmd
pAddressBuildScript = AddressBuildScript
<$> pScript
<*> pNetworkId
<*> pMaybeOutputFile

pAddressInfo :: Parser AddressCmd
pAddressInfo = AddressInfo <$> pAddress <*> pMaybeOutputFile

Expand All @@ -169,6 +177,16 @@ pPaymentVerificationKeyFile =
)
)

pScript :: Parser ScriptFile
pScript =
ScriptFile <$>
( Opt.strOption
( Opt.long "script-file"
<> Opt.metavar "FILE"
<> Opt.help "Filepath of the script."
<> Opt.completer (Opt.bashCompleter "file")
)
)

pStakeAddress :: Parser StakeAddressCmd
pStakeAddress =
Expand Down
21 changes: 20 additions & 1 deletion cardano-cli/src/Cardano/CLI/Shelley/Run/Address.hs
@@ -1,4 +1,5 @@
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}

module Cardano.CLI.Shelley.Run.Address
( ShelleyAddressCmdError
Expand Down Expand Up @@ -44,9 +45,9 @@ runAddressCmd cmd =
AddressKeyHash vkf mOFp -> runAddressKeyHash vkf mOFp
AddressBuild payVk stkVk nw mOutFp -> runAddressBuild payVk stkVk nw mOutFp
AddressBuildMultiSig {} -> runAddressBuildMultiSig
AddressBuildScript sFp nId mOutFp -> runAddressBuildScript sFp nId mOutFp
AddressInfo txt mOFp -> firstExceptT ShelleyAddressCmdAddressInfoError $ runAddressInfo txt mOFp


runAddressKeyGen :: AddressKeyType
-> VerificationKeyFile
-> SigningKeyFile
Expand Down Expand Up @@ -181,3 +182,21 @@ readAddressVerificationKeyFile (VerificationKeyFile vkfile) =
runAddressBuildMultiSig :: ExceptT ShelleyAddressCmdError IO ()
runAddressBuildMultiSig =
liftIO $ putStrLn ("runAddressBuildMultiSig: TODO")

--
-- Script addresses
--

runAddressBuildScript
:: ScriptFile
-> NetworkId
-> Maybe OutputFile
-> ExceptT ShelleyAddressCmdError IO ()
runAddressBuildScript (ScriptFile fp) nId mOutFp = do
script <- firstExceptT ShelleyAddressCmdReadFileError
. newExceptT $ readFileTextEnvelope AsScript fp
let payCred = PaymentCredentialByScript $ scriptHash script
scriptAddr = serialiseAddress $ makeShelleyAddress nId payCred NoStakeAddress
case mOutFp of
Just (OutputFile oFp) -> liftIO $ Text.writeFile oFp scriptAddr
Nothing -> liftIO $ Text.putStrLn scriptAddr
4 changes: 4 additions & 0 deletions cardano-cli/src/Cardano/CLI/Types.hs
Expand Up @@ -10,6 +10,7 @@ module Cardano.CLI.Types
, SigningKeyFile (..)
, SocketPath (..)
, StakePoolVerificationKeyHashOrFile (..)
, ScriptFile (..)
, UpdateProposalFile (..)
, VerificationKeyFile (..)
) where
Expand Down Expand Up @@ -78,3 +79,6 @@ newtype UpdateProposalFile = UpdateProposalFile { unUpdateProposalFile :: FilePa
newtype VerificationKeyFile
= VerificationKeyFile FilePath
deriving (Eq, Show)

newtype ScriptFile = ScriptFile { unScriptFile :: FilePath }
deriving (Eq, Show)

0 comments on commit 43bb278

Please sign in to comment.