Skip to content

Commit

Permalink
New keyGenStakeAddress function to generate stake address without wri…
Browse files Browse the repository at this point in the history
…ting to file
  • Loading branch information
newhoggy committed Jun 13, 2022
1 parent 4690547 commit 3775be5
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 22 deletions.
5 changes: 3 additions & 2 deletions cardano-api/src/Cardano/Api/KeysShelley.hs
Original file line number Diff line number Diff line change
Expand Up @@ -323,8 +323,9 @@ instance HasTypeProxy StakeKey where

instance Key StakeKey where

newtype VerificationKey StakeKey =
StakeVerificationKey (Shelley.VKey Shelley.Staking StandardCrypto)
newtype VerificationKey StakeKey = StakeVerificationKey
{ unStakeVerificationKey :: Shelley.VKey Shelley.Staking StandardCrypto
}
deriving stock (Eq)
deriving newtype (ToCBOR, FromCBOR)
deriving anyclass SerialiseAsCBOR
Expand Down
31 changes: 14 additions & 17 deletions cardano-cli/src/Cardano/CLI/Shelley/Run/Genesis.hs
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ import Cardano.CLI.Shelley.Run.Node (ShelleyNodeCmdError (..), renderS
runNodeIssueOpCert, runNodeKeyGenCold, runNodeKeyGenKES, runNodeKeyGenVRF)
import Cardano.CLI.Shelley.Run.Pool (ShelleyPoolCmdError (..), renderShelleyPoolCmdError)
import Cardano.CLI.Shelley.Run.StakeAddress (ShelleyStakeAddressCmdError (..),
renderShelleyStakeAddressCmdError, runStakeAddressKeyGenToFile)
renderShelleyStakeAddressCmdError, runStakeAddressKeyGenToFile, keyGenStakeAddress)
import Cardano.CLI.Types

import Cardano.CLI.Byron.Delegation
Expand Down Expand Up @@ -928,37 +928,34 @@ computeDelegation :: ()
computeDelegation nw delegDir pool delegIx = do
let strIndex = show delegIx

let paymentVK = VerificationKeyFile $ delegDir </> "payment" ++ strIndex ++ ".vkey"
let paymentVKF = VerificationKeyFile $ delegDir </> "payment" ++ strIndex ++ ".vkey"

firstExceptT ShelleyGenesisCmdAddressCmdError $ do
let paymentSK = SigningKeyFile $ delegDir </> "payment" ++ strIndex ++ ".skey"
runAddressKeyGenToFile AddressKeyShelley paymentVK paymentSK
let paymentSKF = SigningKeyFile $ delegDir </> "payment" ++ strIndex ++ ".skey"
runAddressKeyGenToFile AddressKeyShelley paymentVKF paymentSKF

let stakingVK = VerificationKeyFile $ delegDir </> "staking" ++ strIndex ++ ".vkey"
let stakingVKF = VerificationKeyFile $ delegDir </> "staking" ++ strIndex ++ ".vkey"

-- TODO use return values
void $ firstExceptT ShelleyGenesisCmdStakeAddressCmdError $ do
let stakingSK = SigningKeyFile $ delegDir </> "staking" ++ strIndex ++ ".skey"
runStakeAddressKeyGenToFile stakingVK stakingSK
(_, stakeVK) <- firstExceptT ShelleyGenesisCmdStakeAddressCmdError $ do
-- let stakingSK = SigningKeyFile $ delegDir </> "staking" ++ strIndex ++ ".skey"
-- runStakeAddressKeyGenToFile stakingVKF stakingSK
keyGenStakeAddress

paySVK <- firstExceptT (ShelleyGenesisCmdAddressCmdError
. ShelleyAddressCmdVerificationKeyTextOrFileError) $
readAddressVerificationKeyTextOrFile
(VktofVerificationKeyFile paymentVK)
(VktofVerificationKeyFile paymentVKF)

initialUtxoAddr <- case paySVK of
APaymentVerificationKey payVK -> do
firstExceptT ShelleyGenesisCmdAddressCmdError $ do
let stakeVerifier = StakeVerifierKey . VerificationKeyFilePath $ stakingVK
let stakeVerifier = StakeVerifierKey . VerificationKeyFilePath $ stakingVKF
makeShelleyAddress nw (PaymentCredentialByKey (verificationKeyHash payVK)) <$> makeStakeAddressRef stakeVerifier
_ -> left $ ShelleyGenesisCmdUnexpectedAddressVerificationKey paymentVK "APaymentVerificationKey" paySVK

StakeVerificationKey stakeVK <- firstExceptT ShelleyGenesisCmdTextEnvReadFileError
. newExceptT
$ readFileTextEnvelope (AsVerificationKey AsStakeKey) (unVerificationKeyFile stakingVK)
_ -> left $ ShelleyGenesisCmdUnexpectedAddressVerificationKey paymentVKF "APaymentVerificationKey" paySVK

pure Delegation
{ dInitialUtxoAddr = shelleyAddressInEra initialUtxoAddr
, dDelegStaking = Ledger.hashKey stakeVK
, dDelegStaking = Ledger.hashKey (unStakeVerificationKey stakeVK)
, dPoolParams = pool
}

Expand Down
10 changes: 7 additions & 3 deletions cardano-cli/src/Cardano/CLI/Shelley/Run/StakeAddress.hs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ module Cardano.CLI.Shelley.Run.StakeAddress
, renderShelleyStakeAddressCmdError
, runStakeAddressCmd
, runStakeAddressKeyGenToFile
, keyGenStakeAddress
) where

import Cardano.Prelude
Expand Down Expand Up @@ -53,6 +54,11 @@ runStakeAddressCmd (StakeCredentialDeRegistrationCert stakeVerifier outputFp) =
-- Stake address command implementations
--

keyGenStakeAddress :: MonadIO m => m (SigningKey StakeKey, VerificationKey StakeKey)
keyGenStakeAddress = do
skey <- liftIO $ generateSigningKey AsStakeKey
return (skey, getVerificationKey skey)

runStakeAddressKeyGenToFile :: ()
=> VerificationKeyFile
-> SigningKeyFile
Expand All @@ -61,9 +67,7 @@ runStakeAddressKeyGenToFile (VerificationKeyFile vkFp) (SigningKeyFile skFp) = d
let skeyDesc = "Stake Signing Key"
let vkeyDesc = "Stake Verification Key"

skey <- liftIO $ generateSigningKey AsStakeKey

let vkey = getVerificationKey skey
(skey, vkey) <- keyGenStakeAddress

firstExceptT ShelleyStakeAddressCmdWriteFileError $ do
newExceptT $ writeFileTextEnvelope skFp (Just skeyDesc) skey
Expand Down

0 comments on commit 3775be5

Please sign in to comment.