{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}
{-# OPTIONS_GHC -Wno-unrecognised-pragmas #-}
module Cardano.CLI.EraBased.StakeAddress.Run
( runStakeAddressCmds
, runStakeAddressBuildCmd
, runStakeAddressKeyGenCmd
, runStakeAddressKeyHashCmd
, runStakeAddressStakeDelegationCertificateCmd
, runStakeAddressDeregistrationCertificateCmd
, runStakeAddressRegistrationCertificateCmd
, runStakeAddressRegistrationAndDelegationCertificateCmd
, runStakeAddressRegistrationStakeAndVoteDelegationCertificateCmd
)
where
import Cardano.Api hiding (makeStakeAddressRegistrationCertificate)
import Cardano.Api.Experimental (obtainCommonConstraints)
import Cardano.Api.Experimental qualified as Exp
import Cardano.Api.Ledger qualified as L
import Cardano.CLI.Compatible.Exception
import Cardano.CLI.EraBased.StakeAddress.Command
import Cardano.CLI.EraIndependent.Key.Run qualified as Key
import Cardano.CLI.Orphan ()
import Cardano.CLI.Read
import Cardano.CLI.Type.Common
import Cardano.CLI.Type.Governance
import Cardano.CLI.Type.Key
import RIO
import Data.ByteString.Char8 qualified as BS
import Data.Text.IO qualified as Text
import Vary (Vary)
import Vary qualified
runStakeAddressCmds
:: ()
=> forall era e
. StakeAddressCmds era
-> CIO e ()
runStakeAddressCmds :: forall era e. StakeAddressCmds era -> CIO e ()
runStakeAddressCmds = \case
StakeAddressKeyGenCmd Vary '[FormatBech32, FormatTextEnvelope]
fmt VerificationKeyFile 'Out
vk SigningKeyFile 'Out
sk ->
RIO e (VerificationKey StakeKey, SigningKey StakeKey) -> RIO e ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (RIO e (VerificationKey StakeKey, SigningKey StakeKey) -> RIO e ())
-> RIO e (VerificationKey StakeKey, SigningKey StakeKey)
-> RIO e ()
forall a b. (a -> b) -> a -> b
$ Vary '[FormatBech32, FormatTextEnvelope]
-> VerificationKeyFile 'Out
-> SigningKeyFile 'Out
-> CIO e (VerificationKey StakeKey, SigningKey StakeKey)
forall e.
Vary '[FormatBech32, FormatTextEnvelope]
-> VerificationKeyFile 'Out
-> SigningKeyFile 'Out
-> CIO e (VerificationKey StakeKey, SigningKey StakeKey)
runStakeAddressKeyGenCmd Vary '[FormatBech32, FormatTextEnvelope]
fmt VerificationKeyFile 'Out
vk SigningKeyFile 'Out
sk
StakeAddressKeyHashCmd VerificationKeyOrFile StakeKey
vk Maybe (File () 'Out)
mOutputFp ->
VerificationKeyOrFile StakeKey -> Maybe (File () 'Out) -> CIO e ()
forall e.
VerificationKeyOrFile StakeKey -> Maybe (File () 'Out) -> CIO e ()
runStakeAddressKeyHashCmd VerificationKeyOrFile StakeKey
vk Maybe (File () 'Out)
mOutputFp
StakeAddressBuildCmd StakeVerifier
stakeVerifier NetworkId
nw Maybe (File () 'Out)
mOutputFp ->
StakeVerifier -> NetworkId -> Maybe (File () 'Out) -> CIO e ()
forall e.
StakeVerifier -> NetworkId -> Maybe (File () 'Out) -> CIO e ()
runStakeAddressBuildCmd StakeVerifier
stakeVerifier NetworkId
nw Maybe (File () 'Out)
mOutputFp
StakeAddressRegistrationCertificateCmd Era era
era StakeIdentifier
stakeIdentifier Coin
mDeposit File () 'Out
outputFp ->
Era era -> StakeIdentifier -> Coin -> File () 'Out -> CIO e ()
forall era e.
Era era -> StakeIdentifier -> Coin -> File () 'Out -> CIO e ()
runStakeAddressRegistrationCertificateCmd Era era
era StakeIdentifier
stakeIdentifier Coin
mDeposit File () 'Out
outputFp
StakeAddressStakeDelegationCertificateCmd
Era era
era
StakeIdentifier
stakeIdentifier
StakePoolKeyHashSource
stkPoolVerKeyHashOrFp
File () 'Out
outputFp ->
Era era -> (EraCommonConstraints era => RIO e ()) -> RIO e ()
forall era a. Era era -> (EraCommonConstraints era => a) -> a
Exp.obtainCommonConstraints Era era
era ((EraCommonConstraints era => RIO e ()) -> RIO e ())
-> (EraCommonConstraints era => RIO e ()) -> RIO e ()
forall a b. (a -> b) -> a -> b
$
Era era
-> StakeIdentifier
-> StakePoolKeyHashSource
-> File () 'Out
-> CIO e ()
forall era e.
IsEra era =>
Era era
-> StakeIdentifier
-> StakePoolKeyHashSource
-> File () 'Out
-> CIO e ()
runStakeAddressStakeDelegationCertificateCmd
Era era
era
StakeIdentifier
stakeIdentifier
StakePoolKeyHashSource
stkPoolVerKeyHashOrFp
File () 'Out
outputFp
StakeAddressStakeAndVoteDelegationCertificateCmd
Era era
w
StakeIdentifier
stakeIdentifier
StakePoolKeyHashSource
stakePoolVerificationKeyHashSource
VoteDelegationTarget
voteDelegationTarget
File () 'Out
outputFp ->
Era era
-> StakeIdentifier
-> StakePoolKeyHashSource
-> VoteDelegationTarget
-> File () 'Out
-> CIO e ()
forall era e.
Era era
-> StakeIdentifier
-> StakePoolKeyHashSource
-> VoteDelegationTarget
-> File () 'Out
-> CIO e ()
runStakeAddressStakeAndVoteDelegationCertificateCmd
Era era
w
StakeIdentifier
stakeIdentifier
StakePoolKeyHashSource
stakePoolVerificationKeyHashSource
VoteDelegationTarget
voteDelegationTarget
File () 'Out
outputFp
StakeAddressVoteDelegationCertificateCmd Era era
w StakeIdentifier
stakeIdentifier VoteDelegationTarget
voteDelegationTarget File () 'Out
outputFp ->
Era era
-> StakeIdentifier
-> VoteDelegationTarget
-> File () 'Out
-> CIO e ()
forall era e.
Era era
-> StakeIdentifier
-> VoteDelegationTarget
-> File () 'Out
-> CIO e ()
runStakeAddressVoteDelegationCertificateCmd Era era
w StakeIdentifier
stakeIdentifier VoteDelegationTarget
voteDelegationTarget File () 'Out
outputFp
StakeAddressDeregistrationCertificateCmd Era era
era StakeIdentifier
stakeIdentifier Coin
deposit File () 'Out
outputFp ->
Era era -> StakeIdentifier -> Coin -> File () 'Out -> CIO e ()
forall era e.
Era era -> StakeIdentifier -> Coin -> File () 'Out -> CIO e ()
runStakeAddressDeregistrationCertificateCmd Era era
era StakeIdentifier
stakeIdentifier Coin
deposit File () 'Out
outputFp
StakeAddressRegistrationAndDelegationCertificateCmd
Era era
w
StakeIdentifier
stakeIdentifier
StakePoolKeyHashSource
poolVKeyOrHashOrFile
Coin
deposit
File () 'Out
outFp ->
Era era
-> StakeIdentifier
-> StakePoolKeyHashSource
-> Coin
-> File () 'Out
-> CIO e ()
forall era e.
Era era
-> StakeIdentifier
-> StakePoolKeyHashSource
-> Coin
-> File () 'Out
-> CIO e ()
runStakeAddressRegistrationAndDelegationCertificateCmd
Era era
w
StakeIdentifier
stakeIdentifier
StakePoolKeyHashSource
poolVKeyOrHashOrFile
Coin
deposit
File () 'Out
outFp
StakeAddressRegistrationAndVoteDelegationCertificateCmd
Era era
w
StakeIdentifier
stakeIdentifier
VoteDelegationTarget
voteDelegationTarget
Coin
keydeposit
File () 'Out
outFp ->
Era era
-> StakeIdentifier
-> VoteDelegationTarget
-> Coin
-> File () 'Out
-> CIO e ()
forall era e.
Era era
-> StakeIdentifier
-> VoteDelegationTarget
-> Coin
-> File () 'Out
-> CIO e ()
runStakeAddressRegistrationAndVoteDelegationCertificateCmd
Era era
w
StakeIdentifier
stakeIdentifier
VoteDelegationTarget
voteDelegationTarget
Coin
keydeposit
File () 'Out
outFp
StakeAddressRegistrationStakeAndVoteDelegationCertificateCmd
Era era
w
StakeIdentifier
stakeIdentifier
StakePoolKeyHashSource
poolVKeyOrHashOrFile
VoteDelegationTarget
voteDelegationTarget
Coin
keydeposit
File () 'Out
outFp ->
Era era
-> StakeIdentifier
-> StakePoolKeyHashSource
-> VoteDelegationTarget
-> Coin
-> File () 'Out
-> CIO e ()
forall era e.
Era era
-> StakeIdentifier
-> StakePoolKeyHashSource
-> VoteDelegationTarget
-> Coin
-> File () 'Out
-> CIO e ()
runStakeAddressRegistrationStakeAndVoteDelegationCertificateCmd
Era era
w
StakeIdentifier
stakeIdentifier
StakePoolKeyHashSource
poolVKeyOrHashOrFile
VoteDelegationTarget
voteDelegationTarget
Coin
keydeposit
File () 'Out
outFp
runStakeAddressKeyGenCmd
:: Vary [FormatBech32, FormatTextEnvelope]
-> VerificationKeyFile Out
-> SigningKeyFile Out
-> CIO e (VerificationKey StakeKey, SigningKey StakeKey)
runStakeAddressKeyGenCmd :: forall e.
Vary '[FormatBech32, FormatTextEnvelope]
-> VerificationKeyFile 'Out
-> SigningKeyFile 'Out
-> CIO e (VerificationKey StakeKey, SigningKey StakeKey)
runStakeAddressKeyGenCmd Vary '[FormatBech32, FormatTextEnvelope]
fmt VerificationKeyFile 'Out
vkFp SigningKeyFile 'Out
skFp = do
let skeyDesc :: TextEnvelopeDescr
skeyDesc = TextEnvelopeDescr
"Stake Signing Key"
skey <- AsType StakeKey -> RIO e (SigningKey StakeKey)
forall (m :: * -> *) keyrole.
(MonadIO m, Key keyrole) =>
AsType keyrole -> m (SigningKey keyrole)
generateSigningKey AsType StakeKey
AsStakeKey
let vkey = SigningKey StakeKey -> VerificationKey StakeKey
forall keyrole.
(Key keyrole, HasTypeProxy keyrole) =>
SigningKey keyrole -> VerificationKey keyrole
getVerificationKey SigningKey StakeKey
skey
void $
fmt
& ( id
. Vary.on
( \FormatBech32
FormatBech32 ->
SigningKeyFile 'Out
-> Text -> RIO e (Either (FileError (ZonkAny 0)) ())
forall (m :: * -> *) content e.
MonadIO m =>
File content 'Out -> Text -> m (Either (FileError e) ())
writeTextFile SigningKeyFile 'Out
skFp (Text -> RIO e (Either (FileError (ZonkAny 0)) ()))
-> Text -> RIO e (Either (FileError (ZonkAny 0)) ())
forall a b. (a -> b) -> a -> b
$ SigningKey StakeKey -> Text
forall a. SerialiseAsBech32 a => a -> Text
serialiseToBech32 SigningKey StakeKey
skey
)
. Vary.on
( \FormatTextEnvelope
FormatTextEnvelope ->
SigningKeyFile 'Out
-> ByteString -> RIO e (Either (FileError (ZonkAny 0)) ())
forall (m :: * -> *) content e.
MonadIO m =>
File content 'Out -> ByteString -> m (Either (FileError e) ())
writeLazyByteStringFile SigningKeyFile 'Out
skFp (ByteString -> RIO e (Either (FileError (ZonkAny 0)) ()))
-> ByteString -> RIO e (Either (FileError (ZonkAny 0)) ())
forall a b. (a -> b) -> a -> b
$ Maybe TextEnvelopeDescr -> SigningKey StakeKey -> ByteString
forall a.
HasTextEnvelope a =>
Maybe TextEnvelopeDescr -> a -> ByteString
textEnvelopeToJSON (TextEnvelopeDescr -> Maybe TextEnvelopeDescr
forall a. a -> Maybe a
Just TextEnvelopeDescr
skeyDesc) SigningKey StakeKey
skey
)
$ Vary.exhaustiveCase
)
void $
fmt
& ( id
. Vary.on
( \FormatBech32
FormatBech32 ->
VerificationKeyFile 'Out
-> Text -> RIO e (Either (FileError (ZonkAny 1)) ())
forall (m :: * -> *) content e.
MonadIO m =>
File content 'Out -> Text -> m (Either (FileError e) ())
writeTextFile VerificationKeyFile 'Out
vkFp (Text -> RIO e (Either (FileError (ZonkAny 1)) ()))
-> Text -> RIO e (Either (FileError (ZonkAny 1)) ())
forall a b. (a -> b) -> a -> b
$ VerificationKey StakeKey -> Text
forall a. SerialiseAsBech32 a => a -> Text
serialiseToBech32 VerificationKey StakeKey
vkey
)
. Vary.on
( \FormatTextEnvelope
FormatTextEnvelope ->
VerificationKeyFile 'Out
-> ByteString -> RIO e (Either (FileError (ZonkAny 1)) ())
forall (m :: * -> *) content e.
MonadIO m =>
File content 'Out -> ByteString -> m (Either (FileError e) ())
writeLazyByteStringFile VerificationKeyFile 'Out
vkFp (ByteString -> RIO e (Either (FileError (ZonkAny 1)) ()))
-> ByteString -> RIO e (Either (FileError (ZonkAny 1)) ())
forall a b. (a -> b) -> a -> b
$ Maybe TextEnvelopeDescr -> VerificationKey StakeKey -> ByteString
forall a.
HasTextEnvelope a =>
Maybe TextEnvelopeDescr -> a -> ByteString
textEnvelopeToJSON (TextEnvelopeDescr -> Maybe TextEnvelopeDescr
forall a. a -> Maybe a
Just TextEnvelopeDescr
Key.stakeVkeyDesc) VerificationKey StakeKey
vkey
)
$ Vary.exhaustiveCase
)
return (vkey, skey)
runStakeAddressKeyHashCmd
:: ()
=> VerificationKeyOrFile StakeKey
-> Maybe (File () Out)
-> CIO e ()
runStakeAddressKeyHashCmd :: forall e.
VerificationKeyOrFile StakeKey -> Maybe (File () 'Out) -> CIO e ()
runStakeAddressKeyHashCmd VerificationKeyOrFile StakeKey
stakeVerKeyOrFile Maybe (File () 'Out)
mOutputFp = do
vkey <-
VerificationKeyOrFile StakeKey -> CIO e (VerificationKey StakeKey)
forall keyrole e.
(HasTextEnvelope (VerificationKey keyrole),
SerialiseAsBech32 (VerificationKey keyrole)) =>
VerificationKeyOrFile keyrole -> CIO e (VerificationKey keyrole)
readVerificationKeyOrFile VerificationKeyOrFile StakeKey
stakeVerKeyOrFile
let hexKeyHash = Hash StakeKey -> ByteString
forall a. SerialiseAsRawBytes a => a -> ByteString
serialiseToRawBytesHex (VerificationKey StakeKey -> Hash StakeKey
forall keyrole.
Key keyrole =>
VerificationKey keyrole -> Hash keyrole
verificationKeyHash VerificationKey StakeKey
vkey)
case mOutputFp of
Just (File String
fpath) -> IO () -> RIO e ()
forall a. IO a -> RIO e a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> RIO e ()) -> IO () -> RIO e ()
forall a b. (a -> b) -> a -> b
$ String -> ByteString -> IO ()
BS.writeFile String
fpath ByteString
hexKeyHash
Maybe (File () 'Out)
Nothing -> IO () -> RIO e ()
forall a. IO a -> RIO e a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> RIO e ()) -> IO () -> RIO e ()
forall a b. (a -> b) -> a -> b
$ ByteString -> IO ()
BS.putStrLn ByteString
hexKeyHash
runStakeAddressBuildCmd
:: ()
=> StakeVerifier
-> NetworkId
-> Maybe (File () Out)
-> CIO e ()
runStakeAddressBuildCmd :: forall e.
StakeVerifier -> NetworkId -> Maybe (File () 'Out) -> CIO e ()
runStakeAddressBuildCmd StakeVerifier
stakeVerifier NetworkId
network Maybe (File () 'Out)
mOutputFp = do
stakeAddr <-
NetworkId -> StakeVerifier -> CIO e StakeAddress
forall e. NetworkId -> StakeVerifier -> CIO e StakeAddress
getStakeAddressFromVerifier NetworkId
network StakeVerifier
stakeVerifier
let stakeAddrText = StakeAddress -> Text
forall addr. SerialiseAddress addr => addr -> Text
serialiseAddress StakeAddress
stakeAddr
liftIO $
case mOutputFp of
Just (File String
fpath) -> String -> Text -> IO ()
Text.writeFile String
fpath Text
stakeAddrText
Maybe (File () 'Out)
Nothing -> Text -> IO ()
Text.putStrLn Text
stakeAddrText
runStakeAddressRegistrationCertificateCmd
:: forall era e
. Exp.Era era
-> StakeIdentifier
-> Lovelace
-> File () Out
-> CIO e ()
runStakeAddressRegistrationCertificateCmd :: forall era e.
Era era -> StakeIdentifier -> Coin -> File () 'Out -> CIO e ()
runStakeAddressRegistrationCertificateCmd Era era
era StakeIdentifier
stakeIdentifier Coin
deposit File () 'Out
oFp = do
stakeCred <-
StakeIdentifier -> CIO e StakeCredential
forall e. StakeIdentifier -> CIO e StakeCredential
getStakeCredentialFromIdentifier
StakeIdentifier
stakeIdentifier
let regCert =
Era era
-> (EraCommonConstraints era => Certificate (LedgerEra era))
-> Certificate (LedgerEra era)
forall era a. Era era -> (EraCommonConstraints era => a) -> a
obtainCommonConstraints Era era
era ((EraCommonConstraints era => Certificate (LedgerEra era))
-> Certificate (LedgerEra era))
-> (EraCommonConstraints era => Certificate (LedgerEra era))
-> Certificate (LedgerEra era)
forall a b. (a -> b) -> a -> b
$
StakeCredential -> Coin -> Certificate (LedgerEra era)
forall era.
IsEra era =>
StakeCredential -> Coin -> Certificate (LedgerEra era)
Exp.makeStakeAddressRegistrationCertificate StakeCredential
stakeCred Coin
deposit
:: Exp.Certificate (Exp.LedgerEra era)
fromEitherIOCli @(FileError ()) $
writeLazyByteStringFile oFp $
obtainCommonConstraints era $
textEnvelopeToJSON (Just regCertDesc) regCert
where
regCertDesc :: TextEnvelopeDescr
regCertDesc :: TextEnvelopeDescr
regCertDesc = TextEnvelopeDescr
"Stake Address Registration Certificate"
runStakeAddressStakeDelegationCertificateCmd
:: forall era e
. Exp.IsEra era
=> Exp.Era era
-> StakeIdentifier
-> StakePoolKeyHashSource
-> File () Out
-> CIO e ()
runStakeAddressStakeDelegationCertificateCmd :: forall era e.
IsEra era =>
Era era
-> StakeIdentifier
-> StakePoolKeyHashSource
-> File () 'Out
-> CIO e ()
runStakeAddressStakeDelegationCertificateCmd Era era
era StakeIdentifier
stakeVerifier StakePoolKeyHashSource
poolVKeyOrHashOrFile File () 'Out
outFp =
Era era -> (EraCommonConstraints era => RIO e ()) -> RIO e ()
forall era a. Era era -> (EraCommonConstraints era => a) -> a
obtainCommonConstraints Era era
era ((EraCommonConstraints era => RIO e ()) -> RIO e ())
-> (EraCommonConstraints era => RIO e ()) -> RIO e ()
forall a b. (a -> b) -> a -> b
$ do
poolStakeVKeyHash <- StakePoolKeyHashSource -> RIO e (Hash StakePoolKey)
forall (m :: * -> *).
MonadIO m =>
StakePoolKeyHashSource -> m (Hash StakePoolKey)
getHashFromStakePoolKeyHashSource StakePoolKeyHashSource
poolVKeyOrHashOrFile
stakeCred <-
getStakeCredentialFromIdentifier stakeVerifier
let certificate :: Exp.Certificate (Exp.LedgerEra era) = createStakeDelegationCertificate stakeCred poolStakeVKeyHash
fromEitherIOCli @(FileError ()) $
writeLazyByteStringFile outFp $
textEnvelopeToJSON (Just @TextEnvelopeDescr "Stake Delegation Certificate") certificate
runStakeAddressStakeAndVoteDelegationCertificateCmd
:: forall era e
. Exp.Era era
-> StakeIdentifier
-> StakePoolKeyHashSource
-> VoteDelegationTarget
-> File () Out
-> CIO e ()
runStakeAddressStakeAndVoteDelegationCertificateCmd :: forall era e.
Era era
-> StakeIdentifier
-> StakePoolKeyHashSource
-> VoteDelegationTarget
-> File () 'Out
-> CIO e ()
runStakeAddressStakeAndVoteDelegationCertificateCmd Era era
w StakeIdentifier
stakeVerifier StakePoolKeyHashSource
poolVKeyOrHashOrFile VoteDelegationTarget
voteDelegationTarget File () 'Out
outFp = do
StakePoolKeyHash poolStakeVKeyHash <- StakePoolKeyHashSource -> RIO e (Hash StakePoolKey)
forall (m :: * -> *).
MonadIO m =>
StakePoolKeyHashSource -> m (Hash StakePoolKey)
getHashFromStakePoolKeyHashSource StakePoolKeyHashSource
poolVKeyOrHashOrFile
stakeCredential <-
getStakeCredentialFromIdentifier stakeVerifier
drep <-
readVoteDelegationTarget voteDelegationTarget
let delegatee = KeyHash 'StakePool -> DRep -> Delegatee
L.DelegStakeVote KeyHash 'StakePool
poolStakeVKeyHash DRep
drep
certificate :: Exp.Certificate (Exp.LedgerEra era) <-
return $
obtainCommonConstraints w $
Exp.Certificate $
L.mkDelegTxCert (toShelleyStakeCredential stakeCredential) delegatee
fromEitherIOCli @(FileError ()) $
writeLazyByteStringFile outFp $
obtainCommonConstraints w $
textEnvelopeToJSON (Just @TextEnvelopeDescr "Stake and Vote Delegation Certificate") certificate
runStakeAddressVoteDelegationCertificateCmd
:: forall era e
. Exp.Era era
-> StakeIdentifier
-> VoteDelegationTarget
-> File () Out
-> CIO e ()
runStakeAddressVoteDelegationCertificateCmd :: forall era e.
Era era
-> StakeIdentifier
-> VoteDelegationTarget
-> File () 'Out
-> CIO e ()
runStakeAddressVoteDelegationCertificateCmd Era era
w StakeIdentifier
stakeVerifier VoteDelegationTarget
voteDelegationTarget File () 'Out
outFp = do
stakeCredential <-
StakeIdentifier -> CIO e StakeCredential
forall e. StakeIdentifier -> CIO e StakeCredential
getStakeCredentialFromIdentifier StakeIdentifier
stakeVerifier
drep <-
readVoteDelegationTarget voteDelegationTarget
let delegatee = DRep -> Delegatee
L.DelegVote DRep
drep
let certificate :: Exp.Certificate (Exp.LedgerEra era) =
obtainCommonConstraints w $
Exp.Certificate $
L.mkDelegTxCert (toShelleyStakeCredential stakeCredential) delegatee
fromEitherIOCli @(FileError ())
$ writeLazyByteStringFile
outFp
$ obtainCommonConstraints w
$ textEnvelopeToJSON (Just @TextEnvelopeDescr "Vote Delegation Certificate") certificate
createStakeDelegationCertificate
:: forall era
. Exp.IsEra era
=> StakeCredential
-> Hash StakePoolKey
-> Exp.Certificate (Exp.LedgerEra era)
createStakeDelegationCertificate :: forall era.
IsEra era =>
StakeCredential -> Hash StakePoolKey -> Certificate (LedgerEra era)
createStakeDelegationCertificate StakeCredential
stakeCredential (StakePoolKeyHash KeyHash 'StakePool
poolStakeVKeyHash) = do
let w :: Era era
w = Era era -> Era era
forall era. Era era -> Era era
forall a (f :: a -> *) (g :: a -> *) (era :: a).
Convert f g =>
f era -> g era
convert (Era era -> Era era) -> Era era -> Era era
forall a b. (a -> b) -> a -> b
$ forall era. IsEra era => Era era
Exp.useEra @era
Era era
-> (EraCommonConstraints era => Certificate (LedgerEra era))
-> Certificate (LedgerEra era)
forall era a. Era era -> (EraCommonConstraints era => a) -> a
obtainCommonConstraints Era era
w ((EraCommonConstraints era => Certificate (LedgerEra era))
-> Certificate (LedgerEra era))
-> (EraCommonConstraints era => Certificate (LedgerEra era))
-> Certificate (LedgerEra era)
forall a b. (a -> b) -> a -> b
$
TxCert (LedgerEra era) -> Certificate (LedgerEra era)
forall era. EraTxCert era => TxCert era -> Certificate era
Exp.Certificate (TxCert (LedgerEra era) -> Certificate (LedgerEra era))
-> TxCert (LedgerEra era) -> Certificate (LedgerEra era)
forall a b. (a -> b) -> a -> b
$
StakeCredential -> Delegatee -> TxCert (LedgerEra era)
forall era.
ConwayEraTxCert era =>
StakeCredential -> Delegatee -> TxCert era
L.mkDelegTxCert (StakeCredential -> StakeCredential
toShelleyStakeCredential StakeCredential
stakeCredential) (KeyHash 'StakePool -> Delegatee
L.DelegStake KeyHash 'StakePool
poolStakeVKeyHash)
runStakeAddressDeregistrationCertificateCmd
:: forall era e
. Exp.Era era
-> StakeIdentifier
-> Lovelace
-> File () Out
-> CIO e ()
runStakeAddressDeregistrationCertificateCmd :: forall era e.
Era era -> StakeIdentifier -> Coin -> File () 'Out -> CIO e ()
runStakeAddressDeregistrationCertificateCmd Era era
era StakeIdentifier
stakeVerifier Coin
deposit File () 'Out
oFp = do
stakeCred <-
StakeIdentifier -> CIO e StakeCredential
forall e. StakeIdentifier -> CIO e StakeCredential
getStakeCredentialFromIdentifier StakeIdentifier
stakeVerifier
let deRegCert =
Era era
-> (EraCommonConstraints era => Certificate (LedgerEra era))
-> Certificate (LedgerEra era)
forall era a. Era era -> (EraCommonConstraints era => a) -> a
obtainCommonConstraints Era era
era ((EraCommonConstraints era => Certificate (LedgerEra era))
-> Certificate (LedgerEra era))
-> (EraCommonConstraints era => Certificate (LedgerEra era))
-> Certificate (LedgerEra era)
forall a b. (a -> b) -> a -> b
$
StakeCredential -> Coin -> Certificate (LedgerEra era)
forall era.
IsEra era =>
StakeCredential -> Coin -> Certificate (LedgerEra era)
Exp.makeStakeAddressUnregistrationCertificate StakeCredential
stakeCred Coin
deposit
:: Exp.Certificate (Exp.LedgerEra era)
fromEitherIOCli @(FileError ()) $
writeLazyByteStringFile oFp $
obtainCommonConstraints era $
textEnvelopeToJSON (Just deregCertDesc) deRegCert
where
deregCertDesc :: TextEnvelopeDescr
deregCertDesc :: TextEnvelopeDescr
deregCertDesc = TextEnvelopeDescr
"Stake Address Deregistration Certificate"
runStakeAddressRegistrationAndDelegationCertificateCmd
:: forall era e
. Exp.Era era
-> StakeIdentifier
-> StakePoolKeyHashSource
-> Lovelace
-> File () Out
-> CIO e ()
runStakeAddressRegistrationAndDelegationCertificateCmd :: forall era e.
Era era
-> StakeIdentifier
-> StakePoolKeyHashSource
-> Coin
-> File () 'Out
-> CIO e ()
runStakeAddressRegistrationAndDelegationCertificateCmd Era era
era StakeIdentifier
stakeVerifier StakePoolKeyHashSource
poolVKeyOrHashOrFile Coin
deposit File () 'Out
outFp =
do
StakePoolKeyHash poolStakeVKeyHash <- StakePoolKeyHashSource -> RIO e (Hash StakePoolKey)
forall (m :: * -> *).
MonadIO m =>
StakePoolKeyHashSource -> m (Hash StakePoolKey)
getHashFromStakePoolKeyHashSource StakePoolKeyHashSource
poolVKeyOrHashOrFile
stakeCred <-
getStakeCredentialFromIdentifier stakeVerifier
let delegatee = KeyHash 'StakePool -> Delegatee
L.DelegStake KeyHash 'StakePool
poolStakeVKeyHash
let certificate =
Era era
-> (EraCommonConstraints era => Certificate (LedgerEra era))
-> Certificate (LedgerEra era)
forall era a. Era era -> (EraCommonConstraints era => a) -> a
obtainCommonConstraints Era era
era ((EraCommonConstraints era => Certificate (LedgerEra era))
-> Certificate (LedgerEra era))
-> (EraCommonConstraints era => Certificate (LedgerEra era))
-> Certificate (LedgerEra era)
forall a b. (a -> b) -> a -> b
$
StakeCredential -> Delegatee -> Coin -> Certificate (LedgerEra era)
forall era.
IsEra era =>
StakeCredential -> Delegatee -> Coin -> Certificate (LedgerEra era)
Exp.makeStakeAddressAndDRepDelegationCertificate StakeCredential
stakeCred Delegatee
delegatee Coin
deposit
:: Exp.Certificate (Exp.LedgerEra era)
fromEitherIOCli @(FileError ()) $
writeLazyByteStringFile outFp $
obtainCommonConstraints era $
textEnvelopeToJSON
(Just @TextEnvelopeDescr "Stake address registration and stake delegation certificate")
certificate
runStakeAddressRegistrationAndVoteDelegationCertificateCmd
:: forall era e
. Exp.Era era
-> StakeIdentifier
-> VoteDelegationTarget
-> Lovelace
-> File () Out
-> CIO e ()
runStakeAddressRegistrationAndVoteDelegationCertificateCmd :: forall era e.
Era era
-> StakeIdentifier
-> VoteDelegationTarget
-> Coin
-> File () 'Out
-> CIO e ()
runStakeAddressRegistrationAndVoteDelegationCertificateCmd Era era
w StakeIdentifier
stakeVerifier VoteDelegationTarget
voteDelegationTarget Coin
keydeposit File () 'Out
outFp =
Era era -> (EraCommonConstraints era => RIO e ()) -> RIO e ()
forall era a. Era era -> (EraCommonConstraints era => a) -> a
obtainCommonConstraints Era era
w ((EraCommonConstraints era => RIO e ()) -> RIO e ())
-> (EraCommonConstraints era => RIO e ()) -> RIO e ()
forall a b. (a -> b) -> a -> b
$ do
stakeCred <-
StakeIdentifier -> CIO e StakeCredential
forall e. StakeIdentifier -> CIO e StakeCredential
getStakeCredentialFromIdentifier StakeIdentifier
stakeVerifier
drep <-
readVoteDelegationTarget voteDelegationTarget
let delegatee = DRep -> Delegatee
L.DelegVote DRep
drep
let certificate =
StakeCredential -> Delegatee -> Coin -> Certificate (LedgerEra era)
forall era.
IsEra era =>
StakeCredential -> Delegatee -> Coin -> Certificate (LedgerEra era)
Exp.makeStakeAddressAndDRepDelegationCertificate StakeCredential
stakeCred Delegatee
delegatee Coin
keydeposit
:: Exp.Certificate (Exp.LedgerEra era)
fromEitherIOCli @(FileError ()) $
writeLazyByteStringFile outFp $
textEnvelopeToJSON
(Just @TextEnvelopeDescr "Stake address registration and vote delegation certificate")
certificate
runStakeAddressRegistrationStakeAndVoteDelegationCertificateCmd
:: forall era e
. Exp.Era era
-> StakeIdentifier
-> StakePoolKeyHashSource
-> VoteDelegationTarget
-> Lovelace
-> File () Out
-> CIO e ()
runStakeAddressRegistrationStakeAndVoteDelegationCertificateCmd :: forall era e.
Era era
-> StakeIdentifier
-> StakePoolKeyHashSource
-> VoteDelegationTarget
-> Coin
-> File () 'Out
-> CIO e ()
runStakeAddressRegistrationStakeAndVoteDelegationCertificateCmd Era era
w StakeIdentifier
stakeVerifier StakePoolKeyHashSource
poolVKeyOrHashOrFile VoteDelegationTarget
voteDelegationTarget Coin
keydeposit File () 'Out
outFp =
Era era -> (EraCommonConstraints era => RIO e ()) -> RIO e ()
forall era a. Era era -> (EraCommonConstraints era => a) -> a
obtainCommonConstraints Era era
w ((EraCommonConstraints era => RIO e ()) -> RIO e ())
-> (EraCommonConstraints era => RIO e ()) -> RIO e ()
forall a b. (a -> b) -> a -> b
$ do
StakePoolKeyHash poolStakeVKeyHash <- StakePoolKeyHashSource -> RIO e (Hash StakePoolKey)
forall (m :: * -> *).
MonadIO m =>
StakePoolKeyHashSource -> m (Hash StakePoolKey)
getHashFromStakePoolKeyHashSource StakePoolKeyHashSource
poolVKeyOrHashOrFile
stakeCred <-
getStakeCredentialFromIdentifier stakeVerifier
drep <-
readVoteDelegationTarget voteDelegationTarget
let delegatee = KeyHash 'StakePool -> DRep -> Delegatee
L.DelegStakeVote KeyHash 'StakePool
poolStakeVKeyHash DRep
drep
let certificate =
StakeCredential -> Delegatee -> Coin -> Certificate (LedgerEra era)
forall era.
IsEra era =>
StakeCredential -> Delegatee -> Coin -> Certificate (LedgerEra era)
Exp.makeStakeAddressAndDRepDelegationCertificate StakeCredential
stakeCred Delegatee
delegatee Coin
keydeposit
:: Exp.Certificate (Exp.LedgerEra era)
fromEitherIOCli @(FileError ()) $
writeLazyByteStringFile outFp $
textEnvelopeToJSON
(Just @TextEnvelopeDescr "Stake address registration and vote delegation certificate")
certificate