From 460ca61133c961a37dd993e1f949c968e1237fdc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jann=20M=C3=BCller?= Date: Tue, 8 Oct 2024 10:38:57 +0200 Subject: [PATCH 1/3] WIP --- src/devnet/config/devnet/genesis-shelley.json | 2 +- src/devnet/lib/Convex/Devnet/CardanoNode.hs | 170 ++++++------------ .../lib/Convex/Devnet/CardanoNode/Types.hs | 98 +++++++++- src/devnet/test/Spec.hs | 23 +-- 4 files changed, 157 insertions(+), 136 deletions(-) diff --git a/src/devnet/config/devnet/genesis-shelley.json b/src/devnet/config/devnet/genesis-shelley.json index 9e55b255..80726619 100644 --- a/src/devnet/config/devnet/genesis-shelley.json +++ b/src/devnet/config/devnet/genesis-shelley.json @@ -28,7 +28,7 @@ "minPoolCost": 0, "minUTxOValue": 0, "nOpt": 100, - "poolDeposit": 0, + "poolDeposit": 500000000, "protocolVersion": { "major": 7, "minor": 0 diff --git a/src/devnet/lib/Convex/Devnet/CardanoNode.hs b/src/devnet/lib/Convex/Devnet/CardanoNode.hs index 4e9f01b0..47cfcfdd 100644 --- a/src/devnet/lib/Convex/Devnet/CardanoNode.hs +++ b/src/devnet/lib/Convex/Devnet/CardanoNode.hs @@ -52,11 +52,15 @@ import Control.Tracer (Tracer, traceWith) import Convex.BuildTx (addCertificate, execBuildTx, payToAddress) import Convex.CoinSelection (ChangeOutputPosition (TrailingChange)) -import Convex.Devnet.CardanoNode.Types (GenesisConfigChanges (..), +import Convex.Devnet.CardanoNode.Types (CardanoNodeArgs (..), + ConfigFilePath (..), + GenesisConfigChanges (..), Port, PortsConfig (..), RunningNode (..), RunningStakePoolNode (..), StakePoolNodeParams (..), + cardanoNodeProcess, + defaultCardanoNodeArgs, defaultPortsConfig) import qualified Convex.Devnet.NodeQueries as Q import Convex.Devnet.Utils (checkProcessHasNotDied, @@ -84,50 +88,15 @@ import System.FilePath (()) import System.IO (BufferMode (NoBuffering), hSetBuffering) import System.Posix (ownerReadMode, setFileMode) -import System.Process (CreateProcess (..), - StdStream (UseHandle), proc, +import System.Process (CmdSpec (..), + CreateProcess (..), + StdStream (UseHandle), readProcess, + showCommandForUser, withCreateProcess) import Prelude --- | Arguments given to the 'cardano-node' command-line to run a node. -data CardanoNodeArgs = CardanoNodeArgs - { nodeSocket :: FilePath - , nodeConfigFile :: FilePath - , nodeByronGenesisFile :: FilePath - , nodeShelleyGenesisFile :: FilePath - , nodeAlonzoGenesisFile :: FilePath - , nodeConwayGenesisFile :: FilePath - , nodeTopologyFile :: FilePath - , nodeDatabaseDir :: FilePath - , nodeDlgCertFile :: Maybe FilePath - , nodeSignKeyFile :: Maybe FilePath - , nodeOpCertFile :: Maybe FilePath - , nodeKesKeyFile :: Maybe FilePath - , nodeVrfKeyFile :: Maybe FilePath - , nodePort :: Maybe Port - } - -defaultCardanoNodeArgs :: CardanoNodeArgs -defaultCardanoNodeArgs = - CardanoNodeArgs - { nodeSocket = "node.socket" - , nodeConfigFile = "cardano-node.json" - , nodeByronGenesisFile = "genesis-byron.json" - , nodeShelleyGenesisFile = "genesis-shelley.json" - , nodeAlonzoGenesisFile = "genesis-alonzo.json" - , nodeConwayGenesisFile = "genesis-conway.json" - , nodeTopologyFile = "topology.json" - , nodeDatabaseDir = "db" - , nodeDlgCertFile = Nothing - , nodeSignKeyFile = Nothing - , nodeOpCertFile = Nothing - , nodeKesKeyFile = Nothing - , nodeVrfKeyFile = Nothing - , nodePort = Nothing - } - getCardanoNodeVersion :: IO String getCardanoNodeVersion = readProcess "cardano-node" ["--version"] "" @@ -138,23 +107,29 @@ data NodeLog | MsgCLIStatus Text Text | MsgCLIRetry Text | MsgCLIRetryResult Text Int - | MsgNodeStarting {stateDirectory :: FilePath} + | MsgNodeStarting {stateDirectory :: FilePath, configPath :: ConfigFilePath} | MsgSocketIsReady FilePath | MsgSynchronizing {percentDone :: Centi} | MsgNodeIsReady deriving stock (Eq, Show, Generic) deriving anyclass (ToJSON, FromJSON) +cmdSpecString :: CmdSpec -> String +cmdSpecString = \case + ShellCommand s -> s + RawCommand fp args -> showCommandForUser fp args + withCardanoNode :: Tracer IO NodeLog -> NetworkId -> + ConfigFilePath -> FilePath -> CardanoNodeArgs -> (RunningNode -> IO a) -> IO a -withCardanoNode tr networkId stateDirectory args@CardanoNodeArgs{nodeSocket, nodeConfigFile} action = do - traceWith tr $ MsgNodeCmdSpec (Text.pack $ show $ cmdspec process) - traceWith tr $ MsgNodeStarting{stateDirectory} +withCardanoNode tr networkId configFilePath stateDirectory args@CardanoNodeArgs{nodeSocket, nodeConfigFile} action = do + traceWith tr $ MsgNodeCmdSpec (Text.pack $ cmdSpecString $ cmdspec process) + traceWith tr $ MsgNodeStarting{stateDirectory, configPath = configFilePath} withLogFile logFilePath $ \out -> do hSetBuffering out NoBuffering withCreateProcess process{std_out = UseHandle out, std_err = UseHandle out} $ @@ -176,51 +151,13 @@ withCardanoNode tr networkId stateDirectory args@CardanoNodeArgs{nodeSocket, nod let rnNodeConfigFile = stateDirectory nodeConfigFile traceWith tr $ MsgSocketIsReady socketPath rnConnectInfo <- runExceptT (Q.loadConnectInfo rnNodeConfigFile socketPath) >>= either (error . (<>) "Failed to load connect info: " . show) pure - let rn = RunningNode{rnNodeSocket = socketPath, rnNetworkId = networkId, rnNodeConfigFile, rnConnectInfo} + let rn = RunningNode{rnNodeSocket = socketPath, rnNetworkId = networkId, rnNodeConfigFile, rnConnectInfo, rnNodeConfigFilePath = configFilePath, rnNodeArgs = args} action rn cleanupSocketFile = do x <- doesFileExist socketPath when x (removeFile socketPath) --- | Generate command-line arguments for launching @cardano-node@. -cardanoNodeProcess :: Maybe FilePath -> CardanoNodeArgs -> CreateProcess -cardanoNodeProcess cwd args = - (proc "cardano-node" strArgs){cwd} - where - CardanoNodeArgs - { nodeConfigFile - , nodeTopologyFile - , nodeDatabaseDir - , nodeSocket - , nodePort - , nodeSignKeyFile - , nodeDlgCertFile - , nodeOpCertFile - , nodeKesKeyFile - , nodeVrfKeyFile - } = args - - strArgs = - "run" : - mconcat - [ ["--config", nodeConfigFile] - , ["--topology", nodeTopologyFile] - , ["--database-path", nodeDatabaseDir] - , ["--socket-path", nodeSocket] - , opt "--port" (show <$> nodePort) - , opt "--byron-signing-key" nodeSignKeyFile - , opt "--byron-delegation-certificate" nodeDlgCertFile - , opt "--shelley-operational-certificate" nodeOpCertFile - , opt "--shelley-kes-key" nodeKesKeyFile - , opt "--shelley-vrf-key" nodeVrfKeyFile - ] - - opt :: a -> Maybe a -> [a] - opt arg = \case - Nothing -> [] - Just val -> [arg, val] - -- | Wait for the node socket file to become available. waitForSocket :: RunningNode -> IO () waitForSocket = waitForFile . rnNodeSocket @@ -297,8 +234,8 @@ withCardanoNodeDevnet :: FilePath -> (RunningNode -> IO a) -> IO a -withCardanoNodeDevnet tracer stateDirectory action = - withCardanoNodeDevnetConfig tracer stateDirectory mempty defaultPortsConfig action +withCardanoNodeDevnet tracer stateDirectory = + withCardanoNodeDevnetConfig tracer stateDirectory mempty defaultPortsConfig -- | Start a single cardano-node devnet using the config from config/ and -- credentials from config/credentials/. Only the 'Faucet' actor will receive @@ -325,8 +262,9 @@ withCardanoNodeDevnetConfig tracer stateDirectory configChanges PortsConfig{ours , "kes.skey" , "opcert.cert" ] - let args = - defaultCardanoNodeArgs + let cfp = ConfigFilePath stateDirectory + args = + (defaultCardanoNodeArgs cfp) { nodeDlgCertFile = Just dlgCert , nodeSignKeyFile = Just signKey , nodeVrfKeyFile = Just vrfKey @@ -334,11 +272,11 @@ withCardanoNodeDevnetConfig tracer stateDirectory configChanges PortsConfig{ours , nodeOpCertFile = Just opCert , nodePort = Just ours } - copyDevnetFiles args + copyDevnetFiles stateDirectory configChanges args refreshSystemStart stateDirectory args writeTopology peers stateDirectory args - withCardanoNode tracer networkId stateDirectory args $ \rn -> do + withCardanoNode tracer networkId cfp stateDirectory args $ \rn -> do traceWith tracer MsgNodeIsReady action rn where @@ -354,28 +292,29 @@ withCardanoNodeDevnetConfig tracer stateDirectory configChanges PortsConfig{ours setFileMode destination ownerReadMode pure destination - GenesisConfigChanges{cfAlonzo, cfConway, cfShelley, cfNodeConfig} = configChanges - - copyDevnetFiles args = do - readConfigFile ("devnet" "cardano-node.json") - >>= copyAndChangeJSONFile - cfNodeConfig - (stateDirectory nodeConfigFile args) - readConfigFile ("devnet" "genesis-byron.json") - >>= BS.writeFile - (stateDirectory nodeByronGenesisFile args) - readConfigFile ("devnet" "genesis-shelley.json") - >>= copyAndChangeJSONFile - cfShelley - (stateDirectory nodeShelleyGenesisFile args) - readConfigFile ("devnet" "genesis-alonzo.json") - >>= copyAndChangeJSONFile - cfAlonzo - (stateDirectory nodeAlonzoGenesisFile args) - readConfigFile ("devnet" "genesis-conway.json") - >>= copyAndChangeJSONFile - cfConway - (stateDirectory nodeConwayGenesisFile args) +{-| Copy the devnet configuration files to the given directory +-} +copyDevnetFiles :: FilePath -> GenesisConfigChanges -> CardanoNodeArgs -> IO () +copyDevnetFiles stateDirectory GenesisConfigChanges{cfAlonzo, cfConway, cfShelley, cfNodeConfig} args = do + readConfigFile ("devnet" "cardano-node.json") + >>= copyAndChangeJSONFile + cfNodeConfig + (stateDirectory nodeConfigFile args) + readConfigFile ("devnet" "genesis-byron.json") + >>= BS.writeFile + (stateDirectory nodeByronGenesisFile args) + readConfigFile ("devnet" "genesis-shelley.json") + >>= copyAndChangeJSONFile + cfShelley + (stateDirectory nodeShelleyGenesisFile args) + readConfigFile ("devnet" "genesis-alonzo.json") + >>= copyAndChangeJSONFile + cfAlonzo + (stateDirectory nodeAlonzoGenesisFile args) + readConfigFile ("devnet" "genesis-conway.json") + >>= copyAndChangeJSONFile + cfConway + (stateDirectory nodeConwayGenesisFile args) writeTopology :: [Port] -> FilePath -> CardanoNodeArgs -> IO () writeTopology peers stateDirectory args = @@ -483,8 +422,6 @@ withCardanoStakePoolNodeDevnetConfig :: Wallet -> -- | Stake pool params StakePoolNodeParams -> - -- | The absolute path of the cardano-node.json configuration file - FilePath -> -- | Ports config PortsConfig -> -- | Running node @@ -492,7 +429,7 @@ withCardanoStakePoolNodeDevnetConfig :: -- | Action (RunningStakePoolNode -> IO a) -> IO a -withCardanoStakePoolNodeDevnetConfig tracer stateDirectory wallet params nodeConfigFile PortsConfig{ours, peers} node@RunningNode{rnNodeSocket, rnNetworkId} action = do +withCardanoStakePoolNodeDevnetConfig tracer stateDirectory wallet params PortsConfig{ours, peers} node@RunningNode{rnNodeSocket, rnNetworkId, rnNodeArgs, rnNodeConfigFilePath} action = do createDirectoryIfMissing True stateDirectory stakeKey <- C.generateSigningKey C.AsStakeKey @@ -595,17 +532,16 @@ withCardanoStakePoolNodeDevnetConfig tracer stateDirectory wallet params nodeCon let args = - defaultCardanoNodeArgs + rnNodeArgs { nodeVrfKeyFile = Just vrfKeyFile , nodeKesKeyFile = Just kesKeyFile , nodeOpCertFile = Just opCertFile , nodePort = Just ours - , nodeConfigFile = nodeConfigFile } writeTopology peers stateDirectory args - withCardanoNode tracer rnNetworkId stateDirectory args $ \rn -> do + withCardanoNode tracer rnNetworkId rnNodeConfigFilePath stateDirectory args $ \rn -> do traceWith tracer MsgNodeIsReady action (RunningStakePoolNode rn stakeKey vrfKey kesKey stakePoolKey nextOpCertCounter) where diff --git a/src/devnet/lib/Convex/Devnet/CardanoNode/Types.hs b/src/devnet/lib/Convex/Devnet/CardanoNode/Types.hs index 0a12cb2a..9b2daffa 100644 --- a/src/devnet/lib/Convex/Devnet/CardanoNode/Types.hs +++ b/src/devnet/lib/Convex/Devnet/CardanoNode/Types.hs @@ -1,15 +1,22 @@ {-# LANGUAGE DeriveAnyClass #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DerivingStrategies #-} +{-# LANGUAGE LambdaCase #-} +{-# LANGUAGE NamedFieldPuns #-} {-# LANGUAGE OverloadedStrings #-} module Convex.Devnet.CardanoNode.Types ( Port, PortsConfig (..), defaultPortsConfig, + ConfigFilePath(..), RunningNode (..), RunningStakePoolNode (..), StakePoolNodeParams (..), defaultStakePoolNodeParams, + -- * Node arguments + CardanoNodeArgs(..), + defaultCardanoNodeArgs, + cardanoNodeProcess, -- * Genesis config changes GenesisConfigChanges (..), forkIntoConwayInEpoch, @@ -35,6 +42,8 @@ import Data.Ratio ((%)) import GHC.Generics (Generic) import Numeric.Natural (Natural) import Ouroboros.Consensus.Shelley.Eras (ShelleyEra, StandardCrypto) +import System.FilePath (()) +import System.Process (CreateProcess (..), proc) type Port = Int @@ -53,13 +62,19 @@ data PortsConfig = PortsConfig defaultPortsConfig :: PortsConfig defaultPortsConfig = PortsConfig 3001 [] +newtype ConfigFilePath = ConfigFilePath FilePath + deriving stock (Eq, Show) + deriving newtype (ToJSON, FromJSON) + {-| Describes a running pool node -} data RunningNode = RunningNode - { rnNodeSocket :: FilePath -- ^ Cardano node socket - , rnNetworkId :: NetworkId -- ^ Network ID used by the cardano node - , rnNodeConfigFile :: FilePath -- ^ Cardano node config file (JSON) - , rnConnectInfo :: (LocalNodeConnectInfo, Env) -- ^ Connection info for node queries + { rnNodeSocket :: FilePath -- ^ Cardano node socket + , rnNetworkId :: NetworkId -- ^ Network ID used by the cardano node + , rnNodeConfigFilePath :: ConfigFilePath -- ^ Directory of the config files + , rnNodeArgs :: CardanoNodeArgs + , rnNodeConfigFile :: FilePath -- ^ Cardano node config file (JSON) + , rnConnectInfo :: (LocalNodeConnectInfo, Env) -- ^ Connection info for node queries } {-| Describes a running stake pool node @@ -145,3 +160,78 @@ setEpochLength n = let change :: ShelleyGenesis StandardCrypto -> ShelleyGenesis StandardCrypto change g = g{sgEpochLength = n} in mempty{cfShelley = change} + +-- | Arguments given to the 'cardano-node' command-line to run a node. +data CardanoNodeArgs = CardanoNodeArgs + { nodeSocket :: FilePath + , nodeConfigFile :: FilePath + , nodeByronGenesisFile :: FilePath + , nodeShelleyGenesisFile :: FilePath + , nodeAlonzoGenesisFile :: FilePath + , nodeConwayGenesisFile :: FilePath + , nodeTopologyFile :: FilePath + , nodeDatabaseDir :: FilePath + , nodeDlgCertFile :: Maybe FilePath + , nodeSignKeyFile :: Maybe FilePath + , nodeOpCertFile :: Maybe FilePath + , nodeKesKeyFile :: Maybe FilePath + , nodeVrfKeyFile :: Maybe FilePath + , nodePort :: Maybe Port + } + +defaultCardanoNodeArgs :: ConfigFilePath -> CardanoNodeArgs +defaultCardanoNodeArgs (ConfigFilePath configPath) = + CardanoNodeArgs + { nodeSocket = "node.socket" + , nodeConfigFile = configPath "cardano-node.json" + , nodeByronGenesisFile = configPath "genesis-byron.json" + , nodeShelleyGenesisFile = configPath "genesis-shelley.json" + , nodeAlonzoGenesisFile = configPath "genesis-alonzo.json" + , nodeConwayGenesisFile = configPath "genesis-conway.json" + , nodeTopologyFile = "topology.json" + , nodeDatabaseDir = "db" + , nodeDlgCertFile = Nothing + , nodeSignKeyFile = Nothing + , nodeOpCertFile = Nothing + , nodeKesKeyFile = Nothing + , nodeVrfKeyFile = Nothing + , nodePort = Nothing + } + +-- | Generate command-line arguments for launching @cardano-node@. +cardanoNodeProcess :: Maybe FilePath -> CardanoNodeArgs -> CreateProcess +cardanoNodeProcess cwd args = + (proc "cardano-node" strArgs){cwd} + where + CardanoNodeArgs + { nodeConfigFile + , nodeTopologyFile + , nodeDatabaseDir + , nodeSocket + , nodePort + , nodeSignKeyFile + , nodeDlgCertFile + , nodeOpCertFile + , nodeKesKeyFile + , nodeVrfKeyFile + } = args + + strArgs = + "run" : + mconcat + [ ["--config", nodeConfigFile] + , ["--topology", nodeTopologyFile] + , ["--database-path", nodeDatabaseDir] + , ["--socket-path", nodeSocket] + , opt "--port" (show <$> nodePort) + , opt "--byron-signing-key" nodeSignKeyFile + , opt "--byron-delegation-certificate" nodeDlgCertFile + , opt "--shelley-operational-certificate" nodeOpCertFile + , opt "--shelley-kes-key" nodeKesKeyFile + , opt "--shelley-vrf-key" nodeVrfKeyFile + ] + + opt :: a -> Maybe a -> [a] + opt arg = \case + Nothing -> [] + Just val -> [arg, val] diff --git a/src/devnet/test/Spec.hs b/src/devnet/test/Spec.hs index 154be4a4..b8ae625e 100644 --- a/src/devnet/test/Spec.hs +++ b/src/devnet/test/Spec.hs @@ -50,7 +50,6 @@ import Data.Ratio ((%)) import qualified Data.Set as Set import GHC.Generics (Generic) import GHC.IO.Encoding (setLocaleEncoding, utf8) -import System.FilePath (()) import Test.Tasty (defaultMain, testGroup) import Test.Tasty.HUnit (assertBool, assertEqual, testCase) @@ -107,10 +106,9 @@ startLocalStakePoolNode = do withCardanoNodeDevnet (contramap TLNode tr) tmp $ \runningNode -> do let lovelacePerUtxo = 100_000_000 numUtxos = 10 - nodeConfigFile = tmp "cardano-node.json" wllt <- W.createSeededWallet (contramap TLWallet tr) runningNode numUtxos lovelacePerUtxo withTempDir "cardano-cluster-stakepool" $ \tmp' -> do - withCardanoStakePoolNodeDevnetConfig (contramap TLNode tr) tmp' wllt defaultStakePoolNodeParams nodeConfigFile (PortsConfig 3002 [3001]) runningNode $ \RunningStakePoolNode{rspnNode} -> do + withCardanoStakePoolNodeDevnetConfig (contramap TLNode tr) tmp' wllt defaultStakePoolNodeParams (PortsConfig 3002 [3001]) runningNode $ \RunningStakePoolNode{rspnNode} -> do runExceptT (loadConnectInfo (rnNodeConfigFile rspnNode) (rnNodeSocket rspnNode)) >>= \case Left err -> failure (show err) Right{} -> pure () @@ -123,12 +121,11 @@ registeredStakePoolNode = do withCardanoNodeDevnet (contramap TLNode tr) tmp $ \runningNode@RunningNode{rnConnectInfo} -> do let lovelacePerUtxo = 100_000_000 numUtxos = 10 - nodeConfigFile = tmp "cardano-node.json" wllt <- W.createSeededWallet (contramap TLWallet tr) runningNode numUtxos lovelacePerUtxo let mode = fst rnConnectInfo initialStakePools <- queryStakePools mode withTempDir "cardano-cluster-stakepool" $ \tmp' -> do - withCardanoStakePoolNodeDevnetConfig (contramap TLNode tr) tmp' wllt defaultStakePoolNodeParams nodeConfigFile (PortsConfig 3002 [3001]) runningNode $ \_ -> do + withCardanoStakePoolNodeDevnetConfig (contramap TLNode tr) tmp' wllt defaultStakePoolNodeParams (PortsConfig 3002 [3001]) runningNode $ \_ -> do currentStakePools <- queryStakePools mode let initial = length initialStakePools @@ -143,20 +140,18 @@ stakePoolRewards = do withCardanoNodeDevnetConfig (contramap TLNode tr) tmp confChange (PortsConfig 3001 [3002]) $ \runningNode -> do let lovelacePerUtxo = 10_000_000_000 numUtxos = 4 - nodeConfigFile = tmp "cardano-node.json" wllt <- W.createSeededWallet (contramap TLWallet tr) runningNode numUtxos lovelacePerUtxo let stakepoolParams = StakePoolNodeParams { spnCost = 340_000_000 , spnMargin = 1 % 100 - , spnPledge = 10_000_000_000 --100_000_000 + , spnPledge = 10_000_000_000 } withTempDir "cardano-cluster-stakepool" $ \tmp' -> do - withCardanoStakePoolNodeDevnetConfig (contramap TLNode tr) tmp' wllt stakepoolParams nodeConfigFile (PortsConfig 3002 [3001]) runningNode $ \RunningStakePoolNode{rspnStakeKey} -> do + withCardanoStakePoolNodeDevnetConfig (contramap TLNode tr) tmp' wllt stakepoolParams (PortsConfig 3002 [3001]) runningNode $ \RunningStakePoolNode{rspnNode, rspnStakeKey} -> do let stakeHash = C.verificationKeyHash . C.getVerificationKey $ rspnStakeKey - _stakeCred = C.StakeCredentialByKey stakeHash - -- waitForStakeRewards tr rspnNode stakeCred - -- >>= assertBool "Expect staking rewards" $ rewards > 0 - assertBool "FIXME" True + stakeCred = C.StakeCredentialByKey stakeHash + rewards <- waitForStakeRewards tr rspnNode stakeCred + assertBool "Expect staking rewards" $ rewards > 0 where confChange = GenesisConfigChanges @@ -175,8 +170,8 @@ stakePoolRewards = do in sum . Map.elems . fst <$> queryStakeAddresses mode creds rnNetworkId - _waitForStakeRewards :: Tracer IO TestLog -> RunningNode -> C.StakeCredential -> IO C.Quantity - _waitForStakeRewards tr node cred = do + waitForStakeRewards :: Tracer IO TestLog -> RunningNode -> C.StakeCredential -> IO C.Quantity + waitForStakeRewards tr node cred = do rw <- getStakeRewards node cred traceWith tr $ TLRewards rw waitForStakeRewards' node cred rw From 474bb6d928fd5800b6629b29ccb72bff530fa722 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jann=20M=C3=BCller?= Date: Thu, 10 Oct 2024 09:14:14 +0200 Subject: [PATCH 2/3] WIP --- src/devnet/config/devnet/genesis-shelley.json | 4 ++-- src/devnet/convex-devnet.cabal | 1 - src/devnet/lib/Convex/Devnet/CardanoNode.hs | 6 +++--- src/devnet/lib/Convex/Devnet/CardanoNode/Types.hs | 2 +- src/devnet/test/Spec.hs | 2 +- 5 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/devnet/config/devnet/genesis-shelley.json b/src/devnet/config/devnet/genesis-shelley.json index 80726619..d30d3dbc 100644 --- a/src/devnet/config/devnet/genesis-shelley.json +++ b/src/devnet/config/devnet/genesis-shelley.json @@ -25,8 +25,8 @@ "maxTxSize": 16384, "minFeeA": 44, "minFeeB": 155381, - "minPoolCost": 0, - "minUTxOValue": 0, + "minPoolCost": 340000000, + "minUTxOValue": 1000000, "nOpt": 100, "poolDeposit": 500000000, "protocolVersion": { diff --git a/src/devnet/convex-devnet.cabal b/src/devnet/convex-devnet.cabal index 821bf20b..67714efb 100644 --- a/src/devnet/convex-devnet.cabal +++ b/src/devnet/convex-devnet.cabal @@ -121,4 +121,3 @@ test-suite convex-devnet-test , mtl , aeson , containers - , filepath diff --git a/src/devnet/lib/Convex/Devnet/CardanoNode.hs b/src/devnet/lib/Convex/Devnet/CardanoNode.hs index 47cfcfdd..23d83dc3 100644 --- a/src/devnet/lib/Convex/Devnet/CardanoNode.hs +++ b/src/devnet/lib/Convex/Devnet/CardanoNode.hs @@ -491,7 +491,7 @@ withCardanoStakePoolNodeDevnetConfig tracer stateDirectory wallet params PortsCo -- create the node certificate let opCertCounter = - OperationalCertificateIssueCounter 0 stakePoolVerKey + OperationalCertificateIssueCounter 1 stakePoolVerKey slotsPerKESPeriod = 129600 -- slotsPerKESPeriod from config/genesis-shelley.json kesPeriod = KESPeriod . fromIntegral . div slotNo $ slotsPerKESPeriod -- Word64 to Word opCert = C.issueOperationalCertificate @@ -517,13 +517,13 @@ withCardanoStakePoolNodeDevnetConfig tracer stateDirectory wallet params PortsCo delegCertTx = execBuildTx $ do addCertificate delegationCert - _ <- W.balanceAndSubmit mempty node wallet stakeCertTx TrailingChange [C.WitnessStakeKey stakeKey] + _ <- W.balanceAndSubmit mempty node wallet stakeCertTx TrailingChange [C.WitnessStakeKey stakeKey, C.WitnessStakePoolKey stakePoolKey] _ <- waitForNextBlock node _ <- W.balanceAndSubmit mempty node wallet poolCertTx TrailingChange [C.WitnessStakeKey stakeKey, C.WitnessStakePoolKey stakePoolKey] _ <- waitForNextBlock node - _ <- W.balanceAndSubmit mempty node wallet delegCertTx TrailingChange [C.WitnessStakeKey stakeKey] + _ <- W.balanceAndSubmit mempty node wallet delegCertTx TrailingChange [C.WitnessStakeKey stakeKey, C.WitnessStakePoolKey stakePoolKey] _ <- waitForNextBlock node vrfKeyFile <- writeEnvelope vrfKey "vrf.skey" diff --git a/src/devnet/lib/Convex/Devnet/CardanoNode/Types.hs b/src/devnet/lib/Convex/Devnet/CardanoNode/Types.hs index 9b2daffa..af834bb7 100644 --- a/src/devnet/lib/Convex/Devnet/CardanoNode/Types.hs +++ b/src/devnet/lib/Convex/Devnet/CardanoNode/Types.hs @@ -97,7 +97,7 @@ data StakePoolNodeParams = StakePoolNodeParams } defaultStakePoolNodeParams :: StakePoolNodeParams -defaultStakePoolNodeParams = StakePoolNodeParams 0 (3 % 100) 0 +defaultStakePoolNodeParams = StakePoolNodeParams 340000000 (3 % 100) 340000000 {-| Modifications to apply to the default genesis configurations -} diff --git a/src/devnet/test/Spec.hs b/src/devnet/test/Spec.hs index b8ae625e..5a29aa7d 100644 --- a/src/devnet/test/Spec.hs +++ b/src/devnet/test/Spec.hs @@ -135,7 +135,7 @@ registeredStakePoolNode = do stakePoolRewards :: IO () stakePoolRewards = do showLogsOnFailure $ \tr -> do - failAfter 50 $ + failAfter 100 $ withTempDir "cardano-cluster" $ \tmp -> do withCardanoNodeDevnetConfig (contramap TLNode tr) tmp confChange (PortsConfig 3001 [3002]) $ \runningNode -> do let lovelacePerUtxo = 10_000_000_000 From 6c7c2822b01bcab71e1ded46c90aad9da7058174 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jann=20M=C3=BCller?= Date: Wed, 16 Oct 2024 11:06:15 +0200 Subject: [PATCH 3/3] ? --- src/devnet/lib/Convex/Devnet/CardanoNode.hs | 2 +- src/devnet/test/Spec.hs | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/devnet/lib/Convex/Devnet/CardanoNode.hs b/src/devnet/lib/Convex/Devnet/CardanoNode.hs index 23d83dc3..c3c22321 100644 --- a/src/devnet/lib/Convex/Devnet/CardanoNode.hs +++ b/src/devnet/lib/Convex/Devnet/CardanoNode.hs @@ -491,7 +491,7 @@ withCardanoStakePoolNodeDevnetConfig tracer stateDirectory wallet params PortsCo -- create the node certificate let opCertCounter = - OperationalCertificateIssueCounter 1 stakePoolVerKey + OperationalCertificateIssueCounter 0 stakePoolVerKey slotsPerKESPeriod = 129600 -- slotsPerKESPeriod from config/genesis-shelley.json kesPeriod = KESPeriod . fromIntegral . div slotNo $ slotsPerKESPeriod -- Word64 to Word opCert = C.issueOperationalCertificate diff --git a/src/devnet/test/Spec.hs b/src/devnet/test/Spec.hs index 5a29aa7d..e766deb3 100644 --- a/src/devnet/test/Spec.hs +++ b/src/devnet/test/Spec.hs @@ -142,9 +142,9 @@ stakePoolRewards = do numUtxos = 4 wllt <- W.createSeededWallet (contramap TLWallet tr) runningNode numUtxos lovelacePerUtxo let stakepoolParams = StakePoolNodeParams - { spnCost = 340_000_000 - , spnMargin = 1 % 100 - , spnPledge = 10_000_000_000 + { spnCost = 500_000_000 + , spnMargin = 3 % 100 + , spnPledge = 500_000_000 } withTempDir "cardano-cluster-stakepool" $ \tmp' -> do withCardanoStakePoolNodeDevnetConfig (contramap TLNode tr) tmp' wllt stakepoolParams (PortsConfig 3002 [3001]) runningNode $ \RunningStakePoolNode{rspnNode, rspnStakeKey} -> do