From 190ee3d478f18eefc72c720829eefaf1e7e9dbb6 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 | 3 --- core/src/sumeragi/main_loop.rs | 9 ++++++--- genesis/src/lib.rs | 12 +++++++++++- tools/kagami/src/genesis.rs | 6 +++--- 4 files changed, 20 insertions(+), 10 deletions(-) diff --git a/cli/src/lib.rs b/cli/src/lib.rs index 249c145253d..6e9601dfb1f 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) } 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,