Skip to content

Commit 93262ff

Browse files
committed
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 d068da8 commit 93262ff

File tree

5 files changed

+66
-65
lines changed

5 files changed

+66
-65
lines changed

Diff for: cardano-cli/cardano-cli.cabal

-1
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,6 @@ library
136136
, prettyprinter
137137
, cardano-ledger-shelley
138138
, set-algebra
139-
, small-steps
140139
, split
141140
, strict-containers
142141
, text

Diff for: cardano-cli/src/Cardano/CLI/Shelley/Key.hs

+1
Original file line numberDiff line numberDiff line change
@@ -392,6 +392,7 @@ data PaymentVerifier
392392
data StakeVerifier
393393
= StakeVerifierKey (VerificationKeyOrFile StakeKey)
394394
| StakeVerifierScriptFile ScriptFile
395+
| StakeVerifierAddress StakeAddress
395396
deriving (Eq, Show)
396397

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

Diff for: cardano-cli/src/Cardano/CLI/Shelley/Parsers.hs

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

182183
pPaymentVerificationKeyTextOrFile :: Parser VerificationKeyTextOrFile
183184
pPaymentVerificationKeyTextOrFile =

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

+3-1
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,9 @@ makeStakeAddressRef mbStakeVerifier = do
165165
let stakeCred = StakeCredentialByScript (hashScript script)
166166
return (StakeAddressByValue stakeCred)
167167

168+
StakeVerifierAddress stakeAddr ->
169+
pure $ StakeAddressByValue $ stakeAddressCredential stakeAddr
170+
168171
buildShelleyAddress
169172
:: VerificationKey PaymentKey
170173
-> Maybe StakeVerifier
@@ -232,4 +235,3 @@ runAddressBuildScript
232235
runAddressBuildScript scriptFile networkId mOutputFile = do
233236
liftIO $ deprecationWarning "'address build'"
234237
runAddressBuild (PaymentVerifierScriptFile scriptFile) Nothing networkId mOutputFile
235-

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

+61-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
@@ -88,51 +90,24 @@ runStakeAddressBuild
8890
-> NetworkId
8991
-> Maybe OutputFile
9092
-> ExceptT ShelleyStakeAddressCmdError IO ()
91-
runStakeAddressBuild stakeVerifier network mOutputFp =
92-
case stakeVerifier of
93-
StakeVerifierScriptFile (ScriptFile sFile) -> do
94-
ScriptInAnyLang _ script <- firstExceptT ShelleyStakeAddressCmdReadScriptFileError
95-
$ readFileScriptInAnyLang sFile
96-
let stakeCred = StakeCredentialByScript $ hashScript script
97-
stakeAddr = makeStakeAddress network stakeCred
98-
stakeAddrText = serialiseAddress stakeAddr
99-
100-
case mOutputFp of
101-
Just (OutputFile fpath) -> liftIO $ Text.writeFile fpath stakeAddrText
102-
Nothing -> liftIO $ Text.putStrLn stakeAddrText
103-
104-
StakeVerifierKey stakeVerKeyOrFile -> do
105-
stakeVerKey <- firstExceptT ShelleyStakeAddressCmdReadKeyFileError
106-
. newExceptT
107-
$ readVerificationKeyOrFile AsStakeKey stakeVerKeyOrFile
108-
109-
let stakeCred = StakeCredentialByKey (verificationKeyHash stakeVerKey)
110-
stakeAddr = makeStakeAddress network stakeCred
111-
stakeAddrText = serialiseAddress stakeAddr
112-
113-
case mOutputFp of
114-
Just (OutputFile fpath) -> liftIO $ Text.writeFile fpath stakeAddrText
115-
Nothing -> liftIO $ Text.putStrLn stakeAddrText
93+
runStakeAddressBuild stakeVerifier network mOutputFp = do
94+
stakeAddr <- loadStakeAddressFromVerifier network stakeVerifier
95+
let stakeAddrText = serialiseAddress stakeAddr
96+
liftIO $
97+
case mOutputFp of
98+
Just (OutputFile fpath) -> Text.writeFile fpath stakeAddrText
99+
Nothing -> Text.putStrLn stakeAddrText
116100

117101

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

163-
case stakeVerifier of
164-
StakeVerifierScriptFile (ScriptFile sFile) -> do
165-
ScriptInAnyLang _ script <- firstExceptT ShelleyStakeAddressCmdReadScriptFileError
166-
$ readFileScriptInAnyLang sFile
167-
let stakeCred = StakeCredentialByScript $ hashScript script
168-
writeDelegationCert stakeCred poolStakeVKeyHash
169-
StakeVerifierKey stakeVerKeyOrFile -> do
170-
stakeVkey <- firstExceptT ShelleyStakeAddressCmdReadKeyFileError
171-
. newExceptT
172-
$ readVerificationKeyOrFile AsStakeKey stakeVerKeyOrFile
173-
let stakeCred = StakeCredentialByKey (verificationKeyHash stakeVkey)
174-
writeDelegationCert stakeCred poolStakeVKeyHash
175140
where
176141
writeDelegationCert
177142
:: StakeCredential
@@ -191,19 +156,10 @@ runStakeCredentialDeRegistrationCert
191156
:: StakeVerifier
192157
-> OutputFile
193158
-> ExceptT ShelleyStakeAddressCmdError IO ()
194-
runStakeCredentialDeRegistrationCert stakeVerifier (OutputFile oFp) =
195-
case stakeVerifier of
196-
StakeVerifierScriptFile (ScriptFile sFile) -> do
197-
ScriptInAnyLang _ script <- firstExceptT ShelleyStakeAddressCmdReadScriptFileError
198-
$ readFileScriptInAnyLang sFile
199-
let stakeCred = StakeCredentialByScript $ hashScript script
200-
writeDeregistrationCert stakeCred
201-
StakeVerifierKey stakeVerKeyOrFile -> do
202-
stakeVkey <- firstExceptT ShelleyStakeAddressCmdReadKeyFileError
203-
. newExceptT
204-
$ readVerificationKeyOrFile AsStakeKey stakeVerKeyOrFile
205-
let stakeCred = StakeCredentialByKey (verificationKeyHash stakeVkey)
206-
writeDeregistrationCert stakeCred
159+
runStakeCredentialDeRegistrationCert stakeVerifier (OutputFile oFp) = do
160+
stakeCred <- loadStakeCredentialFromVerifier stakeVerifier
161+
writeDeregistrationCert stakeCred
162+
207163
where
208164
writeDeregistrationCert
209165
:: StakeCredential
@@ -216,3 +172,45 @@ runStakeCredentialDeRegistrationCert stakeVerifier (OutputFile oFp) =
216172

217173
deregCertDesc :: TextEnvelopeDescr
218174
deregCertDesc = "Stake Address Deregistration Certificate"
175+
176+
177+
loadStakeCredentialFromVerifier
178+
:: StakeVerifier -> ExceptT ShelleyStakeAddressCmdError IO StakeCredential
179+
180+
loadStakeAddressFromVerifier
181+
:: NetworkId
182+
-> StakeVerifier
183+
-> ExceptT ShelleyStakeAddressCmdError IO StakeAddress
184+
185+
(loadStakeCredentialFromVerifier, loadStakeAddressFromVerifier) =
186+
( fmap (either stakeAddressCredential identity) . loadStakeVerifier
187+
, \network stakeVerifier ->
188+
either identity (makeStakeAddress network)
189+
<$> loadStakeVerifier stakeVerifier
190+
)
191+
where
192+
193+
-- | Load 'StakeAddress' or 'StakeCredential' from 'StakeVerifier',
194+
-- which one is closer.
195+
loadStakeVerifier
196+
:: StakeVerifier
197+
-> ExceptT
198+
ShelleyStakeAddressCmdError
199+
IO
200+
(Either StakeAddress StakeCredential)
201+
loadStakeVerifier = \case
202+
203+
StakeVerifierScriptFile (ScriptFile sFile) -> do
204+
ScriptInAnyLang _ script <-
205+
firstExceptT ShelleyStakeAddressCmdReadScriptFileError $
206+
readFileScriptInAnyLang sFile
207+
pure $ Right $ StakeCredentialByScript $ hashScript script
208+
209+
StakeVerifierKey stakeVerKeyOrFile -> do
210+
stakeVerKey <-
211+
firstExceptT ShelleyStakeAddressCmdReadKeyFileError
212+
. newExceptT
213+
$ readVerificationKeyOrFile AsStakeKey stakeVerKeyOrFile
214+
pure $ Right $ StakeCredentialByKey $ verificationKeyHash stakeVerKey
215+
216+
StakeVerifierAddress stakeAddr -> pure $ Left stakeAddr

0 commit comments

Comments
 (0)