diff --git a/bench/tx-generator/src/Cardano/Benchmarking/OuroborosImports.hs b/bench/tx-generator/src/Cardano/Benchmarking/OuroborosImports.hs index aa4002b3571..c24b06c663e 100644 --- a/bench/tx-generator/src/Cardano/Benchmarking/OuroborosImports.hs +++ b/bench/tx-generator/src/Cardano/Benchmarking/OuroborosImports.hs @@ -26,24 +26,20 @@ import Prelude import Ouroboros.Consensus.Block.Abstract import qualified Ouroboros.Consensus.Cardano as Consensus import Ouroboros.Consensus.Config (TopLevelConfig, configBlock, configCodec) -import Ouroboros.Consensus.Config.SupportsNode - (ConfigSupportsNode(..), getNetworkMagic) -import Ouroboros.Consensus.Node (ProtocolInfo(..)) +import Ouroboros.Consensus.Config.SupportsNode (ConfigSupportsNode (..), getNetworkMagic) +import Ouroboros.Consensus.Node (ProtocolInfo (..)) import Ouroboros.Consensus.Shelley.Eras (StandardCrypto, StandardShelley) import Ouroboros.Network.Protocol.LocalTxSubmission.Type (SubmitResult (..)) import Cardano.Node.Configuration.Logging (LoggingLayer) -import Cardano.Node.Protocol.Types ( SomeConsensusProtocol(..)) +import Cardano.Node.Protocol.Types (SomeConsensusProtocol (..)) import Cardano.Api.Shelley (CardanoMode) import Cardano.CLI.Types (SigningKeyFile) -import Cardano.Api (NetworkId(..), LocalNodeConnectInfo(..), ConsensusModeParams(..), EpochSlots(..) - , TxInMode, TxValidationErrorInMode - , SigningKey, PaymentKey - , submitTxToNodeLocal) -import Cardano.Api.Protocol.Types (BlockType(..), ProtocolInfoArgs(..), protocolInfo) - +import Cardano.Api (BlockType (..), ConsensusModeParams (..), EpochSlots (..), + LocalNodeConnectInfo (..), NetworkId (..), PaymentKey, ProtocolInfoArgs (..), + SigningKey, TxInMode, TxValidationErrorInMode, protocolInfo, submitTxToNodeLocal) import Cardano.Ledger.Shelley.Genesis (ShelleyGenesis) type CardanoBlock = Consensus.CardanoBlock StandardCrypto diff --git a/cardano-api/ChangeLog.md b/cardano-api/ChangeLog.md index 0f1e1dee015..e584702ad57 100644 --- a/cardano-api/ChangeLog.md +++ b/cardano-api/ChangeLog.md @@ -12,6 +12,8 @@ - Change `calculateMinimumUTxO` to return `Lovelace` instead of a `Value` ([PR 4482](https://github.com/input-output-hk/cardano-node/pull/4482)) +- **Breaking change** - Reduce exposed modules in cardano-api ([PR4546](https://github.com/input-output-hk/cardano-node/pull/4546)) + ### Bugs - Allow reading text envelopes from pipes ([PR 4384](https://github.com/input-output-hk/cardano-node/pull/4384)) diff --git a/cardano-api/cardano-api.cabal b/cardano-api/cardano-api.cabal index b3a614f9963..8cbb137539e 100644 --- a/cardano-api/cardano-api.cabal +++ b/cardano-api/cardano-api.cabal @@ -35,19 +35,19 @@ library hs-source-dirs: src + -- Do not expose any additional modules. The correct way + -- to expose new functionality is via Cardano.Api or + -- Cardano.Api.Shelley exposed-modules: Cardano.Api Cardano.Api.Byron Cardano.Api.ChainSync.Client Cardano.Api.ChainSync.ClientPipelined Cardano.Api.Crypto.Ed25519Bip32 - Cardano.Api.EraCast - Cardano.Api.Protocol.Types Cardano.Api.Shelley -- TODO: Eliminate in the future when -- we create wrapper types for the ledger types -- in this module Cardano.Api.Orphans - Cardano.Api.SerialiseTextEnvelope other-modules: -- Splitting up the big Typed module: @@ -58,6 +58,7 @@ library Cardano.Api.Convenience.Construction Cardano.Api.Convenience.Query Cardano.Api.Environment + Cardano.Api.EraCast Cardano.Api.Eras Cardano.Api.Error Cardano.Api.Fees @@ -78,6 +79,7 @@ library Cardano.Api.NetworkId Cardano.Api.OperationalCertificate Cardano.Api.ProtocolParameters + Cardano.Api.Protocol.Types Cardano.Api.Query Cardano.Api.Script Cardano.Api.ScriptData @@ -86,6 +88,7 @@ library Cardano.Api.SerialiseJSON Cardano.Api.SerialiseLedgerCddl Cardano.Api.SerialiseRaw + Cardano.Api.SerialiseTextEnvelope Cardano.Api.SerialiseUsing Cardano.Api.Shelley.Genesis Cardano.Api.SpecialByron diff --git a/cardano-api/src/Cardano/Api.hs b/cardano-api/src/Cardano/Api.hs index d0bb3646711..c9fd9be0a5f 100644 --- a/cardano-api/src/Cardano/Api.hs +++ b/cardano-api/src/Cardano/Api.hs @@ -472,6 +472,7 @@ module Cardano.Api ( TextEnvelopeDescr, TextEnvelopeError(..), textEnvelopeRawCBOR, + textEnvelopeToJSON, serialiseToTextEnvelope, deserialiseFromTextEnvelope, readFileTextEnvelope, @@ -564,6 +565,12 @@ module Cardano.Api ( CardanoMode, -- connectToRemoteNode, + -- ** Protocol related types + BlockType(..), + Protocol(..), + ProtocolInfoArgs(..), + + -- *** Chain sync protocol -- | To construct a @ChainSyncClient@ see @Cardano.Api.Client@ or -- @Cardano.Api.ClientPipelined@. @@ -734,6 +741,7 @@ import Cardano.Api.LedgerState import Cardano.Api.Modes import Cardano.Api.NetworkId import Cardano.Api.OperationalCertificate +import Cardano.Api.Protocol.Types import Cardano.Api.ProtocolParameters import Cardano.Api.Query hiding (LedgerState (..)) import Cardano.Api.Script diff --git a/cardano-api/src/Cardano/Api/IPC.hs b/cardano-api/src/Cardano/Api/IPC.hs index 598fc76563b..0a1b9418e08 100644 --- a/cardano-api/src/Cardano/Api/IPC.hs +++ b/cardano-api/src/Cardano/Api/IPC.hs @@ -84,7 +84,7 @@ import Prelude import Data.Void (Void) -import Data.Aeson (ToJSON, (.=), object, toJSON) +import Data.Aeson (ToJSON, object, toJSON, (.=)) import Data.Bifunctor (first) import qualified Data.ByteString.Lazy as LBS import qualified Data.Map.Strict as Map diff --git a/cardano-cli/src/Cardano/CLI/Shelley/Run/Genesis.hs b/cardano-cli/src/Cardano/CLI/Shelley/Run/Genesis.hs index 812ee1878e9..4976bbfcf6e 100644 --- a/cardano-cli/src/Cardano/CLI/Shelley/Run/Genesis.hs +++ b/cardano-cli/src/Cardano/CLI/Shelley/Run/Genesis.hs @@ -105,7 +105,6 @@ import Cardano.CLI.Byron.Genesis as Byron import qualified Cardano.CLI.Byron.Key as Byron import qualified Cardano.Crypto.Signing as Byron -import Cardano.Api.SerialiseTextEnvelope (textEnvelopeToJSON) import Cardano.Chain.Common (BlockCount (unBlockCount)) import Cardano.Chain.Delegation (delegateVK) import qualified Cardano.Chain.Delegation as Dlg diff --git a/cardano-node-chairman/app/Cardano/Chairman/Commands/Run.hs b/cardano-node-chairman/app/Cardano/Chairman/Commands/Run.hs index b9da33986cf..eb58e741976 100644 --- a/cardano-node-chairman/app/Cardano/Chairman/Commands/Run.hs +++ b/cardano-node-chairman/app/Cardano/Chairman/Commands/Run.hs @@ -7,6 +7,7 @@ module Cardano.Chairman.Commands.Run ( cmdRun ) where +import qualified Cardano.Api as Api import Cardano.Prelude import Control.Monad.Class.MonadTime (DiffTime) @@ -29,7 +30,6 @@ import Ouroboros.Consensus.Node.ProtocolInfo import Cardano.Api -import qualified Cardano.Api.Protocol.Types as Protocol import Cardano.Chairman (chairmanTest) data RunOpts = RunOpts @@ -115,7 +115,7 @@ run RunOpts let (k , nId) = case p of SomeConsensusProtocol _ runP -> - let ProtocolInfo { pInfoConfig } = Protocol.protocolInfo runP + let ProtocolInfo { pInfoConfig } = Api.protocolInfo runP in ( Consensus.configSecurityParam pInfoConfig , fromNetworkMagic . getNetworkMagic $ Consensus.configBlock pInfoConfig ) diff --git a/cardano-node/src/Cardano/Node/Configuration/Logging.hs b/cardano-node/src/Cardano/Node/Configuration/Logging.hs index b399cfc7947..f2e2aa6c548 100644 --- a/cardano-node/src/Cardano/Node/Configuration/Logging.hs +++ b/cardano-node/src/Cardano/Node/Configuration/Logging.hs @@ -23,6 +23,7 @@ module Cardano.Node.Configuration.Logging , LOContent (..) ) where +import qualified Cardano.Api as Api import Cardano.Prelude hiding (trace) import qualified Control.Concurrent as Conc @@ -76,8 +77,6 @@ import Ouroboros.Consensus.HardFork.Combinator.Degenerate import Ouroboros.Consensus.Node.ProtocolInfo import Ouroboros.Consensus.Shelley.Ledger.Ledger -import Cardano.Api.Protocol.Types (BlockType (..), protocolInfo) - import Cardano.Git.Rev (gitRev) import Cardano.Node.Configuration.POM (NodeConfiguration (..), ncProtocol) import Cardano.Node.Protocol.Types (SomeConsensusProtocol (..)) @@ -323,16 +322,16 @@ nodeBasicInfo :: NodeConfiguration -> IO [LogObject Text] nodeBasicInfo nc (SomeConsensusProtocol whichP pForInfo) nodeStartTime' = do meta <- mkLOMeta Notice Public - let cfg = pInfoConfig $ protocolInfo pForInfo + let cfg = pInfoConfig $ Api.protocolInfo pForInfo protocolDependentItems = case whichP of - ByronBlockType -> + Api.ByronBlockType -> let DegenLedgerConfig cfgByron = Consensus.configLedger cfg in getGenesisValuesByron cfg cfgByron - ShelleyBlockType -> + Api.ShelleyBlockType -> let DegenLedgerConfig cfgShelley = Consensus.configLedger cfg in getGenesisValues "Shelley" cfgShelley - CardanoBlockType -> + Api.CardanoBlockType -> let CardanoLedgerConfig cfgByron cfgShelley cfgAllegra cfgMary cfgAlonzo cfgBabbage = Consensus.configLedger cfg in getGenesisValuesByron cfg cfgByron diff --git a/cardano-node/src/Cardano/Node/Protocol/Byron.hs b/cardano-node/src/Cardano/Node/Protocol/Byron.hs index b5178fc3578..140e324f041 100644 --- a/cardano-node/src/Cardano/Node/Protocol/Byron.hs +++ b/cardano-node/src/Cardano/Node/Protocol/Byron.hs @@ -20,15 +20,14 @@ import qualified Data.ByteString.Lazy as LB import qualified Data.Text as Text import Cardano.Api.Byron -import qualified Cardano.Api.Protocol.Types as Protocol import qualified Cardano.Crypto.Hash as Crypto import qualified Cardano.Crypto.Hashing as Byron.Crypto import qualified Cardano.Chain.Genesis as Genesis -import qualified Cardano.Chain.UTxO as UTxO import qualified Cardano.Chain.Update as Update +import qualified Cardano.Chain.UTxO as UTxO import Cardano.Crypto.ProtocolMagic (RequiresNetworkMagic) import Cardano.Node.Types @@ -80,7 +79,7 @@ mkSomeConsensusProtocolByron NodeByronProtocolConfiguration { optionalLeaderCredentials <- readLeaderCredentials genesisConfig files - return $ SomeConsensusProtocol Protocol.ByronBlockType $ Protocol.ProtocolInfoArgsByron $ Consensus.ProtocolParamsByron { + return $ SomeConsensusProtocol ByronBlockType $ ProtocolInfoArgsByron $ Consensus.ProtocolParamsByron { byronGenesis = genesisConfig, byronPbftSignatureThreshold = PBftSignatureThreshold <$> npcByronPbftSignatureThresh, diff --git a/cardano-node/src/Cardano/Node/Protocol/Cardano.hs b/cardano-node/src/Cardano/Node/Protocol/Cardano.hs index e62df0efe6d..69942be18fc 100644 --- a/cardano-node/src/Cardano/Node/Protocol/Cardano.hs +++ b/cardano-node/src/Cardano/Node/Protocol/Cardano.hs @@ -31,7 +31,6 @@ import qualified Ouroboros.Consensus.Mempool.TxLimits as TxLimits import Cardano.Api import Cardano.Api.Orphans () -import Cardano.Api.Protocol.Types import Cardano.Node.Types import Cardano.Tracing.OrphanInstances.Byron () diff --git a/cardano-node/src/Cardano/Node/Protocol/Shelley.hs b/cardano-node/src/Cardano/Node/Protocol/Shelley.hs index 3029478d85c..ab8a071dbca 100644 --- a/cardano-node/src/Cardano/Node/Protocol/Shelley.hs +++ b/cardano-node/src/Cardano/Node/Protocol/Shelley.hs @@ -20,6 +20,7 @@ module Cardano.Node.Protocol.Shelley , validateGenesis ) where +import qualified Cardano.Api as Api import Cardano.Prelude import Prelude (String, id) @@ -44,9 +45,7 @@ import Ouroboros.Consensus.Shelley.Node (Nonce (..), ProtocolParamsShe import Cardano.Ledger.BaseTypes (ProtVer (..)) import qualified Cardano.Ledger.Shelley.Genesis as Shelley -import qualified Cardano.Api as Api (FileError (..)) import Cardano.Api.Orphans () -import qualified Cardano.Api.Protocol.Types as Protocol import Cardano.Api.Shelley hiding (FileError) import Cardano.Node.Types @@ -87,7 +86,7 @@ mkSomeConsensusProtocolShelley NodeShelleyProtocolConfiguration { leaderCredentials <- firstExceptT PraosLeaderCredentialsError $ readLeaderCredentials files - return $ SomeConsensusProtocol Protocol.ShelleyBlockType $ Protocol.ProtocolInfoArgsShelley + return $ SomeConsensusProtocol Api.ShelleyBlockType $ Api.ProtocolInfoArgsShelley Consensus.ProtocolParamsShelleyBased { shelleyBasedGenesis = genesis, shelleyBasedInitialNonce = genesisHashToPraosNonce genesisHash, diff --git a/cardano-node/src/Cardano/Node/Protocol/Types.hs b/cardano-node/src/Cardano/Node/Protocol/Types.hs index d1434be2cdc..eadc1984971 100644 --- a/cardano-node/src/Cardano/Node/Protocol/Types.hs +++ b/cardano-node/src/Cardano/Node/Protocol/Types.hs @@ -11,14 +11,13 @@ module Cardano.Node.Protocol.Types , SomeConsensusProtocol(..) ) where -import Prelude +import qualified Cardano.Api as Api import Cardano.Prelude (Generic, NFData) +import Prelude import Data.Aeson import NoThunks.Class (NoThunks) -import qualified Cardano.Api.Protocol.Types as Cardano - import Cardano.Node.Orphans () import Cardano.Node.Queries (HasKESInfo, HasKESMetricsData) import Cardano.Node.TraceConstraints (TraceConstraints) @@ -55,11 +54,11 @@ instance FromJSON Protocol where data SomeConsensusProtocol where - SomeConsensusProtocol :: forall blk. ( Cardano.Protocol IO blk + SomeConsensusProtocol :: forall blk. ( Api.Protocol IO blk , HasKESMetricsData blk , HasKESInfo blk , TraceConstraints blk ) - => Cardano.BlockType blk - -> Cardano.ProtocolInfoArgs IO blk + => Api.BlockType blk + -> Api.ProtocolInfoArgs IO blk -> SomeConsensusProtocol diff --git a/cardano-node/src/Cardano/Node/Run.hs b/cardano-node/src/Cardano/Node/Run.hs index 902a5f644bf..f1b598d655b 100644 --- a/cardano-node/src/Cardano/Node/Run.hs +++ b/cardano-node/src/Cardano/Node/Run.hs @@ -18,6 +18,7 @@ module Cardano.Node.Run , checkVRFFilePermissions ) where +import qualified Cardano.Api as Api import Cardano.Prelude hiding (ByteString, STM, atomically, show, take, trace) import Data.IP (toSockAddr) import Prelude (String, id, show) @@ -62,7 +63,7 @@ import Cardano.Node.Configuration.POM (NodeConfiguration (..), defaultPartialNodeConfiguration, makeNodeConfiguration, parseNodeConfigurationFP) import Cardano.Node.Startup import Cardano.Node.Tracing.API -import Cardano.Node.Tracing.StateRep (NodeState(NodeKernelOnline)) +import Cardano.Node.Tracing.StateRep (NodeState (NodeKernelOnline)) import Cardano.Node.Tracing.Tracers.Startup (getStartupInfo) import Cardano.Node.Types import Cardano.Tracing.Config (TraceOptions (..), TraceSelection (..)) @@ -86,9 +87,6 @@ import Ouroboros.Network.PeerSelection.RelayAccessPoint (RelayAccessPo import Ouroboros.Network.Subscription (DnsSubscriptionTarget (..), IPSubscriptionTarget (..)) -import Cardano.Api -import qualified Cardano.Api.Protocol.Types as Protocol - import Cardano.Node.Configuration.Socket (SocketOrSocketInfo (..), gatherConfiguredSockets, getSocketOrSocketInfoAddr) import qualified Cardano.Node.Configuration.Topology as TopologyNonP2P @@ -137,13 +135,13 @@ runNode cmdPc = do p :: SomeConsensusProtocol <- case eitherSomeProtocol of - Left err -> putStrLn (displayError err) >> exitFailure + Left err -> putStrLn (Api.displayError err) >> exitFailure Right p -> pure p - let networkMagic :: NetworkMagic = + let networkMagic :: Api.NetworkMagic = case p of SomeConsensusProtocol _ runP -> - let ProtocolInfo { pInfoConfig } = Protocol.protocolInfo runP + let ProtocolInfo { pInfoConfig } = Api.protocolInfo runP in getNetworkMagic $ Consensus.configBlock pInfoConfig case p of @@ -172,19 +170,19 @@ installSigTermHandler = do handleNodeWithTracers :: ( TraceConstraints blk - , Protocol.Protocol IO blk + , Api.Protocol IO blk ) => PartialNodeConfiguration -> NodeConfiguration -> SomeConsensusProtocol - -> NetworkMagic - -> Protocol.ProtocolInfoArgs IO blk + -> Api.NetworkMagic + -> Api.ProtocolInfoArgs IO blk -> IO () handleNodeWithTracers cmdPc nc p networkMagic runP = do -- This IORef contains node kernel structure which holds node kernel. -- Used for ledger queries and peer connection status. nodeKernelData <- mkNodeKernelData - let ProtocolInfo { pInfoConfig = cfg } = Protocol.protocolInfo runP + let ProtocolInfo { pInfoConfig = cfg } = Api.protocolInfo runP case ncEnableP2P nc of SomeNetworkP2PMode p2pMode -> do let fp = maybe "No file path found!" @@ -311,9 +309,9 @@ handlePeersListSimple tr nodeKern = forever $ do handleSimpleNode :: forall blk p2p . ( RunNode blk - , Protocol.Protocol IO blk + , Api.Protocol IO blk ) - => Protocol.ProtocolInfoArgs IO blk + => Api.ProtocolInfoArgs IO blk -> NetworkP2PMode p2p -> Tracers RemoteConnectionId LocalConnectionId blk p2p -> NodeConfiguration @@ -332,7 +330,7 @@ handleSimpleNode runP p2pMode tracers nc onKernel = do traceWith (startupTracer tracers) StartupDBValidation - let pInfo = Protocol.protocolInfo runP + let pInfo = Api.protocolInfo runP (publicIPv4SocketOrAddr, publicIPv6SocketOrAddr, localSocketOrPath) <- do result <- runExceptT (gatherConfiguredSockets $ ncSocketConfig nc) diff --git a/cardano-node/src/Cardano/Node/Startup.hs b/cardano-node/src/Cardano/Node/Startup.hs index 04b32195515..d418f4303f2 100644 --- a/cardano-node/src/Cardano/Node/Startup.hs +++ b/cardano-node/src/Cardano/Node/Startup.hs @@ -7,6 +7,7 @@ module Cardano.Node.Startup where +import qualified Cardano.Api as Api import Prelude import Data.Aeson (FromJSON, ToJSON) @@ -44,7 +45,6 @@ import Ouroboros.Network.PeerSelection.Types (PeerAdvertise) import Ouroboros.Network.Subscription.Dns (DnsSubscriptionTarget (..)) import Ouroboros.Network.Subscription.Ip (IPSubscriptionTarget (..)) -import Cardano.Api.Protocol.Types (BlockType (..), protocolInfo) import Cardano.Logging import Cardano.Node.Configuration.POM (NodeConfiguration (..), ncProtocol) import Cardano.Node.Configuration.Socket @@ -194,17 +194,17 @@ prepareNodeInfo nc (SomeConsensusProtocol whichP pForInfo) tc nodeStartTime = do , niSystemStartTime = systemStartTime } where - cfg = pInfoConfig $ protocolInfo pForInfo + cfg = pInfoConfig $ Api.protocolInfo pForInfo systemStartTime :: UTCTime systemStartTime = case whichP of - ByronBlockType -> + Api.ByronBlockType -> getSystemStartByron - ShelleyBlockType -> + Api.ShelleyBlockType -> let DegenLedgerConfig cfgShelley = configLedger cfg in getSystemStartShelley cfgShelley - CardanoBlockType -> + Api.CardanoBlockType -> let CardanoLedgerConfig _ cfgShelley cfgAllegra cfgMary cfgAlonzo cfgBabbage = configLedger cfg in minimum [ getSystemStartByron , getSystemStartShelley cfgShelley diff --git a/cardano-node/src/Cardano/Node/Tracing/Tracers/Startup.hs b/cardano-node/src/Cardano/Node/Tracing/Tracers/Startup.hs index e4b23d2e2d8..d7c48b4bf45 100644 --- a/cardano-node/src/Cardano/Node/Tracing/Tracers/Startup.hs +++ b/cardano-node/src/Cardano/Node/Tracing/Tracers/Startup.hs @@ -13,6 +13,8 @@ module Cardano.Node.Tracing.Tracers.Startup , ppStartupInfoTrace ) where +import Cardano.Api (NetworkMagic (..), SlotNo (..)) +import qualified Cardano.Api as Api import Prelude import Data.Aeson (ToJSON (..), Value (..), (.=)) @@ -49,9 +51,6 @@ import Ouroboros.Consensus.Shelley.Ledger.Ledger (shelleyLedgerGenesis import Cardano.Logging -import Cardano.Api (NetworkMagic (..), SlotNo (..)) -import Cardano.Api.Protocol.Types (BlockType (..), protocolInfo) - import Cardano.Git.Rev (gitRev) import Cardano.Node.Configuration.POM (NodeConfiguration, ncProtocol) @@ -68,7 +67,7 @@ getStartupInfo -> IO [StartupTrace blk] getStartupInfo nc (SomeConsensusProtocol whichP pForInfo) fp = do nodeStartTime <- getCurrentTime - let cfg = pInfoConfig $ protocolInfo pForInfo + let cfg = pInfoConfig $ Api.protocolInfo pForInfo basicInfoCommon = BICommon $ BasicInfoCommon { biProtocol = pack . show $ ncProtocol nc , biVersion = pack . showVersion $ version @@ -79,13 +78,13 @@ getStartupInfo nc (SomeConsensusProtocol whichP pForInfo) fp = do } protocolDependentItems = case whichP of - ByronBlockType -> + Api.ByronBlockType -> let DegenLedgerConfig cfgByron = Consensus.configLedger cfg in [getGenesisValuesByron cfg cfgByron] - ShelleyBlockType -> + Api.ShelleyBlockType -> let DegenLedgerConfig cfgShelley = Consensus.configLedger cfg in [getGenesisValues "Shelley" cfgShelley] - CardanoBlockType -> + Api.CardanoBlockType -> let CardanoLedgerConfig cfgByron cfgShelley cfgAllegra cfgMary cfgAlonzo cfgBabbage = Consensus.configLedger cfg in getGenesisValuesByron cfg cfgByron