diff --git a/CHANGELOG.md b/CHANGELOG.md index b61d774e0a6..5e456bcab56 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,8 @@ As a minor extension, we have adopted a slightly different versioning convention ## Mithril Distribution [XXXX] - UNRELEASED +- Support for removal of `cardano_transactions_signing_config` from the diffused mithril network configuration. + - Decentralization of the configuration parameters of Mithril networks: - Added the `/protocol-configuration/{epoch}` route to fetch aggregator configuration for a given epoch, `{epoch}` must be a number. - Refactor Signer and Aggregator (leader, follower) to read network configurations from a `MithrilNetworkConfigurationProvider` diff --git a/Cargo.lock b/Cargo.lock index 7034440ffee..3d154dd885a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3594,7 +3594,7 @@ dependencies = [ [[package]] name = "mithril-aggregator" -version = "0.7.94" +version = "0.7.95" dependencies = [ "anyhow", "async-trait", @@ -3869,7 +3869,7 @@ dependencies = [ [[package]] name = "mithril-common" -version = "0.6.28" +version = "0.6.29" dependencies = [ "anyhow", "async-trait", @@ -4025,7 +4025,7 @@ dependencies = [ [[package]] name = "mithril-protocol-config" -version = "0.1.2" +version = "0.1.3" dependencies = [ "anyhow", "async-trait", @@ -4103,7 +4103,7 @@ dependencies = [ [[package]] name = "mithril-signer" -version = "0.2.279" +version = "0.2.280" dependencies = [ "anyhow", "async-trait", diff --git a/internal/mithril-protocol-config/Cargo.toml b/internal/mithril-protocol-config/Cargo.toml index 4434db76620..d19d30d39bc 100644 --- a/internal/mithril-protocol-config/Cargo.toml +++ b/internal/mithril-protocol-config/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "mithril-protocol-config" -version = "0.1.2" +version = "0.1.3" description = "Configuraton parameters for Mithril network" authors = { workspace = true } edition = { workspace = true } diff --git a/internal/mithril-protocol-config/src/http.rs b/internal/mithril-protocol-config/src/http.rs index 8d2f80a2cc3..0453d121c74 100644 --- a/internal/mithril-protocol-config/src/http.rs +++ b/internal/mithril-protocol-config/src/http.rs @@ -66,11 +66,6 @@ impl MithrilNetworkConfigurationProvider for HttpMithrilNetworkConfigurationProv ))? .into(); - configuration_for_aggregation.signed_entity_types_config.cardano_transactions.clone() - .ok_or_else(|| { - anyhow!(format!("Cardano transactions signing config is missing in aggregation configuration for epoch {epoch}")) - })?; - Ok(MithrilNetworkConfiguration { epoch, configuration_for_aggregation, diff --git a/mithril-aggregator/Cargo.toml b/mithril-aggregator/Cargo.toml index ccc8dc295b4..7dc0bc7d786 100644 --- a/mithril-aggregator/Cargo.toml +++ b/mithril-aggregator/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "mithril-aggregator" -version = "0.7.94" +version = "0.7.95" description = "A Mithril Aggregator server" authors = { workspace = true } edition = { workspace = true } diff --git a/mithril-aggregator/src/configuration.rs b/mithril-aggregator/src/configuration.rs index 00ba356ab10..5e7d57451b9 100644 --- a/mithril-aggregator/src/configuration.rs +++ b/mithril-aggregator/src/configuration.rs @@ -382,15 +382,25 @@ pub trait ConfigurationSource { fn get_leader_aggregator_epoch_settings_configuration( &self, ) -> StdResult { + let allowed_discriminants = self.compute_allowed_signed_entity_types_discriminants()?; + + let cardano_transactions_signing_config = if allowed_discriminants + .contains(&SignedEntityTypeDiscriminants::CardanoTransactions) + { + let cardano_transactions_signing_config = + self.cardano_transactions_signing_config().with_context( + || "Configuration `cardano_transactions_signing_config` is mandatory for a Leader Aggregator when `CardanoTransactions` is enabled in `signed_entity_types`" + )?; + Some(cardano_transactions_signing_config) + } else { + None + }; + Ok(AggregatorEpochSettings { protocol_parameters: self.protocol_parameters().with_context( || "Configuration `protocol_parameters` is mandatory for a Leader Aggregator", )?, - cardano_transactions_signing_config: self - .cardano_transactions_signing_config() - .with_context( - || "Configuration `cardano_transactions_signing_config` is mandatory for a Leader Aggregator", - )?, + cardano_transactions_signing_config, }) } @@ -1152,6 +1162,7 @@ impl Source for DefaultConfiguration { #[cfg(test)] mod test { use mithril_common::temp_dir; + use mithril_common::test::double::fake_data; use super::*; @@ -1315,6 +1326,80 @@ mod test { assert!(!config.is_follower_aggregator()); } + mod get_leader_aggregator_epoch_settings_configuration { + use super::*; + + #[test] + fn succeed_when_cardano_transactions_is_disabled_and_cardano_transactions_signing_config_is_not_set() + { + let epoch_settings = ServeCommandConfiguration { + signed_entity_types: None, + cardano_transactions_signing_config: None, + protocol_parameters: Some(ProtocolParameters::new(1, 2, 3.1)), + ..ServeCommandConfiguration::new_sample(temp_dir!()) + } + .get_leader_aggregator_epoch_settings_configuration() + .unwrap(); + + assert_eq!( + AggregatorEpochSettings { + protocol_parameters: ProtocolParameters::new(1, 2, 3.1), + cardano_transactions_signing_config: None + }, + epoch_settings + ); + } + + #[test] + fn succeed_when_cardano_transactions_is_enabled_and_cardano_transactions_signing_config_is_set() + { + let epoch_settings = ServeCommandConfiguration { + signed_entity_types: Some( + SignedEntityTypeDiscriminants::CardanoTransactions.to_string(), + ), + cardano_transactions_signing_config: Some(CardanoTransactionsSigningConfig { + security_parameter: BlockNumber(10), + step: BlockNumber(30), + }), + protocol_parameters: Some(ProtocolParameters::new(2, 3, 4.1)), + ..ServeCommandConfiguration::new_sample(temp_dir!()) + } + .get_leader_aggregator_epoch_settings_configuration() + .unwrap(); + + assert_eq!( + AggregatorEpochSettings { + protocol_parameters: ProtocolParameters::new(2, 3, 4.1), + cardano_transactions_signing_config: Some(CardanoTransactionsSigningConfig { + security_parameter: BlockNumber(10), + step: BlockNumber(30), + },) + }, + epoch_settings + ); + } + + #[test] + fn fails_when_cardano_transactions_is_enabled_without_associated_config() { + let error = ServeCommandConfiguration { + cardano_transactions_signing_config: None, + signed_entity_types: Some( + SignedEntityTypeDiscriminants::CardanoTransactions.to_string(), + ), + protocol_parameters: Some(fake_data::protocol_parameters()), + ..ServeCommandConfiguration::new_sample(temp_dir!()) + } + .get_leader_aggregator_epoch_settings_configuration() + .unwrap_err(); + + assert!( + error + .to_string() + .contains("Configuration `cardano_transactions_signing_config` is mandatory") + ); + } + } + #[test] fn serialized_ancillary_files_signer_config_use_snake_case_for_keys_and_kebab_case_for_type_value() { diff --git a/mithril-aggregator/src/database/migration.rs b/mithril-aggregator/src/database/migration.rs index 6b33b9cff69..248447a4011 100644 --- a/mithril-aggregator/src/database/migration.rs +++ b/mithril-aggregator/src/database/migration.rs @@ -251,5 +251,30 @@ alter table signed_entity add column epoch as (coalesce(json_extract(beacon, '$. create index signed_entity_epoch on signed_entity(epoch); "#, ), + // Migration 37 + // Update `epoch_setting` table to make `cardano_transactions_signing_config` optional. + SqlMigration::new( + 37, + r#" +-- disable foreign keys since `signer_registration` has a foreign key constraint on `epoch_setting` +pragma foreign_keys=false; + +create table if not exists new_epoch_setting ( + epoch_setting_id integer not null, + protocol_parameters json not null, + cardano_transactions_signing_config json, + primary key (epoch_setting_id) +); +insert into new_epoch_setting (epoch_setting_id, protocol_parameters, cardano_transactions_signing_config) + select epoch_setting_id, protocol_parameters, cardano_transactions_signing_config + from epoch_setting order by rowid asc; +drop table epoch_setting; +alter table new_epoch_setting rename to epoch_setting; + +-- reenable foreign keys +pragma foreign_key_check; +pragma foreign_keys=true; + "#, + ), ] } diff --git a/mithril-aggregator/src/database/query/epoch_settings/get_epoch_settings.rs b/mithril-aggregator/src/database/query/epoch_settings/get_epoch_settings.rs index 670f623e114..a22112553bd 100644 --- a/mithril-aggregator/src/database/query/epoch_settings/get_epoch_settings.rs +++ b/mithril-aggregator/src/database/query/epoch_settings/get_epoch_settings.rs @@ -69,10 +69,10 @@ mod tests { ); assert_eq!( - CardanoTransactionsSigningConfig { + Some(CardanoTransactionsSigningConfig { security_parameter: BlockNumber(10), step: BlockNumber(15) - }, + }), epoch_settings_record.cardano_transactions_signing_config ); @@ -86,10 +86,10 @@ mod tests { epoch_settings_record.protocol_parameters ); assert_eq!( - CardanoTransactionsSigningConfig { + Some(CardanoTransactionsSigningConfig { security_parameter: BlockNumber(30), step: BlockNumber(15), - }, + }), epoch_settings_record.cardano_transactions_signing_config ); diff --git a/mithril-aggregator/src/database/query/epoch_settings/insert_or_ignore_epoch_settings.rs b/mithril-aggregator/src/database/query/epoch_settings/insert_or_ignore_epoch_settings.rs index f9c8321330c..407f39dd1ad 100644 --- a/mithril-aggregator/src/database/query/epoch_settings/insert_or_ignore_epoch_settings.rs +++ b/mithril-aggregator/src/database/query/epoch_settings/insert_or_ignore_epoch_settings.rs @@ -19,10 +19,10 @@ impl InsertOrIgnoreEpochSettingsQuery { Value::String( serde_json::to_string(&epoch_settings.protocol_parameters).unwrap(), ), - Value::String( - serde_json::to_string(&epoch_settings.cardano_transactions_signing_config) - .unwrap(), - ), + match &epoch_settings.cardano_transactions_signing_config { + Some(config) => Value::String(serde_json::to_string(config).unwrap()), + None => Value::Null, + }, ], ), } @@ -64,10 +64,10 @@ mod tests { let expected_epoch_settings = EpochSettingsRecord { epoch_settings_id: Epoch(3), protocol_parameters: fake_data::protocol_parameters(), - cardano_transactions_signing_config: CardanoTransactionsSigningConfig { + cardano_transactions_signing_config: Some(CardanoTransactionsSigningConfig { security_parameter: BlockNumber(24), step: BlockNumber(62), - }, + }), }; let record = connection .fetch_first(InsertOrIgnoreEpochSettingsQuery::one( @@ -76,6 +76,19 @@ mod tests { .unwrap(); assert_eq!(Some(expected_epoch_settings), record); + + let expected_epoch_settings_without_ctx_config = EpochSettingsRecord { + epoch_settings_id: Epoch(4), + protocol_parameters: fake_data::protocol_parameters(), + cardano_transactions_signing_config: None, + }; + let record = connection + .fetch_first(InsertOrIgnoreEpochSettingsQuery::one( + expected_epoch_settings_without_ctx_config.clone(), + )) + .unwrap(); + + assert_eq!(Some(expected_epoch_settings_without_ctx_config), record); } #[test] @@ -85,10 +98,10 @@ mod tests { let expected_epoch_settings = EpochSettingsRecord { epoch_settings_id: Epoch(3), protocol_parameters: fake_data::protocol_parameters(), - cardano_transactions_signing_config: CardanoTransactionsSigningConfig { + cardano_transactions_signing_config: Some(CardanoTransactionsSigningConfig { security_parameter: BlockNumber(24), step: BlockNumber(62), - }, + }), }; let record = connection .fetch_first(InsertOrIgnoreEpochSettingsQuery::one( @@ -99,10 +112,10 @@ mod tests { let record = connection .fetch_first(InsertOrIgnoreEpochSettingsQuery::one(EpochSettingsRecord { - cardano_transactions_signing_config: CardanoTransactionsSigningConfig { + cardano_transactions_signing_config: Some(CardanoTransactionsSigningConfig { security_parameter: BlockNumber(134), step: BlockNumber(872), - }, + }), ..expected_epoch_settings.clone() })) .unwrap(); diff --git a/mithril-aggregator/src/database/record/epoch_settings.rs b/mithril-aggregator/src/database/record/epoch_settings.rs index bf9b271e2ea..11c58807510 100644 --- a/mithril-aggregator/src/database/record/epoch_settings.rs +++ b/mithril-aggregator/src/database/record/epoch_settings.rs @@ -13,7 +13,7 @@ pub struct EpochSettingsRecord { pub protocol_parameters: ProtocolParameters, /// Cardano transactions signing configuration. - pub cardano_transactions_signing_config: CardanoTransactionsSigningConfig, + pub cardano_transactions_signing_config: Option, } impl From for AggregatorEpochSettings { @@ -32,7 +32,7 @@ impl SqLiteEntity for EpochSettingsRecord { { let epoch_settings_id_int = row.read::(0); let protocol_parameters_string = &row.read::<&str, _>(1); - let cardano_transactions_signing_config_string = &row.read::<&str, _>(2); + let cardano_transactions_signing_config_string = &row.read::, _>(2); let epoch_settings_record = Self { epoch_settings_id: Epoch(epoch_settings_id_int.try_into().map_err(|e| { @@ -47,13 +47,13 @@ impl SqLiteEntity for EpochSettingsRecord { )) }, )?, - cardano_transactions_signing_config: serde_json::from_str(cardano_transactions_signing_config_string).map_err( + cardano_transactions_signing_config: cardano_transactions_signing_config_string.map(|config| serde_json::from_str(config).map_err( |e| { HydrationError::InvalidData(format!( - "Could not turn string '{cardano_transactions_signing_config_string}' to CardanoTransactionsSigningConfig. Error: {e}" + "Could not turn string '{config}' to CardanoTransactionsSigningConfig. Error: {e}" )) }, - )?, + )).transpose()?, }; diff --git a/mithril-aggregator/src/database/test_helper.rs b/mithril-aggregator/src/database/test_helper.rs index cdb19aa0de7..884096c9b40 100644 --- a/mithril-aggregator/src/database/test_helper.rs +++ b/mithril-aggregator/src/database/test_helper.rs @@ -208,10 +208,7 @@ pub fn insert_epoch_settings( let (sql_values, _) = InsertOrIgnoreEpochSettingsQuery::one(EpochSettingsRecord { epoch_settings_id: Epoch(1), protocol_parameters: ProtocolParameters::new(1, 2, 1.0), - cardano_transactions_signing_config: CardanoTransactionsSigningConfig { - security_parameter: BlockNumber(0), - step: BlockNumber(0), - }, + cardano_transactions_signing_config: None, }) .filters() .expand(); diff --git a/mithril-aggregator/src/entities/aggregator_epoch_settings.rs b/mithril-aggregator/src/entities/aggregator_epoch_settings.rs index 80b8188d88c..7581546445c 100644 --- a/mithril-aggregator/src/entities/aggregator_epoch_settings.rs +++ b/mithril-aggregator/src/entities/aggregator_epoch_settings.rs @@ -7,7 +7,7 @@ pub struct AggregatorEpochSettings { pub protocol_parameters: ProtocolParameters, /// Cardano transactions signing configuration - pub cardano_transactions_signing_config: CardanoTransactionsSigningConfig, + pub cardano_transactions_signing_config: Option, } #[cfg(test)] @@ -31,7 +31,7 @@ mod test_utils { protocol_parameters: self.protocol_parameters, enabled_signed_entity_types, signed_entity_types_config: SignedEntityTypeConfiguration { - cardano_transactions: Some(self.cardano_transactions_signing_config), + cardano_transactions: self.cardano_transactions_signing_config, }, } } diff --git a/mithril-aggregator/src/services/epoch_service.rs b/mithril-aggregator/src/services/epoch_service.rs index 81c296c82bd..27d8b90abd0 100644 --- a/mithril-aggregator/src/services/epoch_service.rs +++ b/mithril-aggregator/src/services/epoch_service.rs @@ -1,6 +1,5 @@ use anyhow::{Context, anyhow}; use async_trait::async_trait; -use mithril_protocol_config::interface::MithrilNetworkConfigurationProvider; use slog::{Logger, debug}; use std::collections::BTreeSet; use std::sync::Arc; @@ -10,13 +9,15 @@ use mithril_cardano_node_chain::chain_observer::ChainObserver; use mithril_common::StdResult; use mithril_common::crypto_helper::ProtocolAggregateVerificationKey; use mithril_common::entities::{ - CardanoEra, CardanoTransactionsSigningConfig, Epoch, ProtocolParameters, SignedEntityConfig, - SignedEntityTypeDiscriminants, Signer, SignerWithStake, Stake, SupportedEra, TotalSPOs, + CardanoEra, Epoch, ProtocolParameters, SignedEntityConfig, SignedEntityTypeDiscriminants, + Signer, SignerWithStake, Stake, SupportedEra, TotalSPOs, }; use mithril_common::logging::LoggerExtensions; use mithril_common::protocol::{MultiSigner as ProtocolMultiSigner, SignerBuilder}; use mithril_era::EraChecker; use mithril_persistence::store::StakeStorer; +use mithril_protocol_config::interface::MithrilNetworkConfigurationProvider; +use mithril_protocol_config::model::MithrilNetworkConfiguration; use crate::{EpochSettingsStorer, VerificationKeyStorer, entities::AggregatorEpochSettings}; @@ -62,19 +63,32 @@ pub trait EpochService: Sync + Send { /// Get the current epoch for which the data stored in this service are computed. fn epoch_of_current_data(&self) -> StdResult; + /// Get the network configuration for the current epoch. + fn network_configuration(&self) -> StdResult<&MithrilNetworkConfiguration>; + /// Get protocol parameters used for signing in the current epoch. - fn current_protocol_parameters(&self) -> StdResult<&ProtocolParameters>; + fn current_protocol_parameters(&self) -> StdResult<&ProtocolParameters> { + Ok(&self + .network_configuration()? + .configuration_for_aggregation + .protocol_parameters) + } /// Get protocol parameters used for signing in the next epoch. - fn next_protocol_parameters(&self) -> StdResult<&ProtocolParameters>; + fn next_protocol_parameters(&self) -> StdResult<&ProtocolParameters> { + Ok(&self + .network_configuration()? + .configuration_for_next_aggregation + .protocol_parameters) + } /// Get protocol parameters for signer registration. - fn signer_registration_protocol_parameters(&self) -> StdResult<&ProtocolParameters>; - - /// Get cardano transactions signing configuration used in current epoch - fn current_cardano_transactions_signing_config( - &self, - ) -> StdResult<&CardanoTransactionsSigningConfig>; + fn signer_registration_protocol_parameters(&self) -> StdResult<&ProtocolParameters> { + Ok(&self + .network_configuration()? + .configuration_for_registration + .protocol_parameters) + } /// Get aggregate verification key for current epoch fn current_aggregate_verification_key(&self) -> StdResult<&ProtocolAggregateVerificationKey>; @@ -124,9 +138,7 @@ struct EpochData { cardano_era: CardanoEra, mithril_era: SupportedEra, epoch: Epoch, - current_epoch_settings: AggregatorEpochSettings, - next_epoch_settings: AggregatorEpochSettings, - signer_registration_epoch_settings: AggregatorEpochSettings, + network_configuration: MithrilNetworkConfiguration, current_signers_with_stake: Vec, next_signers_with_stake: Vec, current_signers: Vec, @@ -295,46 +307,16 @@ impl EpochService for MithrilEpochService { .get_network_configuration(epoch) .await?; - let current_epoch_settings = AggregatorEpochSettings { - protocol_parameters: network_configuration - .configuration_for_aggregation - .protocol_parameters, - cardano_transactions_signing_config: network_configuration - .configuration_for_aggregation - .signed_entity_types_config - .cardano_transactions - .ok_or(anyhow!( - "Missing cardano transactions signing config for aggregation epoch {:?}", - epoch - ))?, - }; - - let next_epoch_settings = AggregatorEpochSettings { - protocol_parameters: network_configuration - .configuration_for_next_aggregation - .protocol_parameters, - cardano_transactions_signing_config: network_configuration - .configuration_for_next_aggregation - .signed_entity_types_config - .cardano_transactions - .ok_or(anyhow!( - "Missing cardano transactions signing config for next aggregation epoch {:?}", - epoch - ))?, - }; - let signer_registration_epoch_settings = AggregatorEpochSettings { protocol_parameters: network_configuration .configuration_for_registration - .protocol_parameters, + .protocol_parameters + .clone(), cardano_transactions_signing_config: network_configuration .configuration_for_registration .signed_entity_types_config .cardano_transactions - .ok_or(anyhow!( - "Missing cardano transactions signing config for registration epoch {:?}", - epoch - ))?, + .clone(), }; self.insert_epoch_settings( signer_registration_epoch, @@ -362,8 +344,10 @@ impl EpochService for MithrilEpochService { ) .cloned() .collect(), - cardano_transactions_signing_config: current_epoch_settings - .cardano_transactions_signing_config + cardano_transactions_signing_config: network_configuration + .configuration_for_aggregation + .signed_entity_types_config + .cardano_transactions .clone(), }; @@ -374,9 +358,7 @@ impl EpochService for MithrilEpochService { cardano_era, mithril_era, epoch, - current_epoch_settings, - next_epoch_settings, - signer_registration_epoch_settings, + network_configuration, current_signers_with_stake, next_signers_with_stake, current_signers, @@ -422,14 +404,20 @@ impl EpochService for MithrilEpochService { let protocol_multi_signer = SignerBuilder::new( &data.current_signers_with_stake, - &data.current_epoch_settings.protocol_parameters, + &data + .network_configuration + .configuration_for_aggregation + .protocol_parameters, ) .with_context(|| "Epoch service failed to build protocol multi signer")? .build_multi_signer(); let next_protocol_multi_signer = SignerBuilder::new( &data.next_signers_with_stake, - &data.next_epoch_settings.protocol_parameters, + &data + .network_configuration + .configuration_for_next_aggregation + .protocol_parameters, ) .with_context(|| "Epoch service failed to build next protocol multi signer")? .build_multi_signer(); @@ -457,28 +445,8 @@ impl EpochService for MithrilEpochService { Ok(self.unwrap_data()?.epoch) } - fn current_protocol_parameters(&self) -> StdResult<&ProtocolParameters> { - Ok(&self.unwrap_data()?.current_epoch_settings.protocol_parameters) - } - - fn next_protocol_parameters(&self) -> StdResult<&ProtocolParameters> { - Ok(&self.unwrap_data()?.next_epoch_settings.protocol_parameters) - } - - fn signer_registration_protocol_parameters(&self) -> StdResult<&ProtocolParameters> { - Ok(&self - .unwrap_data()? - .signer_registration_epoch_settings - .protocol_parameters) - } - - fn current_cardano_transactions_signing_config( - &self, - ) -> StdResult<&CardanoTransactionsSigningConfig> { - Ok(&self - .unwrap_data()? - .current_epoch_settings - .cardano_transactions_signing_config) + fn network_configuration(&self) -> StdResult<&MithrilNetworkConfiguration> { + Ok(&self.unwrap_data()?.network_configuration) } fn current_aggregate_verification_key(&self) -> StdResult<&ProtocolAggregateVerificationKey> { @@ -600,14 +568,31 @@ impl FakeEpochServiceBuilder { .unwrap() .build_multi_signer(); + let network_configuration = MithrilNetworkConfiguration { + epoch: self.epoch, + configuration_for_aggregation: self + .current_epoch_settings + .into_network_configuration_for_epoch( + self.signed_entity_config.allowed_discriminants.clone(), + ), + configuration_for_next_aggregation: self + .next_epoch_settings + .into_network_configuration_for_epoch( + self.signed_entity_config.allowed_discriminants.clone(), + ), + configuration_for_registration: self + .signer_registration_epoch_settings + .into_network_configuration_for_epoch( + self.signed_entity_config.allowed_discriminants.clone(), + ), + }; + FakeEpochService { epoch_data: Some(EpochData { cardano_era: self.cardano_era, mithril_era: self.mithril_era, epoch: self.epoch, - current_epoch_settings: self.current_epoch_settings, - next_epoch_settings: self.next_epoch_settings, - signer_registration_epoch_settings: self.signer_registration_epoch_settings, + network_configuration, current_signers_with_stake: self.current_signers_with_stake, next_signers_with_stake: self.next_signers_with_stake, current_signers, @@ -644,15 +629,15 @@ impl FakeEpochService { let current_epoch_settings = AggregatorEpochSettings { protocol_parameters: fixture.protocol_parameters(), - cardano_transactions_signing_config: CardanoTransactionsSigningConfig::dummy(), + cardano_transactions_signing_config: Some(CardanoTransactionsSigningConfig::dummy()), }; let next_epoch_settings = AggregatorEpochSettings { protocol_parameters: fixture.protocol_parameters(), - cardano_transactions_signing_config: CardanoTransactionsSigningConfig::dummy(), + cardano_transactions_signing_config: Some(CardanoTransactionsSigningConfig::dummy()), }; let signer_registration_epoch_settings = AggregatorEpochSettings { protocol_parameters: fixture.protocol_parameters(), - cardano_transactions_signing_config: CardanoTransactionsSigningConfig::dummy(), + cardano_transactions_signing_config: Some(CardanoTransactionsSigningConfig::dummy()), }; FakeEpochServiceBuilder { @@ -712,16 +697,16 @@ impl EpochService for FakeEpochService { Ok(()) } - async fn precompute_epoch_data(&mut self) -> StdResult<()> { - if self.precompute_epoch_data_error { - anyhow::bail!("precompute_epoch_data fake error"); + async fn update_next_signers_with_stake(&mut self) -> StdResult<()> { + if self.update_next_signers_with_stake_error { + anyhow::bail!("update_next_signers_with_stake fake error"); } Ok(()) } - async fn update_next_signers_with_stake(&mut self) -> StdResult<()> { - if self.update_next_signers_with_stake_error { - anyhow::bail!("update_next_signers_with_stake fake error"); + async fn precompute_epoch_data(&mut self) -> StdResult<()> { + if self.precompute_epoch_data_error { + anyhow::bail!("precompute_epoch_data fake error"); } Ok(()) } @@ -738,28 +723,8 @@ impl EpochService for FakeEpochService { Ok(self.unwrap_data()?.epoch) } - fn current_protocol_parameters(&self) -> StdResult<&ProtocolParameters> { - Ok(&self.unwrap_data()?.current_epoch_settings.protocol_parameters) - } - - fn next_protocol_parameters(&self) -> StdResult<&ProtocolParameters> { - Ok(&self.unwrap_data()?.next_epoch_settings.protocol_parameters) - } - - fn signer_registration_protocol_parameters(&self) -> StdResult<&ProtocolParameters> { - Ok(&self - .unwrap_data()? - .signer_registration_epoch_settings - .protocol_parameters) - } - - fn current_cardano_transactions_signing_config( - &self, - ) -> StdResult<&CardanoTransactionsSigningConfig> { - Ok(&self - .unwrap_data()? - .current_epoch_settings - .cardano_transactions_signing_config) + fn network_configuration(&self) -> StdResult<&MithrilNetworkConfiguration> { + Ok(&self.unwrap_data()?.network_configuration) } fn current_aggregate_verification_key(&self) -> StdResult<&ProtocolAggregateVerificationKey> { @@ -857,7 +822,6 @@ mod tests { epoch: Epoch, protocol_parameters: ProtocolParameters, next_protocol_parameters: ProtocolParameters, - cardano_signing_config: CardanoTransactionsSigningConfig, signer_registration_protocol_parameters: ProtocolParameters, current_signers_with_stake: BTreeSet, next_signers_with_stake: BTreeSet, @@ -885,9 +849,6 @@ mod tests { signer_registration_protocol_parameters: service .signer_registration_protocol_parameters()? .clone(), - cardano_signing_config: service - .current_cardano_transactions_signing_config()? - .clone(), current_signers_with_stake: service .current_signers_with_stake()? .clone() @@ -941,15 +902,21 @@ mod tests { next_signers_with_stake: epoch_fixture.signers_with_stake(), stored_current_epoch_settings: AggregatorEpochSettings { protocol_parameters: epoch_fixture.protocol_parameters(), - cardano_transactions_signing_config: CardanoTransactionsSigningConfig::dummy(), + cardano_transactions_signing_config: Some( + CardanoTransactionsSigningConfig::dummy(), + ), }, stored_next_epoch_settings: AggregatorEpochSettings { protocol_parameters: epoch_fixture.protocol_parameters(), - cardano_transactions_signing_config: CardanoTransactionsSigningConfig::dummy(), + cardano_transactions_signing_config: Some( + CardanoTransactionsSigningConfig::dummy(), + ), }, stored_signer_registration_epoch_settings: AggregatorEpochSettings { protocol_parameters: epoch_fixture.protocol_parameters(), - cardano_transactions_signing_config: CardanoTransactionsSigningConfig::dummy(), + cardano_transactions_signing_config: Some( + CardanoTransactionsSigningConfig::dummy(), + ), }, total_spo: 1, total_stake: 0, @@ -1082,7 +1049,6 @@ mod tests { protocol_parameters: current_epoch_fixture.protocol_parameters(), next_protocol_parameters: next_epoch_fixture.protocol_parameters(), signer_registration_protocol_parameters, - cardano_signing_config: CardanoTransactionsSigningConfig::dummy(), current_signers_with_stake: current_epoch_fixture .signers_with_stake() .into_iter() @@ -1104,10 +1070,10 @@ mod tests { async fn inform_epoch_get_signed_entity_config_from_its_dependencies_and_store() { let epoch = Epoch(5); - let cardano_transactions_signing_config = CardanoTransactionsSigningConfig { + let cardano_transactions_signing_config = Some(CardanoTransactionsSigningConfig { security_parameter: BlockNumber(29), step: BlockNumber(986), - }; + }); let allowed_discriminants = BTreeSet::from([ SignedEntityTypeDiscriminants::CardanoTransactions, SignedEntityTypeDiscriminants::CardanoImmutableFilesFull, @@ -1203,16 +1169,19 @@ mod tests { .build(); let epoch = Epoch(5); - let mut service = EpochServiceBuilder { - stored_next_epoch_settings: AggregatorEpochSettings { - protocol_parameters: next_epoch_fixture.protocol_parameters(), - cardano_transactions_signing_config: CardanoTransactionsSigningConfig::dummy(), - }, - next_signers_with_stake: next_epoch_fixture.signers_with_stake().clone(), - ..EpochServiceBuilder::new(epoch, current_epoch_fixture.clone()) - } - .build() - .await; + let mut service = + EpochServiceBuilder { + stored_next_epoch_settings: AggregatorEpochSettings { + protocol_parameters: next_epoch_fixture.protocol_parameters(), + cardano_transactions_signing_config: Some( + CardanoTransactionsSigningConfig::dummy(), + ), + }, + next_signers_with_stake: next_epoch_fixture.signers_with_stake().clone(), + ..EpochServiceBuilder::new(epoch, current_epoch_fixture.clone()) + } + .build() + .await; service .inform_epoch(epoch) @@ -1305,10 +1274,10 @@ mod tests { async fn inform_epoch_insert_registration_epoch_settings_in_the_store() { let expected_epoch_settings = AggregatorEpochSettings { protocol_parameters: ProtocolParameters::new(6, 89, 0.124), - cardano_transactions_signing_config: CardanoTransactionsSigningConfig { + cardano_transactions_signing_config: Some(CardanoTransactionsSigningConfig { security_parameter: BlockNumber(10), step: BlockNumber(15), - }, + }), }; let epoch = Epoch(4); @@ -1320,9 +1289,9 @@ mod tests { MithrilNetworkConfigurationForEpoch { protocol_parameters: expected_epoch_settings.protocol_parameters.clone(), signed_entity_types_config: SignedEntityTypeConfiguration { - cardano_transactions: Some( - expected_epoch_settings.cardano_transactions_signing_config.clone(), - ), + cardano_transactions: expected_epoch_settings + .cardano_transactions_signing_config + .clone(), }, ..Dummy::dummy() }, @@ -1377,10 +1346,6 @@ mod tests { "signer_registration_protocol_parameters", service.signer_registration_protocol_parameters().err(), ), - ( - "current_cardano_transactions_signing_config", - service.current_cardano_transactions_signing_config().err(), - ), ( "current_signers_with_stake", service.current_signers_with_stake().err(), @@ -1434,7 +1399,6 @@ mod tests { assert!(service.current_protocol_parameters().is_ok()); assert!(service.next_protocol_parameters().is_ok()); assert!(service.signer_registration_protocol_parameters().is_ok()); - assert!(service.current_cardano_transactions_signing_config().is_ok()); assert!(service.current_signers_with_stake().is_ok()); assert!(service.next_signers_with_stake().is_ok()); assert!(service.current_signers().is_ok()); diff --git a/mithril-aggregator/src/services/message.rs b/mithril-aggregator/src/services/message.rs index e5ec7cf46e0..8da89908a10 100644 --- a/mithril-aggregator/src/services/message.rs +++ b/mithril-aggregator/src/services/message.rs @@ -178,8 +178,8 @@ impl MessageService for MithrilMessageService { let cardano_transactions_discriminant = allowed_discriminants.get(&SignedEntityTypeDiscriminants::CardanoTransactions); - let cardano_transactions_signing_config = cardano_transactions_discriminant - .map(|_| epoch_service.current_cardano_transactions_signing_config()) + let signed_entity_config = cardano_transactions_discriminant + .map(|_| epoch_service.signed_entity_config()) .transpose()? .cloned(); @@ -189,7 +189,8 @@ impl MessageService for MithrilMessageService { signer_registration_protocol_parameters: Some(signer_registration_protocol_parameters), current_signers: SignerMessagePart::from_signers(current_signers.to_vec()), next_signers: SignerMessagePart::from_signers(next_signers.to_vec()), - cardano_transactions_signing_config, + cardano_transactions_signing_config: signed_entity_config + .and_then(|c| c.cardano_transactions_signing_config), }; Ok(epoch_settings_message) @@ -209,7 +210,7 @@ impl MessageService for MithrilMessageService { enabled_discriminants.get(&SignedEntityTypeDiscriminants::CardanoTransactions); let cardano_transactions_signing_config = cardano_transactions_discriminant - .map(|_| epoch_settings.cardano_transactions_signing_config); + .and(epoch_settings.cardano_transactions_signing_config); let protocol_configuration_message = ProtocolConfigurationMessage { protocol_parameters: epoch_settings.protocol_parameters, @@ -513,7 +514,7 @@ mod tests { #[allow(deprecated)] mod epoch_settings { use mithril_common::{ - entities::{CardanoTransactionsSigningConfig, ProtocolParameters}, + entities::{CardanoTransactionsSigningConfig, ProtocolParameters, SignedEntityConfig}, test::builder::MithrilFixtureBuilder, }; @@ -628,26 +629,15 @@ mod tests { #[tokio::test] async fn get_epoch_settings_message_retrieves_signing_configuration_from_epoch_service() { - let current_epoch_settings = AggregatorEpochSettings { - cardano_transactions_signing_config: CardanoTransactionsSigningConfig { - security_parameter: BlockNumber(100), - step: BlockNumber(15), - }, - ..AggregatorEpochSettings::dummy() - }; - let next_epoch_settings = AggregatorEpochSettings { - cardano_transactions_signing_config: CardanoTransactionsSigningConfig { - security_parameter: BlockNumber(200), - step: BlockNumber(15), - }, - ..AggregatorEpochSettings::dummy() + let expected_ctx_config = CardanoTransactionsSigningConfig { + security_parameter: BlockNumber(100), + step: BlockNumber(15), }; let epoch_service = FakeEpochServiceBuilder { - current_epoch_settings: current_epoch_settings.clone(), - next_epoch_settings: next_epoch_settings.clone(), - signer_registration_epoch_settings: AggregatorEpochSettings::dummy(), - current_signers_with_stake: fake_data::signers_with_stakes(5), - next_signers_with_stake: fake_data::signers_with_stakes(3), + signed_entity_config: SignedEntityConfig { + cardano_transactions_signing_config: Some(expected_ctx_config.clone()), + ..Dummy::dummy() + }, ..FakeEpochServiceBuilder::dummy(Epoch(1)) } .build(); @@ -663,7 +653,7 @@ mod tests { assert_eq!( message.cardano_transactions_signing_config, - Some(current_epoch_settings.cardano_transactions_signing_config), + Some(expected_ctx_config), ); } } @@ -680,10 +670,10 @@ mod tests { let epoch = Epoch(4); let aggregator_epoch_settings = AggregatorEpochSettings { protocol_parameters: ProtocolParameters::new(5, 100, 0.65), - cardano_transactions_signing_config: CardanoTransactionsSigningConfig { + cardano_transactions_signing_config: Some(CardanoTransactionsSigningConfig { security_parameter: BlockNumber(0), step: BlockNumber(15), - }, + }), }; let message_service = MessageServiceBuilder::new() .with_epoch_settings(BTreeMap::from([(epoch, aggregator_epoch_settings)])) diff --git a/mithril-aggregator/src/services/network_configuration_provider.rs b/mithril-aggregator/src/services/network_configuration_provider.rs index c837647095e..c3df05c6f80 100644 --- a/mithril-aggregator/src/services/network_configuration_provider.rs +++ b/mithril-aggregator/src/services/network_configuration_provider.rs @@ -57,7 +57,7 @@ impl LocalMithrilNetworkConfigurationProvider { enabled_signed_entity_types: self.allowed_discriminants.clone(), protocol_parameters: epoch_settings.protocol_parameters, signed_entity_types_config: SignedEntityTypeConfiguration { - cardano_transactions: Some(epoch_settings.cardano_transactions_signing_config), + cardano_transactions: epoch_settings.cardano_transactions_signing_config, }, }) } @@ -165,10 +165,10 @@ mod tests { { let local_configuration_epoch_settings = AggregatorEpochSettings { protocol_parameters: ProtocolParameters::new(3000, 300, 0.3), - cardano_transactions_signing_config: CardanoTransactionsSigningConfig { + cardano_transactions_signing_config: Some(CardanoTransactionsSigningConfig { security_parameter: BlockNumber(3), step: BlockNumber(30), - }, + }), }; // Nothing stored at 44, should fallback to configuration @@ -180,20 +180,24 @@ mod tests { Epoch(42), AggregatorEpochSettings { protocol_parameters: ProtocolParameters::new(1000, 100, 0.1), - cardano_transactions_signing_config: CardanoTransactionsSigningConfig { - security_parameter: BlockNumber(1), - step: BlockNumber(10), - }, + cardano_transactions_signing_config: Some( + CardanoTransactionsSigningConfig { + security_parameter: BlockNumber(1), + step: BlockNumber(10), + }, + ), }, ), ( Epoch(43), AggregatorEpochSettings { protocol_parameters: ProtocolParameters::new(2000, 200, 0.2), - cardano_transactions_signing_config: CardanoTransactionsSigningConfig { - security_parameter: BlockNumber(2), - step: BlockNumber(20), - }, + cardano_transactions_signing_config: Some( + CardanoTransactionsSigningConfig { + security_parameter: BlockNumber(2), + step: BlockNumber(20), + }, + ), }, ), ])), diff --git a/mithril-aggregator/src/store/epoch_settings_storer.rs b/mithril-aggregator/src/store/epoch_settings_storer.rs index 6ff4ac352d2..87af962dbff 100644 --- a/mithril-aggregator/src/store/epoch_settings_storer.rs +++ b/mithril-aggregator/src/store/epoch_settings_storer.rs @@ -1,4 +1,3 @@ -use anyhow::anyhow; use async_trait::async_trait; #[cfg(test)] use std::collections::HashMap; @@ -68,10 +67,7 @@ pub trait EpochSettingsStorer: cardano_transactions_signing_config: epoch_configuration .signed_entity_types_config .cardano_transactions - .clone() - .ok_or(anyhow!( - "Missing cardano transactions signing config for epoch {epoch}" - ))?, + .clone(), }, ) .await?; diff --git a/mithril-aggregator/src/test/double/dummies.rs b/mithril-aggregator/src/test/double/dummies.rs index 518251d82b9..514fa075a68 100644 --- a/mithril-aggregator/src/test/double/dummies.rs +++ b/mithril-aggregator/src/test/double/dummies.rs @@ -54,7 +54,8 @@ mod entities { /// Create a dummy `AggregatorEpochSettings` fn dummy() -> Self { let protocol_parameters = fake_data::protocol_parameters(); - let cardano_transactions_signing_config = CardanoTransactionsSigningConfig::dummy(); + let cardano_transactions_signing_config = + Some(CardanoTransactionsSigningConfig::dummy()); // Aggregator Epoch settings AggregatorEpochSettings { diff --git a/mithril-common/Cargo.toml b/mithril-common/Cargo.toml index 5b04eb45649..8bb419fbd87 100644 --- a/mithril-common/Cargo.toml +++ b/mithril-common/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "mithril-common" -version = "0.6.28" +version = "0.6.29" description = "Common types, interfaces, and utilities for Mithril nodes." authors = { workspace = true } edition = { workspace = true } diff --git a/mithril-common/src/entities/signed_entity_config.rs b/mithril-common/src/entities/signed_entity_config.rs index e1e69f65ded..cb7ad1d27de 100644 --- a/mithril-common/src/entities/signed_entity_config.rs +++ b/mithril-common/src/entities/signed_entity_config.rs @@ -15,7 +15,7 @@ pub struct SignedEntityConfig { /// List of discriminants that the node is allowed to sign pub allowed_discriminants: BTreeSet, /// Cardano transactions signing configuration - pub cardano_transactions_signing_config: CardanoTransactionsSigningConfig, + pub cardano_transactions_signing_config: Option, } impl SignedEntityConfig { @@ -66,11 +66,18 @@ impl SignedEntityConfig { )) } SignedEntityTypeDiscriminants::CardanoTransactions => { - SignedEntityType::CardanoTransactions( - time_point.epoch, - self.cardano_transactions_signing_config - .compute_block_number_to_be_signed(time_point.chain_point.block_number), - ) + match &self.cardano_transactions_signing_config { + Some(config) => SignedEntityType::CardanoTransactions( + time_point.epoch, + config + .compute_block_number_to_be_signed(time_point.chain_point.block_number), + ), + None => { + anyhow::bail!( + "Can't derive a CardanoTransactions signed entity type from a time point without a `CardanoTransactionsSigningConfig`" + ) + } + } } SignedEntityTypeDiscriminants::CardanoDatabase => SignedEntityType::CardanoDatabase( CardanoDbBeacon::new(*time_point.epoch, time_point.immutable_file_number), @@ -163,10 +170,10 @@ mod tests { }; let config = SignedEntityConfig { allowed_discriminants: SignedEntityTypeDiscriminants::all(), - cardano_transactions_signing_config: CardanoTransactionsSigningConfig { + cardano_transactions_signing_config: Some(CardanoTransactionsSigningConfig { security_parameter: BlockNumber(0), step: BlockNumber(15), - }, + }), }; assert_eq!( @@ -224,6 +231,36 @@ mod tests { ); } + #[test] + fn can_not_convert_time_point_to_cardano_transaction_without_the_associated_config() { + let time_point = TimePoint { + epoch: Epoch(1), + immutable_file_number: 5, + chain_point: ChainPoint { + slot_number: SlotNumber(73), + block_number: BlockNumber(20), + block_hash: "block_hash-20".to_string(), + }, + }; + let config = SignedEntityConfig { + allowed_discriminants: SignedEntityTypeDiscriminants::all(), + cardano_transactions_signing_config: None, + }; + + let error = config + .time_point_to_signed_entity( + SignedEntityTypeDiscriminants::CardanoTransactions, + &time_point, + ) + .unwrap_err(); + + let expected_error = "Can't derive a CardanoTransactions signed entity type from a time point without a `CardanoTransactionsSigningConfig`"; + assert!( + error.to_string().contains(expected_error), + "Error message: {error:?}\nshould contains: {expected_error}\n" + ); + } + #[test] fn computing_block_number_to_be_signed() { // **block_number = ((tip.block_number - k') / n) × n** @@ -422,10 +459,10 @@ mod tests { SignedEntityTypeDiscriminants::CardanoStakeDistribution, SignedEntityTypeDiscriminants::CardanoTransactions, ]), - cardano_transactions_signing_config: CardanoTransactionsSigningConfig { + cardano_transactions_signing_config: Some(CardanoTransactionsSigningConfig { security_parameter: BlockNumber(0), step: BlockNumber(15), - }, + }), }; let signed_entity_types = config.list_allowed_signed_entity_types(&time_point).unwrap(); diff --git a/mithril-common/src/test/double/dummies.rs b/mithril-common/src/test/double/dummies.rs index 4c5c95d9165..b92fb86182c 100644 --- a/mithril-common/src/test/double/dummies.rs +++ b/mithril-common/src/test/double/dummies.rs @@ -41,7 +41,7 @@ mod entities { fn dummy() -> Self { Self { allowed_discriminants: SignedEntityTypeDiscriminants::all(), - cardano_transactions_signing_config: CardanoTransactionsSigningConfig::dummy(), + cardano_transactions_signing_config: Some(CardanoTransactionsSigningConfig::dummy()), } } } diff --git a/mithril-signer/Cargo.toml b/mithril-signer/Cargo.toml index 14543e81d67..a02576d4c53 100644 --- a/mithril-signer/Cargo.toml +++ b/mithril-signer/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "mithril-signer" -version = "0.2.279" +version = "0.2.280" description = "A Mithril Signer" authors = { workspace = true } edition = { workspace = true } diff --git a/mithril-signer/src/services/certifier.rs b/mithril-signer/src/services/certifier.rs index 8d100e4b9aa..d2395ff568d 100644 --- a/mithril-signer/src/services/certifier.rs +++ b/mithril-signer/src/services/certifier.rs @@ -525,7 +525,7 @@ mod tests { ) -> Self { Self { config: SignedEntityConfig { - cardano_transactions_signing_config: config, + cardano_transactions_signing_config: Some(config), allowed_discriminants, }, } diff --git a/mithril-signer/src/services/epoch_service.rs b/mithril-signer/src/services/epoch_service.rs index 7a0bcc602ae..4d877a23eac 100644 --- a/mithril-signer/src/services/epoch_service.rs +++ b/mithril-signer/src/services/epoch_service.rs @@ -1,4 +1,3 @@ -use anyhow::anyhow; use async_trait::async_trait; use mithril_protocol_config::model::MithrilNetworkConfiguration; use slog::{Logger, debug, trace, warn}; @@ -308,15 +307,12 @@ impl SignerSignedEntityConfigProvider { impl SignedEntityConfigProvider for SignerSignedEntityConfigProvider { async fn get(&self) -> StdResult { let epoch_service = self.epoch_service.read().await; - let cardano_transactions_signing_config = - match epoch_service.cardano_transactions_signing_config()? { - Some(config) => Ok(config.clone()), - None => Err(anyhow!("No cardano transaction signing config available")), - }?; Ok(SignedEntityConfig { allowed_discriminants: epoch_service.allowed_discriminants()?.clone(), - cardano_transactions_signing_config, + cardano_transactions_signing_config: epoch_service + .cardano_transactions_signing_config()? + .clone(), }) } } @@ -905,17 +901,19 @@ mod tests { "Should fail since sources data are not set before the first inform_epoch_settings", ); } - // Fail after `inform_epoch_settings` if `cardano_transactions_signing_config` is not set + // Success after `inform_epoch_settings` even if `cardano_transactions_signing_config` is not set { let signers = fake_data::signers(5); let current_signers = signers[1..3].to_vec(); let next_signers = signers[2..5].to_vec(); + let allowed_discriminants = + BTreeSet::from([SignedEntityTypeDiscriminants::CardanoStakeDistribution]); let configuration_for_aggregation = MithrilNetworkConfigurationForEpoch { signed_entity_types_config: SignedEntityTypeConfiguration { cardano_transactions: None, }, - enabled_signed_entity_types: BTreeSet::new(), + enabled_signed_entity_types: allowed_discriminants.clone(), ..Dummy::dummy() }; let configuration_for_next_aggregation = MithrilNetworkConfigurationForEpoch::dummy(); @@ -936,10 +934,15 @@ mod tests { .await .unwrap(); - config_provider - .get() - .await - .expect_err("Should fail since cardano_transactions_signing_config is not set"); + let config = config_provider.get().await.unwrap(); + + assert_eq!( + SignedEntityConfig { + allowed_discriminants, + cardano_transactions_signing_config: None, + }, + config + ); } // Success after `inform_epoch_settings` if `cardano_transactions_signing_config` is set { @@ -975,7 +978,9 @@ mod tests { assert_eq!( SignedEntityConfig { allowed_discriminants, - cardano_transactions_signing_config: CardanoTransactionsSigningConfig::dummy(), + cardano_transactions_signing_config: Some( + CardanoTransactionsSigningConfig::dummy() + ), }, config ); diff --git a/openapi.yaml b/openapi.yaml index 1a93aaeaa35..acbb1c01378 100644 --- a/openapi.yaml +++ b/openapi.yaml @@ -4,7 +4,7 @@ info: # `mithril-common/src/lib.rs` file. If you plan to update it # here to reflect changes in the API, please also update the constant in the # Rust file. - version: 0.1.56 + version: 0.1.57 title: Mithril Aggregator Server description: | The REST API provided by a Mithril Aggregator Node in a Mithril network. @@ -1060,7 +1060,6 @@ components: additionalProperties: false required: - protocol_parameters - - cardano_transactions_signing_config - available_signed_entity_types properties: protocol_parameters: