From d3b579ea29a3ff3949df8afa768f4eb0ed4323ca Mon Sep 17 00:00:00 2001 From: VAmuzing Date: Thu, 25 Apr 2024 01:05:18 +0300 Subject: [PATCH] [fix] fix compile error; add custom serialization for tests Signed-off-by: VAmuzing --- cli/src/lib.rs | 7 +------ client/examples/register_1000_triggers.rs | 19 ++++++++----------- core/src/sumeragi/main_loop.rs | 9 ++++++--- genesis/src/lib.rs | 12 +++++++++++- tools/kagami/src/genesis.rs | 6 +++--- tools/swarm/src/compose.rs | 4 ++-- 6 files changed, 31 insertions(+), 26 deletions(-) diff --git a/cli/src/lib.rs b/cli/src/lib.rs index 249c145253d..eb3357d18f0 100644 --- a/cli/src/lib.rs +++ b/cli/src/lib.rs @@ -670,13 +670,10 @@ mod tests { fn config_to_toml_value(config: PartialUserConfig) -> Result { use iroha_crypto::ExposedPrivateKey; let private_key = config.private_key.as_ref().unwrap().clone(); - let genesis_private_key = config.genesis.private_key.as_ref().unwrap().clone(); let mut result = toml::Value::try_from(config)?; // private key will be serialized as "[REDACTED PrivateKey]" so need to restore it result["private_key"] = toml::Value::try_from(ExposedPrivateKey(private_key))?; - result["genesis"]["private_key"] = - toml::Value::try_from(ExposedPrivateKey(genesis_private_key))?; Ok(result) } @@ -688,9 +685,7 @@ mod tests { let dir = tempfile::tempdir()?; let genesis = RawGenesisBlockBuilder::default() - .executor_file(PathBuf::from( - dir.path().join("config/genesis/executor.wasm"), - )) + .executor_file(dir.path().join("config/genesis/executor.wasm")) .build(); let genesis_path = dir.path().join("config/genesis/gen.json"); diff --git a/client/examples/register_1000_triggers.rs b/client/examples/register_1000_triggers.rs index 6de1efd77bc..af15be7c9da 100644 --- a/client/examples/register_1000_triggers.rs +++ b/client/examples/register_1000_triggers.rs @@ -8,8 +8,7 @@ use iroha_data_model::trigger::TriggerId; use iroha_genesis::{GenesisNetwork, RawGenesisBlock, RawGenesisBlockBuilder}; use iroha_primitives::unique_vec; use test_network::{ - get_chain_id, wait_for_genesis_committed_with_max_retries, Peer as TestPeer, PeerBuilder, - TestClient, TestRuntime, + get_chain_id, get_genesis_signature, wait_for_genesis_committed_with_max_retries, Peer as TestPeer, PeerBuilder, TestClient, TestRuntime }; use tokio::runtime::Runtime; @@ -57,25 +56,23 @@ fn generate_genesis(num_triggers: u32) -> Result Result<(), Box> { let mut peer = ::new().expect("Failed to create peer"); + let peer_key_pair = &peer.key_pair; let chain_id = get_chain_id(); let mut configuration = get_config( &unique_vec![peer.id.clone()], Some(chain_id.clone()), - Some(peer.key_pair.clone()), + Some(peer_key_pair.clone()), + &get_genesis_signature(), ); + let raw_block = generate_genesis(1_000_u32)?; + let signature = GenesisNetwork::new_genesis_signature(raw_block.clone(), &chain_id, peer_key_pair); + // Increase executor limits for large genesis configuration.chain_wide.executor_runtime.fuel_limit = u64::MAX; configuration.chain_wide.executor_runtime.max_memory_bytes = u32::MAX; - let genesis = GenesisNetwork::new( - generate_genesis(1_000_u32)?, - &chain_id, - configuration - .genesis - .key_pair() - .expect("should be available in the config; probably a bug"), - ); + let genesis = GenesisNetwork::try_parse(raw_block, signature)?; let builder = PeerBuilder::new() .with_into_genesis(genesis) diff --git a/core/src/sumeragi/main_loop.rs b/core/src/sumeragi/main_loop.rs index 778b486a9a1..31b16714a44 100644 --- a/core/src/sumeragi/main_loop.rs +++ b/core/src/sumeragi/main_loop.rs @@ -271,9 +271,12 @@ impl Sumeragi { assert_eq!(state_view.latest_block_hash(), None); } - let genesis_accepted_tx = - AcceptedTransaction::accept_genesis(genesis_network.into_transaction(), &self.chain_id) - .expect("Genesis invalid"); + let genesis_accepted_tx = AcceptedTransaction::accept_genesis( + genesis_network.into_transaction(), + &self.chain_id, + genesis_public_key, + ) + .expect("Genesis invalid"); let transactions = Vec::from([genesis_accepted_tx]); let mut state_block = state.block(); diff --git a/genesis/src/lib.rs b/genesis/src/lib.rs index 0f0394f0fde..ebf9f9433a8 100644 --- a/genesis/src/lib.rs +++ b/genesis/src/lib.rs @@ -58,13 +58,23 @@ pub enum GenesisSignatureParseError { impl std::error::Error for GenesisSignatureParseError {} /// [`SignedGenesisConfig`] contains data that is used for loading signed genesis from config. -#[derive(Debug, Clone, PartialEq, Eq, Decode, Encode, Serialize)] +#[derive(Debug, Clone, PartialEq, Eq, Decode, Encode)] pub struct GenesisSignature { chain_id: ChainId, creation_time: Duration, signatures: SignaturesOf, } +impl Serialize for GenesisSignature { + fn serialize(&self, serializer: S) -> Result + where + S: serde::Serializer, + { + let hex_encoded_string = self.to_hex_string(); + hex_encoded_string.serialize(serializer) + } +} + struct GenesisSignatureVisitor; impl de::Visitor<'_> for GenesisSignatureVisitor { diff --git a/tools/kagami/src/genesis.rs b/tools/kagami/src/genesis.rs index b341b882901..88f13764268 100644 --- a/tools/kagami/src/genesis.rs +++ b/tools/kagami/src/genesis.rs @@ -272,6 +272,9 @@ fn generate_synthetic( #[command(group = ArgGroup::new("private_key").required(true))] #[command(group = ArgGroup::new("public_key").required(true))] pub struct SignArgs { + /// Path to genesis json file + #[clap(long)] + genesis_file: PathBuf, /// The algorithm of the provided keypair #[clap(default_value_t, long, short)] algorithm: crypto::AlgorithmArg, @@ -293,9 +296,6 @@ pub struct SignArgs { /// Unique id of blockchain #[clap(long)] chain_id: ChainId, - /// Path to genesis json file - #[clap(long, short)] - genesis_file: PathBuf, /// Encode signed genesis block with SCALE (it is only supported with file output) #[clap(long, short, default_value_t = false)] binary: bool, diff --git a/tools/swarm/src/compose.rs b/tools/swarm/src/compose.rs index a4ae4a0333f..d5c77324766 100644 --- a/tools/swarm/src/compose.rs +++ b/tools/swarm/src/compose.rs @@ -407,8 +407,8 @@ impl DockerComposeBuilder<'_> { let mut peers_iter = peers.iter(); - let signature = self.signature.clone().map_or( - generate_hex_string_signature(&chain_id, &genesis_key_pair), + let signature = self.signature.clone().map_or_else( + || generate_hex_string_signature(&chain_id, &genesis_key_pair), |sign| sign, );