From d3bb7310692b9e5f0dbb51dd9a630ad57b0e2272 Mon Sep 17 00:00:00 2001 From: John Ky Date: Tue, 5 Oct 2021 22:29:44 +1100 Subject: [PATCH 1/2] Original mainnet configuration --- configuration/cardano/mainnet-config.yaml | 259 ++++++++++++++++++++++ 1 file changed, 259 insertions(+) create mode 100644 configuration/cardano/mainnet-config.yaml diff --git a/configuration/cardano/mainnet-config.yaml b/configuration/cardano/mainnet-config.yaml new file mode 100644 index 00000000000..d5704dde52c --- /dev/null +++ b/configuration/cardano/mainnet-config.yaml @@ -0,0 +1,259 @@ +########################################################## +############### Mainnet ######### +############### Cardano Byron Node Configuration ######### +########################################################## + + +##### Locations ##### + +GenesisFile: genesis.json +SocketPath: db/node.socket + +##### Blockfetch Protocol + +# The maximum number of used peers during bulk sync. +MaxConcurrencyBulkSync: 1 +# The maximum number of used peers when fetching newly forged blocks. +MaxConcurrencyDeadline: 2 + +#TODO: These parameters cannot yet be used in the config file, only on the CLI: +#DatabasePath: db/ +#Topology: configuration/mainnet-topology.json +#Port 7776 + +##### Core protocol parameters ##### + +# This is the instance of the Ouroboros family that we are running. +# "RealPBFT" is the real (permissive) OBFT protocol, which is what we use on +# mainnet in Byron era. +Protocol: RealPBFT + +# The mainnet does not include the network magic into addresses. Testnets do. +RequiresNetworkMagic: RequiresNoMagic + + +##### Update system parameters ##### + +# This protocol version number gets used by block producing nodes as part +# of the system for agreeing on and synchronising protocol updates. +LastKnownBlockVersion-Major: 0 +LastKnownBlockVersion-Minor: 2 +LastKnownBlockVersion-Alt: 0 + +# In the Byron era some software versions are also published on the chain. +# We do this only for Byron compatibility now. +ApplicationName: cardano-sl +ApplicationVersion: 1 + + +##### Logging configuration ##### + +# Enable or disable logging overall +TurnOnLogging: True + +# Enable the collection of various OS metrics such as memory and CPU use. +# These metrics are traced in the context name: 'cardano.node.metrics' and can +# be directed to the logs or monitoring backends. +TurnOnLogMetrics: True + +# Global logging severity filter. Messages must have at least this severity to +# pass. Typical values would be Warning, Notice, Info or Debug. +minSeverity: Info + +# Log items can be rendered with more or less verbose detail. +# Verbosity ranges from MinimalVerbosity, NormalVerbosity to MaximalVerbosity +TracingVerbosity: NormalVerbosity + +# The system supports a number of backends for logging and monitoring. +# This setting lists the backends that will be available to use in the +# configuration below. The logging backend is called Katip. +setupBackends: + - KatipBK + +# This specifies the default backends that trace output is sent to if it +# is not specifically configured to be sent to other backends. +defaultBackends: + - KatipBK + +# EKG is a simple metrics monitoring system. Uncomment the following to enable +# this backend and listen on the given local port and point your web browser to +# http://localhost:12788/ +# hasEKG: 12788 + +# The Prometheus monitoring system exports EKG metrics. Uncomment the following +# to listen on the given port. Output is provided on +# http://localhost:12789/metrics +# hasPrometheus: +# - "127.0.0.1" +# - 12789 + +# To enable the 'TraceForwarder' backend, uncomment the following setting. Log +# items are then forwarded based on an entry in 'mapBackends' to a separate +# process running a 'TraceAcceptor'. +# Example using UNIX pipes: +# traceForwardTo: +# tag: RemotePipe +# contents: "logs/pipe" +# +# Example using Windows named pipes: +# traceForwardTo: +# tag: RemotePipe +# contents: "\\\\.\\pipe\\acceptor" +# +# Example using network socket: +# traceForwardTo: +# tag: RemoteSocket +# contents: +# - "127.0.0.1" +# - "2997" + +# For the Katip logging backend we must set up outputs (called scribes) +# The available types of scribe are: +# FileSK for files +# StdoutSK/StderrSK for stdout/stderr +# JournalSK for systemd's journal system +# DevNullSK ignores all output +# The scribe output format can be ScText or ScJson. Log rotation settings can +# be specified in the defaults below or overidden on a per-scribe basis here. +setupScribes: + - scKind: FileSK + scName: "logs/mainnet.log" + scFormat: ScText + + - scKind: StdoutSK + scName: stdout + scFormat: ScText + +# For the Katip logging backend this specifies the default scribes that trace +# output is sent to if it is not configured to be sent to other scribes. +defaultScribes: + - - FileSK + - "logs/mainnet.log" + - - StdoutSK + - stdout + +# The default file rotation settings for katip scribes, unless overridden +# in the setupScribes above for specific scribes. +rotation: + rpLogLimitBytes: 5000000 + rpKeepFilesNum: 3 + rpMaxAgeHours: 24 + + +##### Coarse grained logging control ##### + +# Trace output from whole subsystems can be enabled/disabled using the following +# settings. This provides fairly coarse grained control, but it is relatively +# efficient at filtering out unwanted trace output. + +# Trace BlockFetch client. +TraceBlockFetchClient: False + +# Trace BlockFetch decisions made by the BlockFetch client. +TraceBlockFetchDecisions: False + +# Trace BlockFetch protocol messages. +TraceBlockFetchProtocol: False + +# Serialised Trace BlockFetch protocol messages. +TraceBlockFetchProtocolSerialised: False + +# Trace BlockFetch server. +TraceBlockFetchServer: False + +# Trace BlockchainTime. +TraceBlockchainTime: False + +# Verbose tracer of ChainDB +TraceChainDb: True + +# Trace ChainSync client. +TraceChainSyncClient: False + +# Trace ChainSync server (blocks). +TraceChainSyncBlockServer: False + +# Trace ChainSync server (headers). +TraceChainSyncHeaderServer: False + +# Trace ChainSync protocol messages. +TraceChainSyncProtocol: False + +# Trace DNS Resolver messages. +TraceDNSResolver: True + +# Trace DNS Subscription messages. +TraceDNSSubscription: True + +# Trace error policy resolution. +TraceErrorPolicy: True + +# Trace local error policy resolution. +TraceLocalErrorPolicy: True + +# Trace block forging. +TraceForge: True + +# Trace Handshake protocol messages. +TraceHandshake: False + +# Trace IP Subscription messages. +TraceIpSubscription: True + +# Trace local ChainSync protocol messages. +TraceLocalChainSyncProtocol: False + +# Trace local Handshake protocol messages. +TraceLocalHandshake: False + +# Trace local TxSubmission protocol messages. +TraceLocalTxSubmissionProtocol: False + +# Trace local TxSubmission server. +TraceLocalTxSubmissionServer: False + +# Trace mempool. +TraceMempool: True + +# Trace Mux Events. +TraceMux: False + +# Trace TxSubmission server (inbound transactions). +TraceTxInbound: False + +# Trace TxSubmission client (outbound transactions). +TraceTxOutbound: False + +# Trace TxSubmission protocol messages. +TraceTxSubmissionProtocol: False + + +##### Fine grained logging control ##### + +# It is also possible to have more fine grained control over filtering of +# trace output, and to match and route trace output to particular backends. +# This is less efficient than the coarse trace filters above but provides +# much more precise control. + +options: + + # This routes metrics matching specific names to particular backends. + # This overrides the 'defaultBackends' listed above. And note that it is + # an override and not an extension so anything matched here will not + # go to the default backend, only to the explicitly listed backends. + mapBackends: + cardano.node.metrics: + - EKGViewBK + + # redirects traced values to a specific scribe which is identified by its + # type and its name, separated by "::": + mapScribes: + cardano.node.metrics: + - "FileSK::logs/mainnet.log" + + # apply a filter on message severity on messages in a specific named context. + # this filter is applied additionally to the global 'minSeverity' and thus + # needs to be at least as high. + mapSeverity: + cardano.node.ChainDB: Notice + cardano.node.DnsSubscription: Debug From ae0d3354edcd29c027ad7a95b167ca0ea615c290 Mon Sep 17 00:00:00 2001 From: John Ky Date: Tue, 12 Oct 2021 19:15:28 +1100 Subject: [PATCH 2/2] Update the YAML version of the mainnet config to match the JSON version and add tests to ensure consistency between the two. --- cardano-cli/cardano-cli.cabal | 4 +- cardano-cli/test/Test/Config/Mainnet.hs | 26 +++++- configuration/cardano/mainnet-config.yaml | 100 ++++++++++++---------- 3 files changed, 78 insertions(+), 52 deletions(-) diff --git a/cardano-cli/cardano-cli.cabal b/cardano-cli/cardano-cli.cabal index 06c6ab6f5d3..80384f78143 100644 --- a/cardano-cli/cardano-cli.cabal +++ b/cardano-cli/cardano-cli.cabal @@ -165,7 +165,8 @@ test-suite cardano-cli-test main-is: cardano-cli-test.hs type: exitcode-stdio-1.0 - build-depends: bech32 >= 1.1.0 + build-depends: aeson + , bech32 >= 1.1.0 , bytestring , base16-bytestring , cardano-api @@ -182,6 +183,7 @@ test-suite cardano-cli-test , parsec , text , transformers + , yaml other-modules: Test.Config.Mainnet Test.Cli.FilePermissions diff --git a/cardano-cli/test/Test/Config/Mainnet.hs b/cardano-cli/test/Test/Config/Mainnet.hs index 77486726f3c..a06c0c71c30 100644 --- a/cardano-cli/test/Test/Config/Mainnet.hs +++ b/cardano-cli/test/Test/Config/Mainnet.hs @@ -1,5 +1,6 @@ {-# LANGUAGE DisambiguateRecordFields #-} {-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE ScopedTypeVariables #-} module Test.Config.Mainnet ( tests @@ -12,28 +13,45 @@ import Data.Bool (Bool(..)) import Data.Either (Either(..)) import Data.Function import Data.Maybe -import Hedgehog (Property) +import Hedgehog (Property, (===)) import System.FilePath (()) import System.IO (IO) +import Text.Show +import qualified Data.Aeson as J import qualified Data.Text as T +import qualified Data.Yaml as Y import qualified GHC.Stack as GHC import qualified Hedgehog as H import qualified Hedgehog.Extras.Test.Base as H import qualified Hedgehog.Extras.Test.Process as H import qualified System.Directory as IO -hprop_configMainnet :: Property -hprop_configMainnet = H.propertyOnce $ do +hprop_configMainnetHash :: Property +hprop_configMainnetHash = H.propertyOnce $ do projectBase <- H.note =<< H.evalIO . IO.canonicalizePath =<< H.getProjectBase result <- H.evalIO $ runExceptT $ initialLedgerState $ projectBase "configuration/cardano/mainnet-config.json" case result of Right (_, _) -> return () Left e -> H.failWithCustom GHC.callStack Nothing (T.unpack (renderInitialLedgerStateError e)) +hprop_configMainnetYaml :: Property +hprop_configMainnetYaml = H.propertyOnce $ do + projectBase <- H.note =<< H.evalIO . IO.canonicalizePath =<< H.getProjectBase + yamlResult <- H.evalIO . Y.decodeFileEither $ projectBase "configuration/cardano/mainnet-config.yaml" + yaml :: J.Value <- case yamlResult of + Right v -> return v + Left e -> H.failWithCustom GHC.callStack Nothing (Y.prettyPrintParseException e) + jsonResult <- H.evalIO . J.eitherDecodeFileStrict $ projectBase "configuration/cardano/mainnet-config.json" + json :: J.Value <- case jsonResult of + Right v -> return v + Left e -> H.failWithCustom GHC.callStack Nothing (show e) + yaml === json + tests :: IO Bool tests = H.checkSequential $ H.Group "Test.Config.Mainnet" - [ ("hprop_configMainnet", hprop_configMainnet) + [ ("hprop_configMainnetHash", hprop_configMainnetHash) + , ("hprop_configMainnetYaml", hprop_configMainnetYaml) ] diff --git a/configuration/cardano/mainnet-config.yaml b/configuration/cardano/mainnet-config.yaml index d5704dde52c..ca078861254 100644 --- a/configuration/cardano/mainnet-config.yaml +++ b/configuration/cardano/mainnet-config.yaml @@ -1,51 +1,38 @@ -########################################################## -############### Mainnet ######### -############### Cardano Byron Node Configuration ######### -########################################################## - +################################################################################ +# Mainnet Cardano Node Configuration ##### Locations ##### -GenesisFile: genesis.json -SocketPath: db/node.socket - -##### Blockfetch Protocol - -# The maximum number of used peers during bulk sync. -MaxConcurrencyBulkSync: 1 -# The maximum number of used peers when fetching newly forged blocks. -MaxConcurrencyDeadline: 2 - -#TODO: These parameters cannot yet be used in the config file, only on the CLI: -#DatabasePath: db/ -#Topology: configuration/mainnet-topology.json -#Port 7776 +AlonzoGenesisFile: mainnet-alonzo-genesis.json +AlonzoGenesisHash: 7e94a15f55d1e82d10f09203fa1d40f8eede58fd8066542cf6566008068ed874 +ByronGenesisFile: mainnet-byron-genesis.json +ByronGenesisHash: 5f20df933584822601f9e3f8c024eb5eb252fe8cefb24d1317dc3d432e940ebb +ShelleyGenesisFile: mainnet-shelley-genesis.json +ShelleyGenesisHash: 1a3be38bcbb7911969283716ad7aa550250226b76a61fc51cc9a9a35d9276d81 ##### Core protocol parameters ##### -# This is the instance of the Ouroboros family that we are running. -# "RealPBFT" is the real (permissive) OBFT protocol, which is what we use on -# mainnet in Byron era. -Protocol: RealPBFT +Protocol: Cardano # The mainnet does not include the network magic into addresses. Testnets do. RequiresNetworkMagic: RequiresNoMagic - ##### Update system parameters ##### # This protocol version number gets used by block producing nodes as part # of the system for agreeing on and synchronising protocol updates. -LastKnownBlockVersion-Major: 0 -LastKnownBlockVersion-Minor: 2 +# +# See https://github.com/input-output-hk/cardano-node/blob/master/cardano-node/src/Cardano/Node/Protocol/Cardano.hs#L199 +LastKnownBlockVersion-Major: 3 +LastKnownBlockVersion-Minor: 0 LastKnownBlockVersion-Alt: 0 +MaxKnownMajorProtocolVersion: 2 # In the Byron era some software versions are also published on the chain. # We do this only for Byron compatibility now. ApplicationName: cardano-sl ApplicationVersion: 1 - ##### Logging configuration ##### # Enable or disable logging overall @@ -78,7 +65,7 @@ defaultBackends: # EKG is a simple metrics monitoring system. Uncomment the following to enable # this backend and listen on the given local port and point your web browser to # http://localhost:12788/ -# hasEKG: 12788 +hasEKG: 12788 # The Prometheus monitoring system exports EKG metrics. Uncomment the following # to listen on the given port. Output is provided on @@ -116,19 +103,14 @@ defaultBackends: # The scribe output format can be ScText or ScJson. Log rotation settings can # be specified in the defaults below or overidden on a per-scribe basis here. setupScribes: - - scKind: FileSK - scName: "logs/mainnet.log" - scFormat: ScText - - scKind: StdoutSK scName: stdout scFormat: ScText + scRotation: null # For the Katip logging backend this specifies the default scribes that trace # output is sent to if it is not configured to be sent to other scribes. defaultScribes: - - - FileSK - - "logs/mainnet.log" - - StdoutSK - stdout @@ -136,7 +118,7 @@ defaultScribes: # in the setupScribes above for specific scribes. rotation: rpLogLimitBytes: 5000000 - rpKeepFilesNum: 3 + rpKeepFilesNum: 10 rpMaxAgeHours: 24 @@ -146,6 +128,8 @@ rotation: # settings. This provides fairly coarse grained control, but it is relatively # efficient at filtering out unwanted trace output. +TraceAcceptPolicy: True + # Trace BlockFetch client. TraceBlockFetchClient: False @@ -162,7 +146,7 @@ TraceBlockFetchProtocolSerialised: False TraceBlockFetchServer: False # Trace BlockchainTime. -TraceBlockchainTime: False +# TraceBlockchainTime: False # Verbose tracer of ChainDB TraceChainDb: True @@ -179,12 +163,16 @@ TraceChainSyncHeaderServer: False # Trace ChainSync protocol messages. TraceChainSyncProtocol: False +TraceConnectionManager: True + # Trace DNS Resolver messages. TraceDNSResolver: True # Trace DNS Subscription messages. TraceDNSSubscription: True +TraceDiffusionInitialization: True + # Trace error policy resolution. TraceErrorPolicy: True @@ -200,6 +188,21 @@ TraceHandshake: False # Trace IP Subscription messages. TraceIpSubscription: True +TraceLedgerPeers: True + +TraceLocalRootPeers: True + +TraceInboundGovernor: True + +TracePeerSelection: True + +TracePeerSelectionActions: True + +TracePublicRootPeers: True + +TraceServer: True + + # Trace local ChainSync protocol messages. TraceLocalChainSyncProtocol: False @@ -245,15 +248,18 @@ options: cardano.node.metrics: - EKGViewBK - # redirects traced values to a specific scribe which is identified by its - # type and its name, separated by "::": - mapScribes: + cardano.node.resources: + - EKGViewBK + + # # redirects traced values to a specific scribe which is identified by its + # # type and its name, separated by "::": + # mapScribes: + # cardano.node.metrics: + # - "FileSK::logs/mainnet.log" + mapSubtrace: cardano.node.metrics: - - "FileSK::logs/mainnet.log" - - # apply a filter on message severity on messages in a specific named context. - # this filter is applied additionally to the global 'minSeverity' and thus - # needs to be at least as high. - mapSeverity: - cardano.node.ChainDB: Notice - cardano.node.DnsSubscription: Debug + subtrace: Neutral + +hasPrometheus: + - 127.0.0.1 + - 12798