use datasize::DataSize;
use serde::{Deserialize, Serialize};
use tracing::error;
use casper_types::Chainspec;
use crate::{
logging::LoggingConfig, types::NodeConfig, BinaryPortConfig, BlockAccumulatorConfig,
BlockSynchronizerConfig, BlockValidatorConfig, ConsensusConfig, ContractRuntimeConfig,
DiagnosticsPortConfig, EventStreamServerConfig, FetcherConfig, GossipConfig, NetworkConfig,
RestServerConfig, StorageConfig, TransactionAcceptorConfig, TransactionBufferConfig,
UpgradeWatcherConfig,
};
#[derive(Clone, DataSize, Debug, Default, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct Config {
pub node: NodeConfig,
pub logging: LoggingConfig,
pub consensus: ConsensusConfig,
pub network: NetworkConfig,
pub event_stream_server: EventStreamServerConfig,
pub rest_server: RestServerConfig,
pub storage: StorageConfig,
pub gossip: GossipConfig,
pub fetcher: FetcherConfig,
pub contract_runtime: ContractRuntimeConfig,
pub transaction_acceptor: TransactionAcceptorConfig,
pub transaction_buffer: TransactionBufferConfig,
pub diagnostics_port: DiagnosticsPortConfig,
pub block_accumulator: BlockAccumulatorConfig,
pub block_synchronizer: BlockSynchronizerConfig,
pub block_validator: BlockValidatorConfig,
pub upgrade_watcher: UpgradeWatcherConfig,
pub binary_port_server: BinaryPortConfig,
}
impl Config {
pub(crate) fn ensure_valid(&mut self, chainspec: &Chainspec) {
if self.transaction_acceptor.timestamp_leeway
> chainspec.transaction_config.max_timestamp_leeway
{
error!(
configured_timestamp_leeway = %self.transaction_acceptor.timestamp_leeway,
max_timestamp_leeway = %chainspec.transaction_config.max_timestamp_leeway,
"setting value for 'transaction_acceptor.timestamp_leeway' to maximum permitted by \
chainspec 'transaction_config.max_timestamp_leeway'",
);
self.transaction_acceptor.timestamp_leeway =
chainspec.transaction_config.max_timestamp_leeway;
}
}
#[cfg(test)]
pub(crate) fn with_network_config(mut self, network_config: NetworkConfig) -> Self {
self.network = network_config;
self
}
}