Skip to content

Commit 911d63a

Browse files
committed
cardano-cli: Add option --stake-address to subcommand stake-address registration-certificate
Fix #2723
1 parent 8221ffe commit 911d63a

File tree

7 files changed

+94
-80
lines changed

7 files changed

+94
-80
lines changed

cardano-api/src/Cardano/Api.hs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ module Cardano.Api (
101101
StakeAddress,
102102
StakeCredential,
103103
makeStakeAddress,
104+
getStakeAddressCredential,
104105
StakeKey,
105106
StakeExtendedKey,
106107

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ module Cardano.Api.Address (
4444
StakeAddress(..),
4545
StakeCredential(..),
4646
makeStakeAddress,
47+
getStakeAddressCredential,
4748
StakeKey,
4849
StakeExtendedKey,
4950

@@ -621,3 +622,6 @@ fromShelleyStakeReference (Shelley.StakeRefPtr ptr) =
621622
fromShelleyStakeReference Shelley.StakeRefNull =
622623
NoStakeAddress
623624

625+
getStakeAddressCredential :: StakeAddress -> StakeCredential
626+
getStakeAddressCredential (StakeAddress _ scred) =
627+
fromShelleyStakeCredential scred

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

Lines changed: 1 addition & 0 deletions
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

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

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -174,10 +174,13 @@ pPaymentVerifier =
174174

175175
pStakeVerifier :: Parser StakeVerifier
176176
pStakeVerifier =
177-
StakeVerifierKey <$> pStakeVerificationKeyOrFile
178-
<|> StakeVerifierScriptFile <$>
179-
pScriptFor "stake-script-file" Nothing
180-
"Filepath of the staking script."
177+
StakeVerifierKey <$> pStakeVerificationKeyOrFile
178+
<|> StakeVerifierScriptFile
179+
<$> pScriptFor
180+
"stake-script-file"
181+
Nothing
182+
"Filepath of the staking script."
183+
<|> StakeVerifierAddress <$> pStakeAddress
181184

182185
pPaymentVerificationKeyTextOrFile :: Parser VerificationKeyTextOrFile
183186
pPaymentVerificationKeyTextOrFile =
@@ -341,9 +344,8 @@ pStakeAddressCmd =
341344
<*> pMaybeOutputFile
342345

343346
pStakeAddressRegistrationCert :: Parser StakeAddressCmd
344-
pStakeAddressRegistrationCert = StakeRegistrationCert
345-
<$> pStakeVerifier
346-
<*> pOutputFile
347+
pStakeAddressRegistrationCert =
348+
StakeRegistrationCert <$> pStakeVerifier <*> pOutputFile
347349

348350
pStakeAddressDeregistrationCert :: Parser StakeAddressCmd
349351
pStakeAddressDeregistrationCert = StakeCredentialDeRegistrationCert

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

Lines changed: 3 additions & 1 deletion
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 $ getStakeAddressCredential 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-

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

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ runGovernanceMIRCertificatePayStakeAddrs mirPot sAddrs rwdAmts (OutputFile oFp)
7474
left $ ShelleyGovernanceCmdMIRCertificateKeyRewardMistmach
7575
oFp (length sAddrs) (length rwdAmts)
7676

77-
let sCreds = map stakeAddrToStakeCredential sAddrs
77+
let sCreds = map getStakeAddressCredential sAddrs
7878
mirCert = makeMIRCertificate mirPot (StakeAddressesMIR $ zip sCreds rwdAmts)
7979

8080
firstExceptT ShelleyGovernanceCmdTextEnvWriteError
@@ -84,11 +84,6 @@ runGovernanceMIRCertificatePayStakeAddrs mirPot sAddrs rwdAmts (OutputFile oFp)
8484
mirCertDesc :: TextEnvelopeDescr
8585
mirCertDesc = "Move Instantaneous Rewards Certificate"
8686

87-
--TODO: expose a pattern for StakeAddress that give us the StakeCredential
88-
stakeAddrToStakeCredential :: StakeAddress -> StakeCredential
89-
stakeAddrToStakeCredential (StakeAddress _ scred) =
90-
fromShelleyStakeCredential scred
91-
9287
runGovernanceMIRCertificateTransfer
9388
:: Lovelace
9489
-> OutputFile

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

Lines changed: 75 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -88,51 +88,51 @@ runStakeAddressBuild
8888
-> NetworkId
8989
-> Maybe OutputFile
9090
-> 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
91+
runStakeAddressBuild stakeVerifier network mOutputFp = do
92+
stakeAddr <-
93+
case stakeVerifier of
94+
StakeVerifierScriptFile (ScriptFile sFile) -> do
95+
ScriptInAnyLang _ script <- firstExceptT ShelleyStakeAddressCmdReadScriptFileError
96+
$ readFileScriptInAnyLang sFile
97+
let stakeCred = StakeCredentialByScript $ hashScript script
98+
pure $ makeStakeAddress network stakeCred
99+
100+
StakeVerifierKey stakeVerKeyOrFile -> do
101+
stakeVerKey <- firstExceptT ShelleyStakeAddressCmdReadKeyFileError
102+
. newExceptT
103+
$ readVerificationKeyOrFile AsStakeKey stakeVerKeyOrFile
104+
105+
let stakeCred = StakeCredentialByKey (verificationKeyHash stakeVerKey)
106+
pure $ makeStakeAddress network stakeCred
107+
108+
StakeVerifierAddress stakeAddr -> pure stakeAddr
109+
110+
let stakeAddrText = serialiseAddress stakeAddr
111+
case mOutputFp of
112+
Just (OutputFile fpath) -> liftIO $ Text.writeFile fpath stakeAddrText
113+
Nothing -> liftIO $ Text.putStrLn stakeAddrText
116114

117115

118116
runStakeCredentialRegistrationCert
119-
:: StakeVerifier
120-
-> OutputFile
121-
-> 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
117+
:: StakeVerifier -> OutputFile -> ExceptT ShelleyStakeAddressCmdError IO ()
118+
runStakeCredentialRegistrationCert stakeVerifier (OutputFile oFp) = do
119+
stakeCred <-
120+
case stakeVerifier of
121+
StakeVerifierScriptFile (ScriptFile sFile) -> do
122+
ScriptInAnyLang _ script <-
123+
firstExceptT ShelleyStakeAddressCmdReadScriptFileError $
124+
readFileScriptInAnyLang sFile
125+
pure $ StakeCredentialByScript $ hashScript script
126+
StakeVerifierKey stakeVerKeyOrFile -> do
127+
stakeVerKey <- firstExceptT ShelleyStakeAddressCmdReadKeyFileError
128+
. newExceptT
129+
$ readVerificationKeyOrFile AsStakeKey stakeVerKeyOrFile
130+
pure $ StakeCredentialByKey $ verificationKeyHash stakeVerKey
131+
StakeVerifierAddress stakeAddr ->
132+
pure $ getStakeAddressCredential stakeAddr
133+
writeRegistrationCert stakeCred
135134
where
135+
136136
writeRegistrationCert
137137
:: StakeCredential
138138
-> ExceptT ShelleyStakeAddressCmdError IO ()
@@ -160,18 +160,23 @@ runStakeCredentialDelegationCert stakeVerifier poolVKeyOrHashOrFile (OutputFile
160160
ShelleyStakeAddressCmdReadKeyFileError
161161
(newExceptT $ readVerificationKeyOrHashOrFile AsStakePoolKey poolVKeyOrHashOrFile)
162162

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
163+
stakeCred <-
164+
case stakeVerifier of
165+
StakeVerifierScriptFile (ScriptFile sFile) -> do
166+
ScriptInAnyLang _ script <-
167+
firstExceptT ShelleyStakeAddressCmdReadScriptFileError $
168+
readFileScriptInAnyLang sFile
169+
pure $ StakeCredentialByScript $ hashScript script
170+
StakeVerifierKey stakeVerKeyOrFile -> do
171+
stakeVkey <- firstExceptT ShelleyStakeAddressCmdReadKeyFileError
172+
. newExceptT
173+
$ readVerificationKeyOrFile AsStakeKey stakeVerKeyOrFile
174+
pure $ StakeCredentialByKey $ verificationKeyHash stakeVkey
175+
StakeVerifierAddress stakeAddr ->
176+
pure $ getStakeAddressCredential stakeAddr
177+
178+
writeDelegationCert stakeCred poolStakeVKeyHash
179+
175180
where
176181
writeDelegationCert
177182
:: StakeCredential
@@ -191,19 +196,23 @@ runStakeCredentialDeRegistrationCert
191196
:: StakeVerifier
192197
-> OutputFile
193198
-> 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
199+
runStakeCredentialDeRegistrationCert stakeVerifier (OutputFile oFp) = do
200+
stakeCred <-
201+
case stakeVerifier of
202+
StakeVerifierScriptFile (ScriptFile sFile) -> do
203+
ScriptInAnyLang _ script <-
204+
firstExceptT ShelleyStakeAddressCmdReadScriptFileError $
205+
readFileScriptInAnyLang sFile
206+
pure $ StakeCredentialByScript $ hashScript script
207+
StakeVerifierKey stakeVerKeyOrFile -> do
208+
stakeVkey <- firstExceptT ShelleyStakeAddressCmdReadKeyFileError
209+
. newExceptT
210+
$ readVerificationKeyOrFile AsStakeKey stakeVerKeyOrFile
211+
pure $ StakeCredentialByKey $ verificationKeyHash stakeVkey
212+
StakeVerifierAddress stakeAddr ->
213+
pure $ getStakeAddressCredential stakeAddr
214+
writeDeregistrationCert stakeCred
215+
207216
where
208217
writeDeregistrationCert
209218
:: StakeCredential

0 commit comments

Comments
 (0)