Skip to content

Commit 067fed3

Browse files
cblpnewhoggy
authored andcommitted
cardano-cli: Add option --stake-address to some subcommands:
- address build - stake-address build - stake-address registration-certificate - stake-address deregistration-certificate - stake-address delegation-certificate Fix #2723
1 parent 11a7cfa commit 067fed3

File tree

5 files changed

+54
-64
lines changed

5 files changed

+54
-64
lines changed

cardano-api/src/Cardano/Api/Address.hs

+2-1
Original file line numberDiff line numberDiff line change
@@ -719,6 +719,7 @@ fromShelleyStakeReference (Shelley.StakeRefPtr ptr) =
719719
fromShelleyStakeReference Shelley.StakeRefNull =
720720
NoStakeAddress
721721

722-
-- | Get credential from a stake address. This drops the network information.
722+
-- | Get a stake credential from a stake address.
723+
-- This drops the network information.
723724
stakeAddressCredential :: StakeAddress -> StakeCredential
724725
stakeAddressCredential (StakeAddress _ scred) = fromShelleyStakeCredential scred

cardano-cli/src/Cardano/CLI/Shelley/Key.hs

+1
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@ data PaymentVerifier
102102
data StakeVerifier
103103
= StakeVerifierKey (VerificationKeyOrFile StakeKey)
104104
| StakeVerifierScriptFile ScriptFile
105+
| StakeVerifierAddress StakeAddress
105106
deriving (Eq, Show)
106107

107108
-- | Either an unvalidated text representation of a verification key or a path

cardano-cli/src/Cardano/CLI/Shelley/Parsers.hs

+1
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,7 @@ pStakeVerifier =
179179
<|> StakeVerifierScriptFile <$>
180180
pScriptFor "stake-script-file" Nothing
181181
"Filepath of the staking script."
182+
<|> StakeVerifierAddress <$> pStakeAddress
182183

183184
pPaymentVerificationKeyTextOrFile :: Parser VerificationKeyTextOrFile
184185
pPaymentVerificationKeyTextOrFile =

cardano-cli/src/Cardano/CLI/Shelley/Run/Address.hs

+3
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,9 @@ makeStakeAddressRef stakeVerifier = case stakeVerifier of
173173
let stakeCred = StakeCredentialByScript (hashScript script)
174174
return (StakeAddressByValue stakeCred)
175175

176+
StakeVerifierAddress stakeAddr ->
177+
pure $ StakeAddressByValue $ stakeAddressCredential stakeAddr
178+
176179
buildShelleyAddress
177180
:: VerificationKey PaymentKey
178181
-> Maybe StakeVerifier

cardano-cli/src/Cardano/CLI/Shelley/Run/StakeAddress.hs

+47-63
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
{-# LANGUAGE LambdaCase #-}
2+
13
module Cardano.CLI.Shelley.Run.StakeAddress
24
( ShelleyStakeAddressCmdError(ShelleyStakeAddressCmdReadKeyFileError)
35
, renderShelleyStakeAddressCmdError
@@ -89,50 +91,23 @@ runStakeAddressBuild
8991
-> NetworkId
9092
-> Maybe OutputFile
9193
-> ExceptT ShelleyStakeAddressCmdError IO ()
92-
runStakeAddressBuild stakeVerifier network mOutputFp =
93-
case stakeVerifier of
94-
StakeVerifierScriptFile (ScriptFile sFile) -> do
95-
ScriptInAnyLang _ script <- firstExceptT ShelleyStakeAddressCmdReadScriptFileError
96-
$ readFileScriptInAnyLang sFile
97-
let stakeCred = StakeCredentialByScript $ hashScript script
98-
stakeAddr = makeStakeAddress network stakeCred
99-
stakeAddrText = serialiseAddress stakeAddr
100-
101-
case mOutputFp of
102-
Just (OutputFile fpath) -> liftIO $ Text.writeFile fpath stakeAddrText
103-
Nothing -> liftIO $ Text.putStrLn stakeAddrText
104-
105-
StakeVerifierKey stakeVerKeyOrFile -> do
106-
stakeVerKey <- firstExceptT ShelleyStakeAddressCmdReadKeyFileError
107-
. newExceptT
108-
$ readVerificationKeyOrFile AsStakeKey stakeVerKeyOrFile
109-
110-
let stakeCred = StakeCredentialByKey (verificationKeyHash stakeVerKey)
111-
stakeAddr = makeStakeAddress network stakeCred
112-
stakeAddrText = serialiseAddress stakeAddr
113-
114-
case mOutputFp of
115-
Just (OutputFile fpath) -> liftIO $ Text.writeFile fpath stakeAddrText
116-
Nothing -> liftIO $ Text.putStrLn stakeAddrText
94+
runStakeAddressBuild stakeVerifier network mOutputFp = do
95+
stakeAddr <- getStakeAddressFromVerifier network stakeVerifier
96+
let stakeAddrText = serialiseAddress stakeAddr
97+
liftIO $
98+
case mOutputFp of
99+
Just (OutputFile fpath) -> Text.writeFile fpath stakeAddrText
100+
Nothing -> Text.putStrLn stakeAddrText
117101

118102

119103
runStakeCredentialRegistrationCert
120104
:: StakeVerifier
121105
-> OutputFile
122106
-> ExceptT ShelleyStakeAddressCmdError IO ()
123-
runStakeCredentialRegistrationCert stakeVerifier (OutputFile oFp) =
124-
case stakeVerifier of
125-
StakeVerifierScriptFile (ScriptFile sFile) -> do
126-
ScriptInAnyLang _ script <- firstExceptT ShelleyStakeAddressCmdReadScriptFileError
127-
$ readFileScriptInAnyLang sFile
128-
let stakeCred = StakeCredentialByScript $ hashScript script
129-
writeRegistrationCert stakeCred
130-
StakeVerifierKey stakeVerKeyOrFile -> do
131-
stakeVerKey <- firstExceptT ShelleyStakeAddressCmdReadKeyFileError
132-
. newExceptT
133-
$ readVerificationKeyOrFile AsStakeKey stakeVerKeyOrFile
134-
let stakeCred = StakeCredentialByKey (verificationKeyHash stakeVerKey)
135-
writeRegistrationCert stakeCred
107+
runStakeCredentialRegistrationCert stakeVerifier (OutputFile oFp) = do
108+
stakeCred <- getStakeCredentialFromVerifier stakeVerifier
109+
writeRegistrationCert stakeCred
110+
136111
where
137112
writeRegistrationCert
138113
:: StakeCredential
@@ -160,19 +135,9 @@ runStakeCredentialDelegationCert stakeVerifier poolVKeyOrHashOrFile (OutputFile
160135
firstExceptT
161136
ShelleyStakeAddressCmdReadKeyFileError
162137
(newExceptT $ readVerificationKeyOrHashOrFile AsStakePoolKey poolVKeyOrHashOrFile)
138+
stakeCred <- getStakeCredentialFromVerifier stakeVerifier
139+
writeDelegationCert stakeCred poolStakeVKeyHash
163140

164-
case stakeVerifier of
165-
StakeVerifierScriptFile (ScriptFile sFile) -> do
166-
ScriptInAnyLang _ script <- firstExceptT ShelleyStakeAddressCmdReadScriptFileError
167-
$ readFileScriptInAnyLang sFile
168-
let stakeCred = StakeCredentialByScript $ hashScript script
169-
writeDelegationCert stakeCred poolStakeVKeyHash
170-
StakeVerifierKey stakeVerKeyOrFile -> do
171-
stakeVkey <- firstExceptT ShelleyStakeAddressCmdReadKeyFileError
172-
. newExceptT
173-
$ readVerificationKeyOrFile AsStakeKey stakeVerKeyOrFile
174-
let stakeCred = StakeCredentialByKey (verificationKeyHash stakeVkey)
175-
writeDelegationCert stakeCred poolStakeVKeyHash
176141
where
177142
writeDelegationCert
178143
:: StakeCredential
@@ -192,19 +157,10 @@ runStakeCredentialDeRegistrationCert
192157
:: StakeVerifier
193158
-> OutputFile
194159
-> ExceptT ShelleyStakeAddressCmdError IO ()
195-
runStakeCredentialDeRegistrationCert stakeVerifier (OutputFile oFp) =
196-
case stakeVerifier of
197-
StakeVerifierScriptFile (ScriptFile sFile) -> do
198-
ScriptInAnyLang _ script <- firstExceptT ShelleyStakeAddressCmdReadScriptFileError
199-
$ readFileScriptInAnyLang sFile
200-
let stakeCred = StakeCredentialByScript $ hashScript script
201-
writeDeregistrationCert stakeCred
202-
StakeVerifierKey stakeVerKeyOrFile -> do
203-
stakeVkey <- firstExceptT ShelleyStakeAddressCmdReadKeyFileError
204-
. newExceptT
205-
$ readVerificationKeyOrFile AsStakeKey stakeVerKeyOrFile
206-
let stakeCred = StakeCredentialByKey (verificationKeyHash stakeVkey)
207-
writeDeregistrationCert stakeCred
160+
runStakeCredentialDeRegistrationCert stakeVerifier (OutputFile oFp) = do
161+
stakeCred <- getStakeCredentialFromVerifier stakeVerifier
162+
writeDeregistrationCert stakeCred
163+
208164
where
209165
writeDeregistrationCert
210166
:: StakeCredential
@@ -217,3 +173,31 @@ runStakeCredentialDeRegistrationCert stakeVerifier (OutputFile oFp) =
217173

218174
deregCertDesc :: TextEnvelopeDescr
219175
deregCertDesc = "Stake Address Deregistration Certificate"
176+
177+
178+
getStakeCredentialFromVerifier
179+
:: StakeVerifier -> ExceptT ShelleyStakeAddressCmdError IO StakeCredential
180+
getStakeCredentialFromVerifier = \case
181+
StakeVerifierScriptFile (ScriptFile sFile) -> do
182+
ScriptInAnyLang _ script <-
183+
firstExceptT ShelleyStakeAddressCmdReadScriptFileError $
184+
readFileScriptInAnyLang sFile
185+
pure $ StakeCredentialByScript $ hashScript script
186+
187+
StakeVerifierKey stakeVerKeyOrFile -> do
188+
stakeVerKey <-
189+
firstExceptT ShelleyStakeAddressCmdReadKeyFileError
190+
. newExceptT
191+
$ readVerificationKeyOrFile AsStakeKey stakeVerKeyOrFile
192+
pure $ StakeCredentialByKey $ verificationKeyHash stakeVerKey
193+
194+
StakeVerifierAddress stakeAddr -> pure $ stakeAddressCredential stakeAddr
195+
196+
getStakeAddressFromVerifier
197+
:: NetworkId
198+
-> StakeVerifier
199+
-> ExceptT ShelleyStakeAddressCmdError IO StakeAddress
200+
getStakeAddressFromVerifier networkId = \case
201+
StakeVerifierAddress stakeAddr -> pure stakeAddr
202+
stakeVerifier ->
203+
makeStakeAddress networkId <$> getStakeCredentialFromVerifier stakeVerifier

0 commit comments

Comments
 (0)