Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions cabal.project
Original file line number Diff line number Diff line change
Expand Up @@ -65,3 +65,10 @@ if impl (ghc >= 9.12)
-- https://github.com/kapralVV/Unique/issues/11
, Unique:hashable

source-repository-package
type: git
location: https://github.com/IntersectMBO/cardano-api
tag: 45eae266ee73bc19de30400b53112bae78308625
--sha256: sha256-wHw1JahZB/nuFZkNEFpnPfA4vk+c1XLJ6CNFPFy6FYE=
subdir:
cardano-api
325 changes: 167 additions & 158 deletions cardano-cli/src/Cardano/CLI/Compatible/Json/Friendly.hs
Original file line number Diff line number Diff line change
Expand Up @@ -601,172 +601,181 @@ friendlyCertificates sbe = \case
TxCertificatesNone -> Null
TxCertificates _ cs -> array $ map (friendlyCertificate sbe . fst) $ toList cs

friendlyCertificate :: ShelleyBasedEra era -> Certificate era -> Aeson.Value
friendlyCertificate :: ShelleyBasedEra era -> Exp.Certificate (ShelleyLedgerEra era) -> Aeson.Value
friendlyCertificate sbe =
shelleyBasedEraConstraints sbe $
object . (: []) . renderCertificate sbe

renderCertificate :: ShelleyBasedEra era -> Certificate era -> (Aeson.Key, Aeson.Value)
renderCertificate sbe = \case
ShelleyRelatedCertificate _ c ->
shelleyBasedEraConstraints sbe $
case c of
L.ShelleyTxCertDelegCert (L.ShelleyRegCert cred) ->
"stake address registration" .= cred
L.ShelleyTxCertDelegCert (L.ShelleyUnRegCert cred) ->
"stake address deregistration" .= cred
L.ShelleyTxCertDelegCert (L.ShelleyDelegCert cred poolId) ->
"stake address delegation"
.= object
[ "credential" .= cred
, "pool" .= poolId
]
L.ShelleyTxCertPool (L.RetirePool poolId retirementEpoch) ->
"stake pool retirement"
.= object
[ "pool" .= StakePoolKeyHash poolId
, "epoch" .= retirementEpoch
]
L.ShelleyTxCertPool (L.RegPool poolParams) ->
"stake pool registration" .= poolParams
L.ShelleyTxCertGenesisDeleg (L.GenesisDelegCert genesisKeyHash delegateKeyHash vrfKeyHash) ->
"genesis key delegation"
.= object
[ "genesis key hash" .= genesisKeyHash
, "delegate key hash" .= delegateKeyHash
, "VRF key hash" .= vrfKeyHash
]
L.ShelleyTxCertMir (L.MIRCert pot target) ->
"MIR"
.= object
[ "pot" .= friendlyMirPot pot
, friendlyMirTarget sbe target
]
ConwayCertificate w cert ->
conwayEraOnwardsConstraints w $
case cert of
L.RegDRepTxCert credential coin mAnchor ->
"Drep registration certificate"
.= object
[ "deposit" .= coin
, "certificate" .= conwayToObject w credential
, "anchor" .= mAnchor
]
L.UnRegDRepTxCert credential coin ->
"Drep unregistration certificate"
.= object
[ "refund" .= coin
, "certificate" .= conwayToObject w credential
]
L.AuthCommitteeHotKeyTxCert coldCred hotCred
| L.ScriptHashObj sh <- coldCred ->
"Cold committee authorization"
.= object
["script hash" .= sh]
| L.ScriptHashObj sh <- hotCred ->
"Hot committee authorization"
.= object
["script hash" .= sh]
| L.KeyHashObj [email protected]{} <- coldCred
, L.KeyHashObj [email protected]{} <- hotCred ->
"Constitutional committee member hot key registration"
.= object
[ "cold key hash" .= ck
, "hot key hash" .= hk
]
L.ResignCommitteeColdTxCert cred anchor -> case cred of
L.ScriptHashObj sh ->
"Cold committee resignation"
.= object
[ "script hash" .= sh
, "anchor" .= anchor
]
L.KeyHashObj [email protected]{} ->
"Constitutional committee cold key resignation"
.= object
[ "cold key hash" .= ck
]
L.RegTxCert stakeCredential ->
"Stake address registration"
.= object
[ "stake credential" .= stakeCredential
]
L.UnRegTxCert stakeCredential ->
"Stake address deregistration"
.= object
[ "stake credential" .= stakeCredential
]
L.RegDepositTxCert stakeCredential deposit ->
"Stake address registration"
.= object
[ "stake credential" .= stakeCredential
, "deposit" .= deposit
]
L.UnRegDepositTxCert stakeCredential refund ->
"Stake address deregistration"
.= object
[ "stake credential" .= stakeCredential
, "refund" .= refund
]
L.DelegTxCert stakeCredential delegatee ->
"Stake address delegation"
.= object
[ "stake credential" .= stakeCredential
, "delegatee" .= delegateeJson sbe delegatee
]
L.RegDepositDelegTxCert stakeCredential delegatee deposit ->
"Stake address registration and delegation"
.= object
[ "stake credential" .= stakeCredential
, "delegatee" .= delegateeJson sbe delegatee
, "deposit" .= deposit
]
L.RegPoolTxCert poolParams ->
"Pool registration"
renderCertificate
:: ShelleyBasedEra era -> Exp.Certificate (ShelleyLedgerEra era) -> (Aeson.Key, Aeson.Value)
renderCertificate sbe (Exp.Certificate c) =
case sbe of
ShelleyBasedEraShelley -> renderShelleyCertificate sbe c
ShelleyBasedEraAllegra -> renderShelleyCertificate sbe c
ShelleyBasedEraMary -> renderShelleyCertificate sbe c
ShelleyBasedEraAlonzo -> renderShelleyCertificate sbe c
ShelleyBasedEraBabbage -> renderShelleyCertificate sbe c
ShelleyBasedEraConway -> renderConwayCertificate c

renderDrepCredential
:: ()
=> L.Credential 'L.DRepRole
-> Aeson.Value
renderDrepCredential =
object . \case
L.ScriptHashObj sHash -> ["scriptHash" .= sHash]
L.KeyHashObj keyHash -> ["keyHash" .= keyHash]

delegateeJson
:: L.Delegatee
-> Aeson.Value
delegateeJson =
object . \case
L.DelegStake [email protected]{} ->
[ "delegatee type" .= String "stake"
, "key hash" .= hk
]
L.DelegVote drep -> do
["delegatee type" .= String "vote", "DRep" .= drep]
L.DelegStakeVote kh drep ->
[ "delegatee type" .= String "stake vote"
, "key hash" .= kh
, "DRep" .= drep
]

renderShelleyCertificate
:: ShelleyBasedEra era -> Ledger.ShelleyTxCert (ShelleyLedgerEra era) -> (Aeson.Key, Aeson.Value)
renderShelleyCertificate sbe c =
case c of
L.ShelleyTxCertDelegCert (L.ShelleyRegCert cred) ->
"stake address registration" .= cred
L.ShelleyTxCertDelegCert (L.ShelleyUnRegCert cred) ->
"stake address deregistration" .= cred
L.ShelleyTxCertDelegCert (L.ShelleyDelegCert cred poolId) ->
"stake address delegation"
.= object
[ "credential" .= cred
, "pool" .= poolId
]
L.ShelleyTxCertPool (L.RetirePool poolId retirementEpoch) ->
"stake pool retirement"
.= object
[ "pool" .= StakePoolKeyHash poolId
, "epoch" .= retirementEpoch
]
L.ShelleyTxCertPool (L.RegPool poolParams) ->
"stake pool registration" .= poolParams
L.ShelleyTxCertGenesisDeleg (L.GenesisDelegCert genesisKeyHash delegateKeyHash vrfKeyHash) ->
"genesis key delegation"
.= object
[ "genesis key hash" .= genesisKeyHash
, "delegate key hash" .= delegateKeyHash
, "VRF key hash" .= vrfKeyHash
]
L.ShelleyTxCertMir (L.MIRCert pot target) ->
"MIR"
.= object
[ "pot" .= friendlyMirPot pot
, friendlyMirTarget sbe target
]

renderConwayCertificate
:: Ledger.ConwayTxCert (ShelleyLedgerEra ConwayEra) -> (Aeson.Key, Aeson.Value)
renderConwayCertificate cert =
case cert of
L.RegDRepTxCert credential coin mAnchor ->
"Drep registration certificate"
.= object
[ "deposit" .= coin
, "certificate" .= renderDrepCredential credential
, "anchor" .= mAnchor
]
L.UnRegDRepTxCert credential coin ->
"Drep unregistration certificate"
.= object
[ "refund" .= coin
, "certificate" .= renderDrepCredential credential
]
L.AuthCommitteeHotKeyTxCert coldCred hotCred
| L.ScriptHashObj sh <- coldCred ->
"Cold committee authorization"
.= object
[ "pool params" .= poolParams
]
L.RetirePoolTxCert [email protected]{} epoch ->
"Pool retirement"
["script hash" .= sh]
| L.ScriptHashObj sh <- hotCred ->
"Hot committee authorization"
.= object
[ "stake pool key hash" .= kh
, "epoch" .= epoch
]
L.UpdateDRepTxCert drepCredential mbAnchor ->
"Drep certificate update"
["script hash" .= sh]
| L.KeyHashObj [email protected]{} <- coldCred
, L.KeyHashObj [email protected]{} <- hotCred ->
"Constitutional committee member hot key registration"
.= object
[ "Drep credential" .= drepCredential
, "anchor " .= mbAnchor
[ "cold key hash" .= ck
, "hot key hash" .= hk
]
where
conwayToObject
:: ()
=> ConwayEraOnwards era
-> L.Credential 'L.DRepRole
-> Aeson.Value
conwayToObject w' =
conwayEraOnwardsConstraints w' $
object . \case
L.ScriptHashObj sHash -> ["scriptHash" .= sHash]
L.KeyHashObj keyHash -> ["keyHash" .= keyHash]

delegateeJson
:: ShelleyBasedEra era
-> L.Delegatee
-> Aeson.Value
delegateeJson _ =
object . \case
L.DelegStake [email protected]{} ->
[ "delegatee type" .= String "stake"
, "key hash" .= hk
]
L.DelegVote drep -> do
["delegatee type" .= String "vote", "DRep" .= drep]
L.DelegStakeVote kh drep ->
[ "delegatee type" .= String "stake vote"
, "key hash" .= kh
, "DRep" .= drep
]
L.ResignCommitteeColdTxCert cred anchor -> case cred of
L.ScriptHashObj sh ->
"Cold committee resignation"
.= object
[ "script hash" .= sh
, "anchor" .= anchor
]
L.KeyHashObj [email protected]{} ->
"Constitutional committee cold key resignation"
.= object
[ "cold key hash" .= ck
]
L.RegTxCert stakeCredential ->
"Stake address registration"
.= object
[ "stake credential" .= stakeCredential
]
L.UnRegTxCert stakeCredential ->
"Stake address deregistration"
.= object
[ "stake credential" .= stakeCredential
]
L.RegDepositTxCert stakeCredential deposit ->
"Stake address registration"
.= object
[ "stake credential" .= stakeCredential
, "deposit" .= deposit
]
L.UnRegDepositTxCert stakeCredential refund ->
"Stake address deregistration"
.= object
[ "stake credential" .= stakeCredential
, "refund" .= refund
]
L.DelegTxCert stakeCredential delegatee ->
"Stake address delegation"
.= object
[ "stake credential" .= stakeCredential
, "delegatee" .= delegateeJson delegatee
]
L.RegDepositDelegTxCert stakeCredential delegatee deposit ->
"Stake address registration and delegation"
.= object
[ "stake credential" .= stakeCredential
, "delegatee" .= delegateeJson delegatee
, "deposit" .= deposit
]
L.RegPoolTxCert poolParams ->
"Pool registration"
.= object
[ "pool params" .= poolParams
]
L.RetirePoolTxCert [email protected]{} epoch ->
"Pool retirement"
.= object
[ "stake pool key hash" .= kh
, "epoch" .= epoch
]
L.UpdateDRepTxCert drepCredential mbAnchor ->
"Drep certificate update"
.= object
[ "Drep credential" .= drepCredential
, "anchor " .= mbAnchor
]

friendlyMirTarget
:: ShelleyBasedEra era -> L.MIRTarget -> Aeson.Pair
Expand Down
7 changes: 4 additions & 3 deletions cardano-cli/src/Cardano/CLI/Compatible/StakeAddress/Run.hs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ module Cardano.CLI.Compatible.StakeAddress.Run
where

import Cardano.Api
import Cardano.Api.Experimental qualified as Exp
import Cardano.Api.Ledger qualified as L

import Cardano.CLI.Compatible.Exception
Expand Down Expand Up @@ -106,17 +107,17 @@ createStakeDelegationCertificate
:: ShelleyBasedEra era
-> StakeCredential
-> Hash StakePoolKey
-> Certificate era
-> Exp.Certificate (ShelleyLedgerEra era)
createStakeDelegationCertificate sbe stakeCredential stakePoolHash = do
caseShelleyToBabbageOrConwayEraOnwards
( \w ->
shelleyToBabbageEraConstraints w $
ShelleyRelatedCertificate w $
Exp.Certificate $
L.mkDelegStakeTxCert (toShelleyStakeCredential stakeCredential) (toLedgerHash stakePoolHash)
)
( \w ->
conwayEraOnwardsConstraints w $
ConwayCertificate w $
Exp.Certificate $
L.mkDelegTxCert
(toShelleyStakeCredential stakeCredential)
(L.DelegStake (toLedgerHash stakePoolHash))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,13 +42,13 @@ data StakeAddressCmds era
StakePoolKeyHashSource
(File () Out)
| StakeAddressStakeAndVoteDelegationCertificateCmd
(ConwayEraOnwards era)
(Exp.Era era)
StakeIdentifier
StakePoolKeyHashSource
VoteDelegationTarget
(File () Out)
| StakeAddressVoteDelegationCertificateCmd
(ConwayEraOnwards era)
(Exp.Era era)
StakeIdentifier
VoteDelegationTarget
(File () Out)
Expand Down
Loading
Loading