Skip to content

Commit

Permalink
Squashed commit of the following:
Browse files Browse the repository at this point in the history
commit 82cc5c1
Merge: 8229fc0 e3dc0a0
Author: Carlos LopezDeLara <carlos.lopezdelara@iohk.io>
Date:   Thu May 2 13:10:52 2024 -0600

    Merge branch 'cl/hardforkinit' of github.com:IntersectMBO/cardano-cli into cl/hardforkinit

commit 8229fc0
Author: Carlos LopezDeLara <carlos.lopezdelara@iohk.io>
Date:   Wed May 1 12:09:49 2024 -0600

    action create-hardfork command

    Co-Authored-By: Clément Hurlin <smelc@users.noreply.github.com>

commit e3dc0a0
Author: Carlos LopezDeLara <carlos.lopezdelara@iohk.io>
Date:   Wed May 1 12:09:49 2024 -0600

    action create-hardfork command

    Co-Authored-By: Clément Hurlin <smelc@users.noreply.github.com>
  • Loading branch information
CarlosLopezDeLara committed May 3, 2024
1 parent d2aca76 commit 9bc83f8
Show file tree
Hide file tree
Showing 8 changed files with 208 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ module Cardano.CLI.EraBased.Commands.Governance.Actions
, GovernanceActionTreasuryWithdrawalCmdArgs(..)
, UpdateProtocolParametersConwayOnwards(..)
, UpdateProtocolParametersPreConway(..)
, GovernanceActionHardforkInitCmdArgs(..)
, CostModelsFile(..)
, renderGovernanceActionCmds
) where
Expand All @@ -37,6 +38,7 @@ data GovernanceActionCmds era
| GovernanceActionCreateNoConfidenceCmd !(GovernanceActionCreateNoConfidenceCmdArgs era)
| GovernanceActionProtocolParametersUpdateCmd !(GovernanceActionProtocolParametersUpdateCmdArgs era)
| GovernanceActionTreasuryWithdrawalCmd !(GovernanceActionTreasuryWithdrawalCmdArgs era)
| GovernanceActionHardforkInitCmd !(GovernanceActionHardforkInitCmdArgs era)
| GovernanceActionInfoCmd !(GovernanceActionInfoCmdArgs era)
| GovernanceActionViewCmd !(GovernanceActionViewCmdArgs era)
deriving Show
Expand Down Expand Up @@ -126,6 +128,19 @@ data GovernanceActionTreasuryWithdrawalCmdArgs era
, outFile :: !(File () Out)
} deriving Show

data GovernanceActionHardforkInitCmdArgs era
= GovernanceActionHardforkInitCmdArgs
{ eon :: !(ConwayEraOnwards era)
, networkId :: !L.Network
, deposit :: !L.Coin
, returnStakeAddress :: !StakeIdentifier
, mPrevGovernanceActionId :: !(Maybe (TxId, Word32))
, proposalUrl :: !ProposalUrl
, proposalHash :: !(L.SafeHash L.StandardCrypto L.AnchorData)
, protVer :: !L.ProtVer
, outFile :: !(File () Out)
} deriving Show

data GovernanceActionViewCmdArgs era
= GovernanceActionViewCmdArgs
{ eon :: !(ConwayEraOnwards era)
Expand Down Expand Up @@ -181,6 +196,9 @@ renderGovernanceActionCmds = ("governance action " <>) . \case
GovernanceActionCreateNoConfidenceCmd {} ->
"create-no-confidence"

GovernanceActionHardforkInitCmd {} ->
"create-hardfork"

GovernanceActionInfoCmd {} ->
"create-info"

Expand Down
49 changes: 47 additions & 2 deletions cardano-cli/src/Cardano/CLI/EraBased/Options/Governance/Actions.hs
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ import Cardano.Api.Shelley

import qualified Cardano.CLI.EraBased.Commands.Governance.Actions as Cmd
import Cardano.CLI.EraBased.Options.Common
import Cardano.CLI.Types.Common
import Cardano.CLI.Parser
import Cardano.CLI.Types.Common

import Data.Foldable
import GHC.Natural (Natural)
Expand All @@ -36,6 +36,7 @@ pGovernanceActionCmds era =
, pGovernanceActionNoConfidenceCmd era
, pGovernanceActionProtocolParametersUpdateCmd era
, pGovernanceActionTreasuryWithdrawalCmd era
, pGovernanceActionHardforkInitCmd era
, pGovernanceActionViewCmd era
]

Expand Down Expand Up @@ -385,4 +386,48 @@ pNetwork = asum $ mconcat
]
]


pNewProtVer :: Parser (Natural, Natural)
pNewProtVer = (,) <$> pProtMajor <*> pProtMinor
where
pProtMajor :: Parser Natural
pProtMajor =
Opt.option Opt.auto $ mconcat
[ Opt.long "protocol-major-version"
, Opt.metavar "MAJOR"
, Opt.help $ mconcat
["Specify the major protocol version to fork into. It must be the next natural number "
, "after the current version and must be supported by the node."
]
]

pProtMinor :: Parser Natural
pProtMinor =
Opt.option Opt.auto $ mconcat
[ Opt.long "protocol-minor-version"
, Opt.metavar "MINOR"
, Opt.help "Minor protocol version. Must be zero when the major protocol version is increased."
]

pPV :: Parser L.ProtVer
pPV = mkProtocolVersionOrErr <$> pNewProtVer

pGovernanceActionHardforkInitCmd
:: CardanoEra era
-> Maybe (Parser (Cmd.GovernanceActionCmds era))
pGovernanceActionHardforkInitCmd era = do
eon <- forEraMaybeEon era
pure
$ subParser "create-hardfork"
$ Opt.info
( fmap Cmd.GovernanceActionHardforkInitCmd $
Cmd.GovernanceActionHardforkInitCmdArgs eon
<$> pNetwork
<*> pGovActionDeposit
<*> pStakeIdentifier (Just "deposit-return")
<*> pPreviousGovernanceAction
<*> pAnchorUrl
<*> pAnchorDataHash
<*> pPV
<*> pFileOutDirection "out-file" "Output filepath of the hardfork proposal."
)
$ Opt.progDesc "Create a hardfork initiation proposal."
41 changes: 41 additions & 0 deletions cardano-cli/src/Cardano/CLI/EraBased/Run/Governance/Actions.hs
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,9 @@ runGovernanceActionCmds = \case
GovernanceActionCreateNoConfidenceCmd args ->
runGovernanceActionCreateNoConfidenceCmd args

GovernanceActionHardforkInitCmd args ->
runGovernanceActionHardforkInitCmd args

GovernanceActionInfoCmd args ->
runGovernanceActionInfoCmd args

Expand Down Expand Up @@ -376,3 +379,41 @@ runGovernanceActionTreasuryWithdrawalCmd
firstExceptT GovernanceActionsCmdWriteFileError . newExceptT
$ conwayEraOnwardsConstraints eon
$ writeFileTextEnvelope outFile Nothing proposal

runGovernanceActionHardforkInitCmd :: ()
=> GovernanceActionHardforkInitCmdArgs era
-> ExceptT GovernanceActionsError IO ()
runGovernanceActionHardforkInitCmd
Cmd.GovernanceActionHardforkInitCmdArgs
{ Cmd.eon
, Cmd.networkId
, Cmd.deposit
, Cmd.returnStakeAddress
, Cmd.mPrevGovernanceActionId
, Cmd.proposalUrl
, Cmd.proposalHash = anchorDataHash
, Cmd.protVer
, Cmd.outFile
} = do
depositStakeCredential
<- firstExceptT GovernanceActionsReadStakeCredErrror
$ getStakeCredentialFromIdentifier returnStakeAddress

let proposalAnchor = L.Anchor
{ L.anchorUrl = unProposalUrl proposalUrl
, L.anchorDataHash
}

let sbe = conwayEraOnwardsToShelleyBasedEra eon
govActIdentifier = L.maybeToStrictMaybe
$ shelleyBasedEraConstraints sbe
$ uncurry createPreviousGovernanceActionId <$> mPrevGovernanceActionId
initHardfork = InitiateHardfork
govActIdentifier
protVer

proposalProcedure = createProposalProcedure sbe networkId deposit depositStakeCredential initHardfork proposalAnchor

firstExceptT GovernanceActionsCmdWriteFileError . newExceptT
$ conwayEraOnwardsConstraints eon
$ writeFileTextEnvelope outFile (Just "Hardfork initiation governance action") proposalProcedure
Original file line number Diff line number Diff line change
Expand Up @@ -222,3 +222,24 @@ hprop_golden_conway_governance_action_create_protocol_parameters_update_partial_
goldenActionFile <- H.note "test/cardano-cli-golden/files/golden/governance/action/conway-create-protocol-parameters-update-partial-costmodels.action"
H.diffFileVsGoldenFile actionFile goldenActionFile

hprop_golden_conway_governance_action_create_hardfork :: Property
hprop_golden_conway_governance_action_create_hardfork =
propertyOnce . H.moduleWorkspace "tmp" $ \tempDir -> do
stakeAddressVKeyFile <- H.note "test/cardano-cli-golden/files/input/governance/stake-address.vkey"

actionFile <- noteTempFile tempDir "action"

void $ execCardanoCLI
["conway", "governance", "action", "create-hardfork"
, "--anchor-url", "example.com"
, "--anchor-data-hash", "c7ddb5b493faa4d3d2d679847740bdce0c5d358d56f9b1470ca67f5652a02745"
, "--mainnet"
, "--deposit-return-stake-verification-key-file", stakeAddressVKeyFile
, "--governance-action-deposit", "12345"
, "--protocol-major-version", "10"
, "--protocol-minor-version", "0"
, "--out-file", actionFile
]

goldenActionFile <- H.note "test/cardano-cli-golden/files/golden/governance/action/hardfork/conway-create-hardfork.action"
H.diffFileVsGoldenFile actionFile goldenActionFile
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"type": "Governance proposal",
"description": "Hardfork initiation governance action",
"cborHex": "84193039581de18f4a3466a404c11eb410313015b88e447d81b60089e25f611600e6058301f6820a00826b6578616d706c652e636f6d5820c7ddb5b493faa4d3d2d679847740bdce0c5d358d56f9b1470ca67f5652a02745"
}
22 changes: 22 additions & 0 deletions cardano-cli/test/cardano-cli-golden/files/golden/help.cli
Original file line number Diff line number Diff line change
Expand Up @@ -6683,6 +6683,7 @@ Usage: cardano-cli conway governance action
| create-no-confidence
| create-protocol-parameters-update
| create-treasury-withdrawal
| create-hardfork
| view
)

Expand Down Expand Up @@ -6863,6 +6864,27 @@ Usage: cardano-cli conway governance action create-treasury-withdrawal

Create a treasury withdrawal.

Usage: cardano-cli conway governance action create-hardfork
( --mainnet
| --testnet
)
--governance-action-deposit NATURAL
( --deposit-return-stake-verification-key STRING
| --deposit-return-stake-verification-key-file FILE
| --deposit-return-stake-key-hash HASH
| --deposit-return-stake-script-file FILE
| --deposit-return-stake-address ADDRESS
)
[--prev-governance-action-tx-id TXID
--prev-governance-action-index WORD32]
--anchor-url TEXT
--anchor-data-hash HASH
--protocol-major-version MAJOR
--protocol-minor-version MINOR
--out-file FILE

Create a hardfork initiation proposal.

Usage: cardano-cli conway governance action view --action-file FILE
[ --output-json
| --output-yaml
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ Usage: cardano-cli conway governance action
| create-no-confidence
| create-protocol-parameters-update
| create-treasury-withdrawal
| create-hardfork
| view
)

Expand All @@ -22,4 +23,5 @@ Available commands:
Create a protocol parameters update.
create-treasury-withdrawal
Create a treasury withdrawal.
create-hardfork Create a hardfork initiation proposal.
view View a governance action.
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
Usage: cardano-cli conway governance action create-hardfork
( --mainnet
| --testnet
)
--governance-action-deposit NATURAL
( --deposit-return-stake-verification-key STRING
| --deposit-return-stake-verification-key-file FILE
| --deposit-return-stake-key-hash HASH
| --deposit-return-stake-script-file FILE
| --deposit-return-stake-address ADDRESS
)
[--prev-governance-action-tx-id TXID
--prev-governance-action-index WORD32]
--anchor-url TEXT
--anchor-data-hash HASH
--protocol-major-version MAJOR
--protocol-minor-version MINOR
--out-file FILE

Create a hardfork initiation proposal.

Available options:
--mainnet Use the mainnet magic id.
--testnet Use the testnet magic id.
--governance-action-deposit NATURAL
Deposit required to submit a governance action.
--deposit-return-stake-verification-key STRING
Stake verification key (Bech32 or hex-encoded).
--deposit-return-stake-verification-key-file FILE
Filepath of the staking verification key.
--deposit-return-stake-key-hash HASH
Stake verification key hash (hex-encoded).
--deposit-return-stake-script-file FILE
Filepath of the staking script.
--deposit-return-stake-address ADDRESS
Target stake address (bech32 format).
--prev-governance-action-tx-id TXID
Txid of the previous governance action.
--prev-governance-action-index WORD32
Action index of the previous governance action.
--anchor-url TEXT Anchor URL
--anchor-data-hash HASH Proposal anchor data hash (obtain it with
"cardano-cli conway governance hash anchor-data ...")
--protocol-major-version MAJOR
Specify the major protocol version to fork into. It
must be the next natural number after the current
version and must be supported by the node.
--protocol-minor-version MINOR
Minor protocol version. Must be zero when the major
protocol version is increased.
--out-file FILE Output filepath of the hardfork proposal.
-h,--help Show this help text

0 comments on commit 9bc83f8

Please sign in to comment.