Skip to content

Commit 39d69d1

Browse files
authored
Merge pull request #1250 from IntersectMBO/jordan/move-protocol-parameters-update
Move protocol parameters update code
2 parents 6e7e982 + 30a9b29 commit 39d69d1

File tree

18 files changed

+281
-225
lines changed

18 files changed

+281
-225
lines changed

cardano-cli/cardano-cli.cabal

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ library
6464
Cardano.CLI.Compatible.Governance.Command
6565
Cardano.CLI.Compatible.Governance.Option
6666
Cardano.CLI.Compatible.Governance.Run
67+
Cardano.CLI.Compatible.Governance.Types
6768
Cardano.CLI.Compatible.Json.Friendly
6869
Cardano.CLI.Compatible.Option
6970
Cardano.CLI.Compatible.Run

cardano-cli/src/Cardano/CLI/Byron/Delegation.hs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ import Cardano.Api.Monad.Error
2020
import Cardano.Api.Pretty
2121
import Cardano.Api.Serialise.Raw
2222

23-
import Cardano.CLI.Byron.Key (ByronKeyFailure, renderByronKeyFailure)
2423
import Cardano.CLI.Type.Common (CertificateFile (..))
2524
import Cardano.Crypto (ProtocolMagicId)
2625
import Cardano.Crypto qualified as Crypto
@@ -38,7 +37,6 @@ import Formatting (Format, sformat)
3837
data ByronDelegationError
3938
= CertificateValidationErrors !FilePath ![Text]
4039
| DlgCertificateDeserialisationFailed !FilePath !Text
41-
| ByronDelegationKeyError !ByronKeyFailure
4240
deriving Show
4341

4442
renderByronDelegationError :: ByronDelegationError -> Doc ann
@@ -47,8 +45,6 @@ renderByronDelegationError = \case
4745
"Certificate validation error(s) at: " <> pshow certFp <> " Errors: " <> pshow errs
4846
DlgCertificateDeserialisationFailed certFp deSererr ->
4947
"Certificate deserialisation error at: " <> pshow certFp <> " Error: " <> pshow deSererr
50-
ByronDelegationKeyError kerr ->
51-
renderByronKeyFailure kerr
5248

5349
-- TODO: we need to support password-protected secrets.
5450

cardano-cli/src/Cardano/CLI/Byron/Vote.hs

Lines changed: 2 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,16 @@
44
{-# LANGUAGE RankNTypes #-}
55

66
module Cardano.CLI.Byron.Vote
7-
( ByronVoteError (..)
8-
, readByronVote
9-
, renderByronVoteError
7+
( readByronVote
108
, runVoteCreation
119
, submitByronVote
1210
)
1311
where
1412

1513
import Cardano.Api
16-
( Doc
17-
, SocketPath
14+
( SocketPath
1815
, deserialiseFromRawBytes
1916
, liftIO
20-
, pretty
2117
, serialiseToRawBytes
2218
)
2319
import Cardano.Api.Byron
@@ -35,18 +31,6 @@ import Cardano.CLI.Type.Common
3531
import Control.Tracer (stdoutTracer, traceWith)
3632
import Data.ByteString qualified as BS
3733

38-
data ByronVoteError
39-
= ByronVoteDecodingError !FilePath
40-
deriving Show
41-
42-
instance Error ByronVoteError where
43-
prettyError = renderByronVoteError
44-
45-
renderByronVoteError :: ByronVoteError -> Doc ann
46-
renderByronVoteError = \case
47-
ByronVoteDecodingError fp ->
48-
"Error decoding Byron vote at " <> pretty fp
49-
5034
runVoteCreation
5135
:: NetworkId
5236
-> SigningKeyFile In

cardano-cli/src/Cardano/CLI/Compatible/Governance/Command.hs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ where
99

1010
import Cardano.Api
1111

12-
import Cardano.CLI.EraBased.Governance.Actions.Command
12+
import Cardano.CLI.Compatible.Governance.Types
1313
import Cardano.CLI.EraBased.Governance.Option
1414
import Cardano.CLI.Type.Key (VerificationKeyOrHashOrFile)
1515

@@ -19,7 +19,8 @@ import Data.Text
1919
-- we can remove all remaining legacy commands. We can also remove/move the exising
2020
-- byron era commands under the new compatiblilty commands.
2121
data CompatibleGovernanceCmds era
22-
= CreateCompatibleProtocolParametersUpdateCmd (GovernanceActionCmds era)
22+
= CreateCompatibleProtocolParametersUpdateCmd
23+
(GovernanceActionProtocolParametersUpdateCmdArgs era)
2324
| CompatibleCreateMirCertificateStakeAddressesCmd
2425
(ShelleyToBabbageEra era)
2526
MIRPot
@@ -44,8 +45,8 @@ data CompatibleGovernanceCmds era
4445

4546
renderCompatibleGovernanceCmds :: CompatibleGovernanceCmds era -> Text
4647
renderCompatibleGovernanceCmds = \case
47-
CreateCompatibleProtocolParametersUpdateCmd cmd ->
48-
renderGovernanceActionCmds cmd
48+
CreateCompatibleProtocolParametersUpdateCmd{} ->
49+
"governance create-protocol-parameters-update"
4950
CompatibleGenesisKeyDelegationCertificate{} ->
5051
"governance create-genesis-key-delegation-certificate"
5152
CompatibleCreateMirCertificateStakeAddressesCmd{} ->

cardano-cli/src/Cardano/CLI/Compatible/Governance/Option.hs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ import Cardano.Api
1111
import Cardano.Api.Experimental (obtainCommonConstraints)
1212

1313
import Cardano.CLI.Compatible.Governance.Command
14+
import Cardano.CLI.Compatible.Governance.Types
1415
import Cardano.CLI.EraBased.Common.Option
15-
import Cardano.CLI.EraBased.Governance.Actions.Command
1616
import Cardano.CLI.EraBased.Governance.Actions.Option
1717
( pCostModelsFile
1818
, pGovActionProtocolParametersUpdate
@@ -53,7 +53,8 @@ pCompatibleGovernanceCmds sbe =
5353
sbe
5454
]
5555

56-
pGovernanceActionCmds :: ShelleyBasedEra era -> Maybe (Parser (GovernanceActionCmds era))
56+
pGovernanceActionCmds
57+
:: ShelleyBasedEra era -> Maybe (Parser (GovernanceActionProtocolParametersUpdateCmdArgs era))
5758
pGovernanceActionCmds sbe =
5859
subInfoParser
5960
"action"
@@ -68,12 +69,11 @@ pGovernanceActionCmds sbe =
6869
pGovernanceActionProtocolParametersUpdateCmd
6970
:: ()
7071
=> ShelleyBasedEra era
71-
-> Maybe (Parser (GovernanceActionCmds era))
72+
-> Maybe (Parser (GovernanceActionProtocolParametersUpdateCmdArgs era))
7273
pGovernanceActionProtocolParametersUpdateCmd sbe = do
7374
w <- forShelleyBasedEraMaybeEon sbe
7475
pure $
75-
GovernanceActionProtocolParametersUpdateCmd
76-
<$> pUpdateProtocolParametersCmd w
76+
pUpdateProtocolParametersCmd w
7777

7878
pUpdateProtocolParametersCmd
7979
:: ShelleyBasedEra era -> Parser (GovernanceActionProtocolParametersUpdateCmdArgs era)

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

Lines changed: 127 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,34 @@
11
{-# LANGUAGE DataKinds #-}
2+
{-# LANGUAGE DuplicateRecordFields #-}
3+
{-# LANGUAGE GADTs #-}
24
{-# LANGUAGE LambdaCase #-}
35
{-# LANGUAGE RankNTypes #-}
6+
{-# LANGUAGE TypeApplications #-}
47

58
module Cardano.CLI.Compatible.Governance.Run
69
( runCompatibleGovernanceCmds
710
)
811
where
912

13+
import Cardano.Api as Api
14+
import Cardano.Api.Ledger qualified as L
15+
1016
import Cardano.CLI.Compatible.Exception
1117
import Cardano.CLI.Compatible.Governance.Command
18+
import Cardano.CLI.Compatible.Governance.Types
1219
import Cardano.CLI.EraBased.Governance.Actions.Run
1320
import Cardano.CLI.EraBased.Governance.GenesisKeyDelegationCertificate.Run
1421
import Cardano.CLI.EraBased.Governance.Run
22+
import Cardano.CLI.Read
23+
import Cardano.CLI.Type.Common
24+
import Cardano.CLI.Type.Error.GovernanceActionsError
1525

1626
import Data.Typeable (Typeable)
1727

1828
runCompatibleGovernanceCmds :: Typeable era => CompatibleGovernanceCmds era -> CIO e ()
1929
runCompatibleGovernanceCmds = \case
2030
CreateCompatibleProtocolParametersUpdateCmd cmd ->
21-
runGovernanceActionCmds cmd
31+
runCompatibleGovernanceActionCreateProtocolParametersUpdateCmd cmd
2232
LatestCompatibleGovernanceCmds cmd -> runGovernanceCmds cmd
2333
CompatibleGenesisKeyDelegationCertificate sta genVk genDelegVk vrfVk out ->
2434
runGovernanceGenesisKeyDelegationCertificate sta genVk genDelegVk vrfVk out
@@ -28,3 +38,119 @@ runCompatibleGovernanceCmds = \case
2838
runGovernanceCreateMirCertificateTransferToReservesCmd w ll oFp
2939
CompatibleCreateMirCertificateTransferToTreasuryCmd w ll oFp ->
3040
runGovernanceCreateMirCertificateTransferToReservesCmd w ll oFp
41+
42+
runCompatibleGovernanceActionCreateProtocolParametersUpdateCmd
43+
:: forall era e
44+
. ()
45+
=> GovernanceActionProtocolParametersUpdateCmdArgs era
46+
-> CIO e ()
47+
runCompatibleGovernanceActionCreateProtocolParametersUpdateCmd eraBasedPParams' = do
48+
let sbe = uppShelleyBasedEra eraBasedPParams'
49+
case sbe of
50+
ShelleyBasedEraShelley ->
51+
shelleyToBabbageProtocolParametersUpdate sbe eraBasedPParams'
52+
ShelleyBasedEraAllegra ->
53+
shelleyToBabbageProtocolParametersUpdate sbe eraBasedPParams'
54+
ShelleyBasedEraMary ->
55+
shelleyToBabbageProtocolParametersUpdate sbe eraBasedPParams'
56+
ShelleyBasedEraAlonzo ->
57+
shelleyToBabbageProtocolParametersUpdate sbe eraBasedPParams'
58+
ShelleyBasedEraBabbage ->
59+
shelleyToBabbageProtocolParametersUpdate sbe eraBasedPParams'
60+
ShelleyBasedEraConway -> conwayProtocolParametersUpdate sbe eraBasedPParams'
61+
where
62+
63+
maybeAddUpdatedCostModel
64+
:: GovernanceActionProtocolParametersUpdateCmdArgs era
65+
-> CIO e (EraBasedProtocolParametersUpdate era)
66+
maybeAddUpdatedCostModel args = case uppCostModelsFile args of
67+
Nothing -> pure $ uppNewPParams args
68+
Just (CostModelsFile alonzoOnwards costModelsFile') -> do
69+
costModels <-
70+
fromExceptTCli $
71+
readCostModels costModelsFile'
72+
pure . addCostModelsToEraBasedProtocolParametersUpdate alonzoOnwards costModels $
73+
uppNewPParams args
74+
75+
conwayProtocolParametersUpdate
76+
:: ShelleyBasedEra ConwayEra
77+
-> GovernanceActionProtocolParametersUpdateCmdArgs ConwayEra
78+
-> CIO e ()
79+
conwayProtocolParametersUpdate sbe args = do
80+
let oFp = uppFilePath args
81+
anyEra = AnyShelleyBasedEra sbe
82+
83+
UpdateProtocolParametersConwayOnwards
84+
_cOnwards
85+
network
86+
deposit'
87+
returnAddr'
88+
proposalUrl'
89+
proposalHash'
90+
checkProposalHash'
91+
mPrevGovActId
92+
mConstitutionalScriptHash <-
93+
fromExceptTCli $
94+
hoistMaybe (GovernanceActionsValueUpdateProtocolParametersNotFound anyEra) $
95+
uppConwayOnwards args
96+
97+
eraBasedPParams <- maybeAddUpdatedCostModel args
98+
99+
depositStakeCredential <-
100+
getStakeCredentialFromIdentifier returnAddr'
101+
102+
let updateProtocolParams = createEraBasedProtocolParamUpdate sbe eraBasedPParams
103+
104+
prevGovActId = L.maybeToStrictMaybe $ L.GovPurposeId <$> mPrevGovActId
105+
proposalAnchor =
106+
L.Anchor
107+
{ L.anchorUrl = unProposalUrl proposalUrl'
108+
, L.anchorDataHash = proposalHash'
109+
}
110+
111+
fromExceptTCli $ carryHashChecks checkProposalHash' proposalAnchor ProposalCheck
112+
113+
let govAct =
114+
UpdatePParams
115+
prevGovActId
116+
updateProtocolParams
117+
(toShelleyScriptHash <$> L.maybeToStrictMaybe mConstitutionalScriptHash)
118+
119+
let proposalProcedure = createProposalProcedure sbe network deposit' depositStakeCredential govAct proposalAnchor
120+
121+
fromEitherIOCli @(FileError ()) $
122+
shelleyBasedEraConstraints sbe $
123+
writeFileTextEnvelope oFp (Just "Update protocol parameters proposal") proposalProcedure
124+
125+
shelleyToBabbageProtocolParametersUpdate
126+
:: Typeable era
127+
=> ShelleyBasedEra era
128+
-> GovernanceActionProtocolParametersUpdateCmdArgs era
129+
-> CIO e ()
130+
shelleyToBabbageProtocolParametersUpdate sbe args = do
131+
let oFp = uppFilePath args
132+
anyEra = AnyShelleyBasedEra sbe
133+
UpdateProtocolParametersPreConway _stB expEpoch genesisVerKeys <-
134+
fromExceptTCli $
135+
hoistMaybe (GovernanceActionsValueUpdateProtocolParametersNotFound anyEra) $
136+
uppPreConway args
137+
138+
eraBasedPParams <- maybeAddUpdatedCostModel args
139+
140+
let updateProtocolParams = createEraBasedProtocolParamUpdate sbe eraBasedPParams
141+
apiUpdateProtocolParamsType = fromLedgerPParamsUpdate sbe updateProtocolParams
142+
143+
genVKeys <-
144+
sequence
145+
[ fromEitherIOCli $
146+
readFileTextEnvelope vkeyFile
147+
| vkeyFile <- genesisVerKeys
148+
]
149+
150+
let genKeyHashes = fmap verificationKeyHash genVKeys
151+
upProp = makeShelleyUpdateProposal apiUpdateProtocolParamsType genKeyHashes expEpoch
152+
153+
fromEitherIOCli @(FileError ()) $
154+
shelleyBasedEraConstraints sbe $
155+
writeLazyByteStringFile oFp $
156+
textEnvelopeToJSON Nothing upProp
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
{-# LANGUAGE DataKinds #-}
2+
{-# LANGUAGE DuplicateRecordFields #-}
3+
{-# LANGUAGE RankNTypes #-}
4+
{-# LANGUAGE StandaloneDeriving #-}
5+
6+
module Cardano.CLI.Compatible.Governance.Types
7+
( GovernanceActionProtocolParametersUpdateCmdArgs (..)
8+
, UpdateProtocolParametersPreConway (..)
9+
, UpdateProtocolParametersConwayOnwards (..)
10+
, CostModelsFile (..)
11+
)
12+
where
13+
14+
import Cardano.Api
15+
import Cardano.Api.Experimental qualified as Exp
16+
import Cardano.Api.Ledger qualified as L
17+
18+
import Cardano.CLI.Type.Common
19+
import Cardano.CLI.Type.Key
20+
21+
data GovernanceActionProtocolParametersUpdateCmdArgs era
22+
= GovernanceActionProtocolParametersUpdateCmdArgs
23+
{ uppShelleyBasedEra :: !(ShelleyBasedEra era)
24+
, uppPreConway :: !(Maybe (UpdateProtocolParametersPreConway era))
25+
, uppConwayOnwards :: !(Maybe (UpdateProtocolParametersConwayOnwards era))
26+
, uppNewPParams :: !(EraBasedProtocolParametersUpdate era)
27+
-- ^ New parameters to be proposed. From Alonzo onwards, the type
28+
-- 'EraBasedProtocolParametersUpdate' also contains cost models. Since all
29+
-- other protocol parameters are read from command line arguments, whereas
30+
-- the cost models are read from a file, we separate the cost models from
31+
-- the rest of the protocol parameters to ease parsing.
32+
, uppCostModelsFile :: !(Maybe (CostModelsFile era))
33+
-- ^ The new cost models proposed. See the comment at 'uppNewPParams' for
34+
-- why this is a separate field.
35+
, uppFilePath :: !(File () Out)
36+
}
37+
deriving Show
38+
39+
data UpdateProtocolParametersPreConway era
40+
= UpdateProtocolParametersPreConway
41+
{ eon :: !(ShelleyToBabbageEra era)
42+
, expiryEpoch :: !EpochNo
43+
, genesisVerificationKeys :: ![VerificationKeyFile In]
44+
}
45+
46+
deriving instance Show (UpdateProtocolParametersPreConway era)
47+
48+
data UpdateProtocolParametersConwayOnwards era
49+
= UpdateProtocolParametersConwayOnwards
50+
{ era :: !(Exp.Era era)
51+
, networkId :: !L.Network
52+
, deposit :: !Lovelace
53+
, returnAddr :: !StakeIdentifier
54+
, proposalUrl :: !ProposalUrl
55+
, proposalHash :: !(L.SafeHash L.AnchorData)
56+
, checkProposalHash :: !(MustCheckHash ProposalUrl)
57+
, governanceActionId :: !(Maybe L.GovActionId)
58+
, constitutionScriptHash :: !(Maybe ScriptHash)
59+
}
60+
61+
deriving instance Show (UpdateProtocolParametersConwayOnwards era)
62+
63+
data CostModelsFile era
64+
= CostModelsFile
65+
{ eon :: !(AlonzoEraOnwards era)
66+
, costModelsFile :: !(File L.CostModels In)
67+
}
68+
deriving Show

cardano-cli/src/Cardano/CLI/Compatible/Transaction/Run.hs

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -38,18 +38,6 @@ import Cardano.CLI.Type.Common
3838
import Control.Monad
3939
import Lens.Micro
4040

41-
data CompatibleTransactionError
42-
= forall err. Error err => CompatibleFileError (FileError err)
43-
| CompatibleProposalError !ProposalError
44-
45-
instance Show CompatibleTransactionError where
46-
show = show . prettyError
47-
48-
instance Error CompatibleTransactionError where
49-
prettyError = \case
50-
CompatibleFileError e -> prettyError e
51-
CompatibleProposalError e -> pshow e
52-
5341
runCompatibleTransactionCmd
5442
:: forall era e
5543
. CompatibleTransactionCmds era

0 commit comments

Comments
 (0)