From 3ea433a4aec902472f4c1c08340d7ee310cffd7f Mon Sep 17 00:00:00 2001 From: Dmitry Murzin Date: Wed, 5 Jun 2024 17:19:54 +0300 Subject: [PATCH] refactor: Remove `GenesisNetwork` Signed-off-by: Dmitry Murzin --- cli/src/lib.rs | 9 ++-- client/benches/torii.rs | 4 +- client/examples/million_accounts_genesis.rs | 2 +- client/examples/register_1000_triggers.rs | 2 +- client/tests/integration/permissions.rs | 4 +- .../integration/triggers/by_call_trigger.rs | 4 +- configs/swarm/executor.wasm | Bin 510842 -> 510914 bytes core/src/sumeragi/main_loop.rs | 15 +++--- core/src/sumeragi/mod.rs | 4 +- core/test_network/src/lib.rs | 51 ++++++++---------- genesis/src/lib.rs | 35 +----------- 11 files changed, 45 insertions(+), 85 deletions(-) diff --git a/cli/src/lib.rs b/cli/src/lib.rs index 267e3de5473..aa0c04f3a64 100644 --- a/cli/src/lib.rs +++ b/cli/src/lib.rs @@ -36,7 +36,7 @@ use iroha_core::{ IrohaNetwork, }; use iroha_data_model::prelude::*; -use iroha_genesis::{GenesisNetwork, GenesisTransaction}; +use iroha_genesis::GenesisTransaction; use iroha_logger::{actor::LoggerHandle, InitConfig as LoggerInitConfig}; use iroha_primitives::addr::SocketAddr; use iroha_torii::Torii; @@ -241,7 +241,7 @@ impl Iroha { #[iroha_logger::log(name = "init", skip_all)] // This is actually easier to understand as a linear sequence of init statements. pub async fn start_network( config: Config, - genesis: Option, + genesis: Option, logger: LoggerHandle, ) -> Result { let network = IrohaNetwork::start(config.common.key_pair.clone(), config.network.clone()) @@ -631,10 +631,9 @@ pub enum ConfigError { /// # Errors /// - If failed to read the config /// - If failed to load the genesis block -/// - If failed to build a genesis network pub fn read_config_and_genesis( args: &Args, -) -> Result<(Config, LoggerInitConfig, Option), ConfigError> { +) -> Result<(Config, LoggerInitConfig, Option), ConfigError> { let mut reader = ConfigReader::new(); if let Some(path) = &args.config { @@ -652,7 +651,7 @@ pub fn read_config_and_genesis( let genesis = if let Some(signed_file) = &config.genesis.signed_file { let genesis = read_genesis(&signed_file.resolve_relative_path()) .attach_printable(signed_file.clone().into_attachment().display_path())?; - Some(GenesisNetwork::new(genesis)) + Some(genesis) } else { None }; diff --git a/client/benches/torii.rs b/client/benches/torii.rs index c9f04619425..49642b54a86 100644 --- a/client/benches/torii.rs +++ b/client/benches/torii.rs @@ -39,7 +39,7 @@ fn query_requests(criterion: &mut Criterion) { let builder = PeerBuilder::new() .with_config(configuration) - .with_into_genesis(genesis); + .with_genesis(genesis); rt.block_on(builder.start_with_peer(&mut peer)); rt.block_on(async { @@ -132,7 +132,7 @@ fn instruction_submits(criterion: &mut Criterion) { .build_and_sign(executor, chain_id, &genesis_key_pair); let builder = PeerBuilder::new() .with_config(configuration) - .with_into_genesis(genesis); + .with_genesis(genesis); rt.block_on(builder.start_with_peer(&mut peer)); let mut group = criterion.benchmark_group("instruction-requests"); let domain_id: DomainId = "domain".parse().expect("Valid"); diff --git a/client/examples/million_accounts_genesis.rs b/client/examples/million_accounts_genesis.rs index 1fa819897d4..3b107290e06 100644 --- a/client/examples/million_accounts_genesis.rs +++ b/client/examples/million_accounts_genesis.rs @@ -50,7 +50,7 @@ fn main_genesis() { let genesis = generate_genesis(1_000_000_u32, chain_id, &genesis_key_pair); let builder = PeerBuilder::new() - .with_into_genesis(genesis) + .with_genesis(genesis) .with_config(configuration); // This only submits the genesis. It doesn't check if the accounts diff --git a/client/examples/register_1000_triggers.rs b/client/examples/register_1000_triggers.rs index eedb84642f3..efcbbc2df1c 100644 --- a/client/examples/register_1000_triggers.rs +++ b/client/examples/register_1000_triggers.rs @@ -75,7 +75,7 @@ fn main() -> Result<(), Box> { let genesis = generate_genesis(1_000_u32, chain_id, &genesis_key_pair)?; let builder = PeerBuilder::new() - .with_into_genesis(genesis) + .with_genesis(genesis) .with_config(configuration); let rt = Runtime::test(); diff --git a/client/tests/integration/permissions.rs b/client/tests/integration/permissions.rs index 5be93b75108..1538d6483ab 100644 --- a/client/tests/integration/permissions.rs +++ b/client/tests/integration/permissions.rs @@ -10,7 +10,7 @@ use iroha_data_model::{ permission::Permission, role::RoleId, transaction::error::TransactionRejectionReason, JsonString, }; -use iroha_genesis::GenesisNetwork; +use iroha_genesis::GenesisTransaction; use serde_json::json; use test_network::{PeerBuilder, *}; use test_samples::{gen_account_in, ALICE_ID, BOB_ID}; @@ -22,7 +22,7 @@ fn genesis_transactions_are_validated() { // Setting up genesis - let genesis = GenesisNetwork::test_with_instructions([Grant::permission( + let genesis = GenesisTransaction::test_with_instructions([Grant::permission( Permission::new("InvalidToken".parse().unwrap(), json!(null)), ALICE_ID.clone(), ) diff --git a/client/tests/integration/triggers/by_call_trigger.rs b/client/tests/integration/triggers/by_call_trigger.rs index 337802c4dd7..358173f3018 100644 --- a/client/tests/integration/triggers/by_call_trigger.rs +++ b/client/tests/integration/triggers/by_call_trigger.rs @@ -10,7 +10,7 @@ use iroha::{ }, }; use iroha_crypto::KeyPair; -use iroha_genesis::GenesisNetwork; +use iroha_genesis::GenesisTransaction; use iroha_logger::info; use serde_json::json; use test_network::*; @@ -440,7 +440,7 @@ fn trigger_in_genesis_using_base64() -> Result<()> { ); // Registering trigger in genesis - let genesis = GenesisNetwork::test_with_instructions([Register::trigger(trigger).into()]); + let genesis = GenesisTransaction::test_with_instructions([Register::trigger(trigger).into()]); let (_rt, _peer, mut test_client) = ::new() .with_genesis(genesis) diff --git a/configs/swarm/executor.wasm b/configs/swarm/executor.wasm index bf5b29743bbb3fabb2dac0c25995438d7e17d8a9..618a179cc440ca089a29af4bcb4de28b0a14de71 100644 GIT binary patch delta 65019 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

>S#qHBywN#_-Szz|< zp}|=)GNe8vR)M-+&Fidh4K1ARN4E;=5fpS*z69L@ub;(WY$Yz6rORh8FVlh{hgGLB`^MIfj0EXCyK(et+_F6YRN@MAGU zR^?4YNzi_U>9T@jGt_eAhvf*Ft!TX9WE{Ox)r-s!Z3F05adcr+k{8W~fkGUC&Y&0_ zm8eq9+E@DlBsfs&kV-*H&?(>1OE+ZYGHbXbf1Y)mGYP7-U`&jm2)kGI)%4X3StU5t z&r~&GA`c?*7%9SlO`!ufaP~=|@SC!{1V$AGzPG*!dSpHgzA3|d&xdJV(0aA?H9DIY zvoAyyQThtN8OLB8WPk-cK4wl}9I#Wx^K!x|B4BnKMew=|IZ*X&LJ%5v_^~JQ{y>jz z%Bnb*R=5RJT1PM6lA$4s{aB#QQ?qpPAXvG68h%Tb3`Kob#&9mTKz$GcNWCTd0mIAO z22XH4ZMiKS#nUaQ3mP&3_b7cSzz3APc^kbM)7+-W?fL zcq0Q8D-6p()lOG&)2Ey#iDk#Fl zxVoS^XSYt_cX04*bXSJpO#9YdS+|urYoznI%81%{-k9}bZm@GbTLe8YFOpL=$9zc2f|U;;NuVa7<^4eQ$q9qwsv?;7P@ z=kcZ}??QM<{s9KSdV1{-oZ#nE;vX{3HXRM;!w@e_+y4NTrc>Yp-1()F^MP#cx0$hx zm&-LY>46%`Ee~X<-xdz$jc^U+JdklElwT!tuiQF}Rz*FORrFLp8uS}fkiPd2lyNdG zd?+I-=N0P5cfs@Y`y3(?I;okHL&c zra_NooZmJx8;>fw8BQ6Gr7r+<zB0fKJ$+~k+^zj&w|rB;DG{ox;v3N-)wENO4cMF4N|@=34LqtH^xSaJCM_EAV{EFsy;#xLr1^ zl?u=Iv!U(G+2IyZ%xjk76fLZkCFUOW`H}6iCX9lkk)d32muib|3>;rT0amf z3y)eTC zTvdFnEiE`Qe`2$4275Nf-&zh%M}O-W?TPE0zqO8^eLwoiV8u@`s(RuoA7q6hlVqz4 zN`%P3Wwy1nHAc&H)hlgH;&9qh#;VkS<(9F&2xUz!sFwLyW35fo9M*IW=oxOE>8Jm> z&GoE`b&*4#Sdwh5tkLvyYiqQt*DKa`ek5PE_SA1*puR6#_vsTaQ*0Z!NmuA;8|ypz z#NViQTlQb0YVFv6ou;(2?z1M{OoL3Q#q~pH>pTtiqwc^v-cI-4vfif7Z&@e0E_Ss} z)9GRlYdQ_>VSUfFqNjC(QM9d(k53%_4flTo*GKPKrwXbtz*>Q}^tZO5!vn0Lm;V7fRA_zx delta 64783 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 diff --git a/core/src/sumeragi/main_loop.rs b/core/src/sumeragi/main_loop.rs index 23be4d838c7..a1128c7a8bb 100644 --- a/core/src/sumeragi/main_loop.rs +++ b/core/src/sumeragi/main_loop.rs @@ -260,7 +260,7 @@ impl Sumeragi { fn sumeragi_init_commit_genesis( &mut self, - genesis_network: GenesisNetwork, + genesis_transaction: GenesisTransaction, genesis_public_key: &PublicKey, state: &State, ) { @@ -272,12 +272,13 @@ impl Sumeragi { assert_eq!(state_view.latest_block_hash(), None); } - let transactions: Vec<_> = genesis_network - .into_transactions() - .into_iter() - .map(|tx| AcceptedTransaction::accept_genesis(tx, &self.chain_id, genesis_public_key)) - .collect::>() - .expect("Genesis invalid"); + let transaction = AcceptedTransaction::accept_genesis( + genesis_transaction, + &self.chain_id, + genesis_public_key, + ) + .expect("Genesis invalid"); + let transactions = vec![transaction]; let mut state_block = state.block(); let genesis = BlockBuilder::new(transactions, self.current_topology.clone(), vec![]) diff --git a/core/src/sumeragi/mod.rs b/core/src/sumeragi/mod.rs index a5b7175a645..35f734ce49c 100644 --- a/core/src/sumeragi/mod.rs +++ b/core/src/sumeragi/mod.rs @@ -11,7 +11,7 @@ use eyre::Result; use iroha_config::parameters::actual::{Common as CommonConfig, Sumeragi as SumeragiConfig}; use iroha_crypto::{KeyPair, SignatureOf}; use iroha_data_model::{block::SignedBlock, prelude::*}; -use iroha_genesis::GenesisNetwork; +use iroha_genesis::GenesisTransaction; use iroha_logger::prelude::*; use network_topology::{Role, Topology}; @@ -323,6 +323,6 @@ pub struct SumeragiMetrics { /// Optional genesis paired with genesis public key for verification #[allow(missing_docs)] pub struct GenesisWithPubKey { - pub genesis: Option, + pub genesis: Option, pub public_key: PublicKey, } diff --git a/core/test_network/src/lib.rs b/core/test_network/src/lib.rs index 93d8e724df4..0c7c21a8449 100644 --- a/core/test_network/src/lib.rs +++ b/core/test_network/src/lib.rs @@ -15,7 +15,7 @@ use iroha_config::parameters::actual::{Root as Config, Sumeragi, TrustedPeers}; pub use iroha_core::state::StateReadOnly; use iroha_crypto::{ExposedPrivateKey, KeyPair}; use iroha_data_model::{query::QueryOutputBox, ChainId}; -use iroha_genesis::{GenesisNetwork, GenesisTransaction, RawGenesisTransaction}; +use iroha_genesis::{GenesisTransaction, RawGenesisTransaction}; use iroha_logger::{warn, InstrumentFutures}; use iroha_primitives::{ addr::{socket_addr, SocketAddr}, @@ -68,16 +68,16 @@ pub enum Signatory { /// Trait used to differentiate a test instance of `genesis`. pub trait TestGenesis: Sized { - /// Construct Iroha genesis network + /// Construct Iroha genesis fn test() -> Self { Self::test_with_instructions([]) } - /// Construct genesis network with additional instructions + /// Construct genesis with additional instructions fn test_with_instructions(extra_isi: impl IntoIterator) -> Self; } -impl TestGenesis for GenesisNetwork { +impl TestGenesis for GenesisTransaction { fn test_with_instructions(extra_isi: impl IntoIterator) -> Self { let cfg = Config::test(); @@ -128,10 +128,9 @@ impl TestGenesis for GenesisNetwork { if &cfg.genesis.public_key != genesis_key_pair.public_key() { panic!("`Config::test` expected to use SAMPLE_GENESIS_ACCOUNT_KEYPAIR"); } - let genesis = genesis + genesis .build_and_sign(&genesis_key_pair) - .expect("genesis should load fine"); - GenesisNetwork::new(genesis) + .expect("genesis should load fine") } } @@ -214,7 +213,7 @@ impl Network { let peer = PeerBuilder::new() .with_config(config) - .with_genesis(GenesisNetwork::test()) + .with_test_genesis() .start() .await; @@ -255,7 +254,7 @@ impl Network { (n, builder) } }) - .map(|(n, builder)| builder.with_into_genesis((n == 0).then(GenesisNetwork::test))) + .map(|(n, builder)| builder.with_into_genesis((n == 0).then(GenesisTransaction::test))) .take(n_peers as usize) .collect::>(); let mut peers = builders @@ -443,7 +442,7 @@ impl Peer { async fn start( &mut self, config: Config, - genesis: Option, + genesis: Option, temp_dir: Arc, ) { let mut config = self.get_config(config); @@ -520,30 +519,24 @@ impl Peer { /// `WithGenesis` structure. /// -/// Options for setting up the genesis network for `PeerBuilder`. +/// Options for setting up the genesis for `PeerBuilder`. #[derive(Default)] pub enum WithGenesis { - /// Use the default genesis network. + /// Use the default genesis. #[default] Default, - /// Do not use any genesis networks. + /// Do not use any genesis. None, - /// Use the given genesis network. - Has(GenesisNetwork), + /// Use the given genesis. + Has(GenesisTransaction), } -impl From> for WithGenesis { - fn from(genesis: Option) -> Self { +impl From> for WithGenesis { + fn from(genesis: Option) -> Self { genesis.map_or(Self::None, Self::Has) } } -impl From for WithGenesis { - fn from(genesis: GenesisTransaction) -> Self { - Self::Has(GenesisNetwork::new(genesis)) - } -} - /// `PeerBuilder`. #[derive(Default)] pub struct PeerBuilder { @@ -569,24 +562,24 @@ impl PeerBuilder { self } - /// Set the optional genesis network. + /// Set the optional genesis. #[must_use] pub fn with_into_genesis(mut self, genesis: impl Into) -> Self { self.genesis = genesis.into(); self } - /// Set the genesis network. + /// Set the genesis. #[must_use] - pub fn with_genesis(mut self, genesis: GenesisNetwork) -> Self { + pub fn with_genesis(mut self, genesis: GenesisTransaction) -> Self { self.genesis = WithGenesis::Has(genesis); self } - /// Set the test genesis network. + /// Set the test genesis. #[must_use] pub fn with_test_genesis(self) -> Self { - self.with_genesis(GenesisNetwork::test()) + self.with_genesis(GenesisTransaction::test()) } /// Set Iroha configuration @@ -628,7 +621,7 @@ impl PeerBuilder { pub async fn start_with_peer(self, peer: &mut Peer) { let config = self.config.unwrap_or_else(Config::test); let genesis = match self.genesis { - WithGenesis::Default => Some(GenesisNetwork::test()), + WithGenesis::Default => Some(GenesisTransaction::test()), WithGenesis::None => None, WithGenesis::Has(genesis) => Some(genesis), }; diff --git a/genesis/src/lib.rs b/genesis/src/lib.rs index 8784f7dc074..acc6c491b1a 100644 --- a/genesis/src/lib.rs +++ b/genesis/src/lib.rs @@ -23,28 +23,6 @@ pub static GENESIS_DOMAIN_ID: Lazy = Lazy::new(|| "genesis".parse().un #[repr(transparent)] pub struct GenesisTransaction(pub SignedTransaction); -/// [`GenesisNetwork`] contains initial transactions and genesis setup related parameters. -#[derive(Debug, Clone)] -pub struct GenesisNetwork { - /// Transactions from [`RawGenesisBlock`]. This vector is guaranteed to be non-empty, - /// unless [`GenesisNetwork::transactions_mut()`] is used. - transactions: Vec, -} - -impl GenesisNetwork { - /// Constructor - pub fn new(genesis_transaction: GenesisTransaction) -> GenesisNetwork { - GenesisNetwork { - transactions: vec![genesis_transaction], - } - } - - /// Transform into genesis transactions - pub fn into_transactions(self) -> Vec { - self.transactions - } -} - /// Format of genesis.json user file. /// It should be signed and serialized to [`GenesisTransaction`] /// in SCALE format before supplying to Iroha peer. @@ -144,6 +122,7 @@ fn get_executor(file: &Path) -> Result { /// that does not perform any correctness checking on the block produced. /// Use with caution in tests and other things to register domains and accounts. #[must_use] +#[derive(Default)] pub struct GenesisTransactionBuilder { instructions: Vec, } @@ -157,18 +136,6 @@ pub struct GenesisDomainBuilder { domain_id: DomainId, } -impl Default for GenesisTransactionBuilder { - fn default() -> Self { - // Do not add `impl Default`. While it can technically be - // regarded as a default constructor, this builder should not - // be used in contexts where `Default::default()` is likely to - // be called. - Self { - instructions: Vec::new(), - } - } -} - impl GenesisTransactionBuilder { /// Create a domain and return a domain builder which can /// be used to create assets and accounts.