Skip to content

Commit

Permalink
Merge pull request #5061 from input-output-hk/newhoggy/remove-stake-a…
Browse files Browse the repository at this point in the history
…ddress-option-from-stake-address-build-command

Remove --stake-address option from stake-address build
  • Loading branch information
newhoggy authored Apr 6, 2023
2 parents 8892f98 + 8f0a6e0 commit 56d9a0b
Show file tree
Hide file tree
Showing 5 changed files with 93 additions and 73 deletions.
12 changes: 6 additions & 6 deletions cardano-cli/src/Cardano/CLI/Shelley/Commands.hs
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,8 @@ import Cardano.Api.Shelley

import Data.Text (Text)

import Cardano.CLI.Shelley.Key (PaymentVerifier, StakeVerifier, VerificationKeyOrFile,
VerificationKeyOrHashOrFile, VerificationKeyTextOrFile)
import Cardano.CLI.Shelley.Key (PaymentVerifier, StakeIdentifier, StakeVerifier,
VerificationKeyOrFile, VerificationKeyOrHashOrFile, VerificationKeyTextOrFile)
import Cardano.CLI.Types

import Cardano.Chain.Common (BlockCount)
Expand Down Expand Up @@ -94,7 +94,7 @@ data AddressCmd
| AddressKeyHash VerificationKeyTextOrFile (Maybe OutputFile)
| AddressBuild
PaymentVerifier
(Maybe StakeVerifier)
(Maybe StakeIdentifier)
NetworkId
(Maybe OutputFile)
| AddressInfo Text (Maybe OutputFile)
Expand All @@ -113,12 +113,12 @@ data StakeAddressCmd
= StakeAddressKeyGen VerificationKeyFile SigningKeyFile
| StakeAddressKeyHash (VerificationKeyOrFile StakeKey) (Maybe OutputFile)
| StakeAddressBuild StakeVerifier NetworkId (Maybe OutputFile)
| StakeRegistrationCert StakeVerifier OutputFile
| StakeRegistrationCert StakeIdentifier OutputFile
| StakeCredentialDelegationCert
StakeVerifier
StakeIdentifier
(VerificationKeyOrHashOrFile StakePoolKey)
OutputFile
| StakeCredentialDeRegistrationCert StakeVerifier OutputFile
| StakeCredentialDeRegistrationCert StakeIdentifier OutputFile
deriving Show

renderStakeAddressCmd :: StakeAddressCmd -> Text
Expand Down
7 changes: 6 additions & 1 deletion cardano-cli/src/Cardano/CLI/Shelley/Key.hs
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ module Cardano.CLI.Shelley.Key
, readVerificationKeyOrHashOrTextEnvFile

, PaymentVerifier(..)
, StakeIdentifier(..)
, StakeVerifier(..)

, generateKeyPair
Expand Down Expand Up @@ -102,7 +103,11 @@ data PaymentVerifier
data StakeVerifier
= StakeVerifierKey (VerificationKeyOrFile StakeKey)
| StakeVerifierScriptFile ScriptFile
| StakeVerifierAddress StakeAddress
deriving (Eq, Show)

data StakeIdentifier
= StakeIdentifierVerifier StakeVerifier
| StakeIdentifierAddress StakeAddress
deriving (Eq, Show)

-- | Either an unvalidated text representation of a verification key or a path
Expand Down
53 changes: 31 additions & 22 deletions cardano-cli/src/Cardano/CLI/Shelley/Parsers.hs
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,8 @@ import Cardano.Api.Shelley

import Cardano.Chain.Common (BlockCount (BlockCount))
import Cardano.CLI.Shelley.Commands
import Cardano.CLI.Shelley.Key (PaymentVerifier (..), StakeVerifier (..),
VerificationKeyOrFile (..), VerificationKeyOrHashOrFile (..),
import Cardano.CLI.Shelley.Key (PaymentVerifier (..), StakeIdentifier (..),
StakeVerifier (..), VerificationKeyOrFile (..), VerificationKeyOrHashOrFile (..),
VerificationKeyTextOrFile (..))
import Cardano.CLI.Types

Expand Down Expand Up @@ -158,7 +158,7 @@ pAddressCmd =
pAddressBuild :: Parser AddressCmd
pAddressBuild = AddressBuild
<$> pPaymentVerifier
<*> Opt.optional pStakeVerifier
<*> Opt.optional pStakeIdentifier
<*> pNetworkId
<*> pMaybeOutputFile

Expand All @@ -172,13 +172,17 @@ pPaymentVerifier =
pScriptFor "payment-script-file" Nothing
"Filepath of the payment script."

pStakeIdentifier :: Parser StakeIdentifier
pStakeIdentifier = asum
[ StakeIdentifierVerifier <$> pStakeVerifier
, StakeIdentifierAddress <$> pStakeAddress
]

pStakeVerifier :: Parser StakeVerifier
pStakeVerifier =
StakeVerifierKey <$> pStakeVerificationKeyOrFile
<|> StakeVerifierScriptFile <$>
pScriptFor "stake-script-file" Nothing
"Filepath of the staking script."
<|> StakeVerifierAddress <$> pStakeAddress
pStakeVerifier = asum
[ StakeVerifierKey <$> pStakeVerificationKeyOrFile
, StakeVerifierScriptFile <$> pScriptFor "stake-script-file" Nothing "Filepath of the staking script."
]

pPaymentVerificationKeyTextOrFile :: Parser VerificationKeyTextOrFile
pPaymentVerificationKeyTextOrFile =
Expand Down Expand Up @@ -385,25 +389,30 @@ pStakeAddressCmd =
pStakeAddressKeyHash = StakeAddressKeyHash <$> pStakeVerificationKeyOrFile <*> pMaybeOutputFile

pStakeAddressBuild :: Parser StakeAddressCmd
pStakeAddressBuild = StakeAddressBuild <$> pStakeVerifier
<*> pNetworkId
<*> pMaybeOutputFile
pStakeAddressBuild =
StakeAddressBuild
<$> pStakeVerifier
<*> pNetworkId
<*> pMaybeOutputFile

pStakeAddressRegistrationCert :: Parser StakeAddressCmd
pStakeAddressRegistrationCert = StakeRegistrationCert
<$> pStakeVerifier
<*> pOutputFile
pStakeAddressRegistrationCert =
StakeRegistrationCert
<$> pStakeIdentifier
<*> pOutputFile

pStakeAddressDeregistrationCert :: Parser StakeAddressCmd
pStakeAddressDeregistrationCert = StakeCredentialDeRegistrationCert
<$> pStakeVerifier
<*> pOutputFile
pStakeAddressDeregistrationCert =
StakeCredentialDeRegistrationCert
<$> pStakeIdentifier
<*> pOutputFile

pStakeAddressDelegationCert :: Parser StakeAddressCmd
pStakeAddressDelegationCert = StakeCredentialDelegationCert
<$> pStakeVerifier
<*> pStakePoolVerificationKeyOrHashOrFile
<*> pOutputFile
pStakeAddressDelegationCert =
StakeCredentialDelegationCert
<$> pStakeIdentifier
<*> pStakePoolVerificationKeyOrHashOrFile
<*> pOutputFile

pKeyCmd :: Parser KeyCmd
pKeyCmd =
Expand Down
48 changes: 25 additions & 23 deletions cardano-cli/src/Cardano/CLI/Shelley/Run/Address.hs
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,10 @@ import qualified Data.Text.IO as Text
import Cardano.Api
import Cardano.Api.Shelley

import Cardano.CLI.Shelley.Key (PaymentVerifier (..), StakeVerifier (..),
VerificationKeyTextOrFile, VerificationKeyTextOrFileError (..), generateKeyPair,
readVerificationKeyOrFile, readVerificationKeyTextOrFileAnyOf,
renderVerificationKeyTextOrFileError)
import Cardano.CLI.Shelley.Key (PaymentVerifier (..), StakeIdentifier (..),
StakeVerifier (..), VerificationKeyTextOrFile,
VerificationKeyTextOrFileError (..), generateKeyPair, readVerificationKeyOrFile,
readVerificationKeyTextOrFileAnyOf, renderVerificationKeyTextOrFileError)
import Cardano.CLI.Shelley.Parsers (AddressCmd (..), AddressKeyType (..), OutputFile (..))
import Cardano.CLI.Shelley.Run.Address.Info (ShelleyAddressInfoError, runAddressInfo)
import Cardano.CLI.Shelley.Run.Read
Expand Down Expand Up @@ -114,7 +114,7 @@ runAddressKeyHash vkeyTextOrFile mOutputFp = do


runAddressBuild :: PaymentVerifier
-> Maybe StakeVerifier
-> Maybe StakeIdentifier
-> NetworkId
-> Maybe OutputFile
-> ExceptT ShelleyAddressCmdError IO ()
Expand Down Expand Up @@ -156,29 +156,31 @@ runAddressBuild paymentVerifier mbStakeVerifier nw mOutFp = do
Nothing -> liftIO $ Text.putStr outText

makeStakeAddressRef
:: StakeVerifier
:: StakeIdentifier
-> ExceptT ShelleyAddressCmdError IO StakeAddressReference
makeStakeAddressRef stakeVerifier = case stakeVerifier of
StakeVerifierKey stkVkeyOrFile -> do
stakeVKey <- firstExceptT ShelleyAddressCmdReadKeyFileError $
newExceptT $ readVerificationKeyOrFile AsStakeKey stkVkeyOrFile

return . StakeAddressByValue . StakeCredentialByKey . verificationKeyHash $ stakeVKey

StakeVerifierScriptFile (ScriptFile fp) -> do
ScriptInAnyLang _lang script <-
firstExceptT ShelleyAddressCmdReadScriptFileError $
readFileScriptInAnyLang fp

let stakeCred = StakeCredentialByScript (hashScript script)
return (StakeAddressByValue stakeCred)

StakeVerifierAddress stakeAddr ->
makeStakeAddressRef stakeIdentifier =
case stakeIdentifier of
StakeIdentifierVerifier stakeVerifier ->
case stakeVerifier of
StakeVerifierKey stkVkeyOrFile -> do
stakeVKey <- firstExceptT ShelleyAddressCmdReadKeyFileError $
newExceptT $ readVerificationKeyOrFile AsStakeKey stkVkeyOrFile

return . StakeAddressByValue . StakeCredentialByKey . verificationKeyHash $ stakeVKey

StakeVerifierScriptFile (ScriptFile fp) -> do
ScriptInAnyLang _lang script <-
firstExceptT ShelleyAddressCmdReadScriptFileError $
readFileScriptInAnyLang fp

let stakeCred = StakeCredentialByScript (hashScript script)
return (StakeAddressByValue stakeCred)
StakeIdentifierAddress stakeAddr ->
pure $ StakeAddressByValue $ stakeAddressCredential stakeAddr

buildShelleyAddress
:: VerificationKey PaymentKey
-> Maybe StakeVerifier
-> Maybe StakeIdentifier
-> NetworkId
-> ExceptT ShelleyAddressCmdError IO (Address ShelleyAddr)
buildShelleyAddress vkey mbStakeVerifier nw =
Expand Down
46 changes: 25 additions & 21 deletions cardano-cli/src/Cardano/CLI/Shelley/Run/StakeAddress.hs
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ import qualified Data.Text.IO as Text
import Cardano.Api
import Cardano.Api.Shelley

import Cardano.CLI.Shelley.Key (StakeVerifier (..), VerificationKeyOrFile,
VerificationKeyOrHashOrFile, readVerificationKeyOrFile,
import Cardano.CLI.Shelley.Key (StakeIdentifier (..), StakeVerifier (..),
VerificationKeyOrFile, VerificationKeyOrHashOrFile, readVerificationKeyOrFile,
readVerificationKeyOrHashOrFile)
import Cardano.CLI.Shelley.Parsers
import Cardano.CLI.Shelley.Run.Read
Expand All @@ -43,12 +43,12 @@ runStakeAddressCmd (StakeAddressKeyGen vk sk) = runStakeAddressKeyGenToFile vk s
runStakeAddressCmd (StakeAddressKeyHash vk mOutputFp) = runStakeAddressKeyHash vk mOutputFp
runStakeAddressCmd (StakeAddressBuild stakeVerifier nw mOutputFp) =
runStakeAddressBuild stakeVerifier nw mOutputFp
runStakeAddressCmd (StakeRegistrationCert stakeVerifier outputFp) =
runStakeCredentialRegistrationCert stakeVerifier outputFp
runStakeAddressCmd (StakeCredentialDelegationCert stakeVerifier stkPoolVerKeyHashOrFp outputFp) =
runStakeCredentialDelegationCert stakeVerifier stkPoolVerKeyHashOrFp outputFp
runStakeAddressCmd (StakeCredentialDeRegistrationCert stakeVerifier outputFp) =
runStakeCredentialDeRegistrationCert stakeVerifier outputFp
runStakeAddressCmd (StakeRegistrationCert stakeIdentifier outputFp) =
runStakeCredentialRegistrationCert stakeIdentifier outputFp
runStakeAddressCmd (StakeCredentialDelegationCert stakeIdentifier stkPoolVerKeyHashOrFp outputFp) =
runStakeCredentialDelegationCert stakeIdentifier stkPoolVerKeyHashOrFp outputFp
runStakeAddressCmd (StakeCredentialDeRegistrationCert stakeIdentifier outputFp) =
runStakeCredentialDeRegistrationCert stakeIdentifier outputFp


--
Expand Down Expand Up @@ -101,11 +101,11 @@ runStakeAddressBuild stakeVerifier network mOutputFp = do


runStakeCredentialRegistrationCert
:: StakeVerifier
:: StakeIdentifier
-> OutputFile
-> ExceptT ShelleyStakeAddressCmdError IO ()
runStakeCredentialRegistrationCert stakeVerifier (OutputFile oFp) = do
stakeCred <- getStakeCredentialFromVerifier stakeVerifier
runStakeCredentialRegistrationCert stakeIdentifier (OutputFile oFp) = do
stakeCred <- getStakeCredentialFromIdentifier stakeIdentifier
writeRegistrationCert stakeCred

where
Expand All @@ -123,7 +123,7 @@ runStakeCredentialRegistrationCert stakeVerifier (OutputFile oFp) = do


runStakeCredentialDelegationCert
:: StakeVerifier
:: StakeIdentifier
-- ^ Delegator stake verification key, verification key file or script file.
-> VerificationKeyOrHashOrFile StakePoolKey
-- ^ Delegatee stake pool verification key or verification key file or
Expand All @@ -135,7 +135,7 @@ runStakeCredentialDelegationCert stakeVerifier poolVKeyOrHashOrFile (OutputFile
firstExceptT
ShelleyStakeAddressCmdReadKeyFileError
(newExceptT $ readVerificationKeyOrHashOrFile AsStakePoolKey poolVKeyOrHashOrFile)
stakeCred <- getStakeCredentialFromVerifier stakeVerifier
stakeCred <- getStakeCredentialFromIdentifier stakeVerifier
writeDelegationCert stakeCred poolStakeVKeyHash

where
Expand All @@ -154,11 +154,11 @@ runStakeCredentialDelegationCert stakeVerifier poolVKeyOrHashOrFile (OutputFile


runStakeCredentialDeRegistrationCert
:: StakeVerifier
:: StakeIdentifier
-> OutputFile
-> ExceptT ShelleyStakeAddressCmdError IO ()
runStakeCredentialDeRegistrationCert stakeVerifier (OutputFile oFp) = do
stakeCred <- getStakeCredentialFromVerifier stakeVerifier
stakeCred <- getStakeCredentialFromIdentifier stakeVerifier
writeDeregistrationCert stakeCred

where
Expand All @@ -176,7 +176,8 @@ runStakeCredentialDeRegistrationCert stakeVerifier (OutputFile oFp) = do


getStakeCredentialFromVerifier
:: StakeVerifier -> ExceptT ShelleyStakeAddressCmdError IO StakeCredential
:: StakeVerifier
-> ExceptT ShelleyStakeAddressCmdError IO StakeCredential
getStakeCredentialFromVerifier = \case
StakeVerifierScriptFile (ScriptFile sFile) -> do
ScriptInAnyLang _ script <-
Expand All @@ -191,13 +192,16 @@ getStakeCredentialFromVerifier = \case
$ readVerificationKeyOrFile AsStakeKey stakeVerKeyOrFile
pure $ StakeCredentialByKey $ verificationKeyHash stakeVerKey

StakeVerifierAddress stakeAddr -> pure $ stakeAddressCredential stakeAddr
getStakeCredentialFromIdentifier
:: StakeIdentifier
-> ExceptT ShelleyStakeAddressCmdError IO StakeCredential
getStakeCredentialFromIdentifier = \case
StakeIdentifierAddress stakeAddr -> pure $ stakeAddressCredential stakeAddr
StakeIdentifierVerifier stakeVerifier -> getStakeCredentialFromVerifier stakeVerifier

getStakeAddressFromVerifier
:: NetworkId
-> StakeVerifier
-> ExceptT ShelleyStakeAddressCmdError IO StakeAddress
getStakeAddressFromVerifier networkId = \case
StakeVerifierAddress stakeAddr -> pure stakeAddr
stakeVerifier ->
makeStakeAddress networkId <$> getStakeCredentialFromVerifier stakeVerifier
getStakeAddressFromVerifier networkId stakeVerifier =
makeStakeAddress networkId <$> getStakeCredentialFromVerifier stakeVerifier

0 comments on commit 56d9a0b

Please sign in to comment.