Skip to content

Commit 0fcbfef

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 2a21b0b commit 0fcbfef

File tree

5 files changed

+54
-64
lines changed

5 files changed

+54
-64
lines changed

Diff for: cardano-api/src/Cardano/Api/Address.hs

+2-1
Original file line numberDiff line numberDiff line change
@@ -659,6 +659,7 @@ fromShelleyStakeReference (Shelley.StakeRefPtr ptr) =
659659
fromShelleyStakeReference Shelley.StakeRefNull =
660660
NoStakeAddress
661661

662-
-- | Get credential from a stake address. This drops the network information.
662+
-- | Get a stake credential from a stake address.
663+
-- This drops the network information.
663664
stakeAddressCredential :: StakeAddress -> StakeCredential
664665
stakeAddressCredential (StakeAddress _ scred) = fromShelleyStakeCredential scred

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

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

396397
-- | 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
@@ -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 =

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

+3
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

Diff for: 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
@@ -88,50 +90,23 @@ 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 <- getStakeAddressFromVerifier 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 <- getStakeCredentialFromVerifier stakeVerifier
108+
writeRegistrationCert stakeCred
109+
135110
where
136111
writeRegistrationCert
137112
:: StakeCredential
@@ -159,19 +134,9 @@ runStakeCredentialDelegationCert stakeVerifier poolVKeyOrHashOrFile (OutputFile
159134
firstExceptT
160135
ShelleyStakeAddressCmdReadKeyFileError
161136
(newExceptT $ readVerificationKeyOrHashOrFile AsStakePoolKey poolVKeyOrHashOrFile)
137+
stakeCred <- getStakeCredentialFromVerifier 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 <- getStakeCredentialFromVerifier stakeVerifier
161+
writeDeregistrationCert stakeCred
162+
207163
where
208164
writeDeregistrationCert
209165
:: StakeCredential
@@ -216,3 +172,31 @@ runStakeCredentialDeRegistrationCert stakeVerifier (OutputFile oFp) =
216172

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

0 commit comments

Comments
 (0)