From 6f2c04c24c8f49a148d576cdeaac3f753555b772 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marin=20Ver=C5=A1i=C4=87?= Date: Fri, 8 Dec 2023 14:11:37 +0300 Subject: [PATCH] [refactor]: apply most recent clippy suggestions (#4129) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Marin Veršić --- cli/src/lib.rs | 2 +- client/tests/integration/transfer_asset.rs | 2 +- config/base/derive/src/utils.rs | 4 +- config/base/tests/simple.rs | 41 ++++++++--------- config/src/iroha.rs | 2 +- configs/peer/executor.wasm | Bin 498091 -> 495847 bytes core/benches/blocks/apply_blocks.rs | 2 +- core/src/block_sync.rs | 2 +- core/src/gossiper.rs | 4 +- core/src/kura.rs | 8 ++-- core/src/query/cursor.rs | 13 +----- core/src/query/store.rs | 12 +++-- core/src/queue.rs | 42 +++++++++--------- core/src/smartcontracts/isi/account.rs | 4 +- core/src/smartcontracts/isi/triggers/set.rs | 2 +- core/src/smartcontracts/wasm.rs | 6 +-- core/src/snapshot.rs | 2 +- core/src/wsv.rs | 2 +- core/test_network/src/lib.rs | 2 +- crypto/src/lib.rs | 5 +-- crypto/src/signature/bls/implementation.rs | 10 ++--- crypto/src/signature/ed25519.rs | 6 +-- crypto/src/signature/secp256k1.rs | 6 +-- .../derive/tests/partial_tagged_serde_self.rs | 2 +- data_model/src/events/pipeline.rs | 14 +++--- data_model/src/lib.rs | 3 +- data_model/src/predicate.rs | 2 +- data_model/src/smart_contract.rs | 2 +- ffi/src/lib.rs | 1 + ffi/src/repr_c.rs | 42 +++++++++--------- ffi/src/slice.rs | 6 +-- genesis/src/lib.rs | 2 +- primitives/src/cmpext.rs | 2 +- primitives/src/unique_vec.rs | 2 +- .../executor/derive/src/entrypoint.rs | 2 +- smart_contract/executor/src/lib.rs | 1 - smart_contract/src/lib.rs | 2 +- telemetry/src/ws.rs | 4 +- tools/kagami/src/genesis.rs | 4 +- tools/wasm_test_runner/src/main.rs | 2 +- 40 files changed, 129 insertions(+), 143 deletions(-) diff --git a/cli/src/lib.rs b/cli/src/lib.rs index f3b07c6f282..bb72b92c049 100644 --- a/cli/src/lib.rs +++ b/cli/src/lib.rs @@ -137,7 +137,7 @@ impl NetworkRelay { tokio::select! { // Receive message from network Some(msg) = receiver.recv() => self.handle_message(msg).await, - _ = self.shutdown_notify.notified() => { + () = self.shutdown_notify.notified() => { iroha_logger::info!("NetworkRelay is being shut down."); break; } diff --git a/client/tests/integration/transfer_asset.rs b/client/tests/integration/transfer_asset.rs index d8087401a8b..b62ba7dc216 100644 --- a/client/tests/integration/transfer_asset.rs +++ b/client/tests/integration/transfer_asset.rs @@ -26,9 +26,9 @@ fn simulate_transfer_fixed() { ) } -#[should_panic] #[test] #[ignore = "long"] +#[should_panic(expected = "insufficient funds")] fn simulate_insufficient_funds() { simulate_transfer( Fixed::try_from(20_f64).expect("Valid"), diff --git a/config/base/derive/src/utils.rs b/config/base/derive/src/utils.rs index 3e8fa7e1f1c..36f79a76384 100644 --- a/config/base/derive/src/utils.rs +++ b/config/base/derive/src/utils.rs @@ -357,7 +357,9 @@ pub fn extract_box_generic(box_seg: &mut syn::PathSegment) -> &mut syn::Type { generics.args.len() == 1, "`Box` should have exactly one generic argument" ); - let syn::GenericArgument::Type(generic_type) = generics.args.first_mut().expect("Can't be empty") else { + let syn::GenericArgument::Type(generic_type) = + generics.args.first_mut().expect("Can't be empty") + else { panic!("`Box` should have type as a generic argument") }; diff --git a/config/base/tests/simple.rs b/config/base/tests/simple.rs index 9084f582e30..4de93ca3632 100644 --- a/config/base/tests/simple.rs +++ b/config/base/tests/simple.rs @@ -11,11 +11,11 @@ use serde::{Deserialize, Serialize}; struct ConfigurationProxy { /// Inner structure #[config(inner)] - optional_inner: Option, + inner: Option, #[config(serde_as_str)] - pub optional_string_wrapper: Option, - pub optional_string: Option, - pub optional_data: Option, + pub string_wrapper: Option, + pub string: Option, + pub data: Option, } #[derive(Clone, Debug, Deserialize, Serialize, Documented)] @@ -33,13 +33,13 @@ struct Configuration { impl ConfigurationProxy { fn new_with_placeholders() -> Self { Self { - optional_inner: Some(InnerConfigurationProxy { + inner: Some(InnerConfigurationProxy { a: Some("string".to_owned()), b: Some(42), }), - optional_string_wrapper: Some(StringWrapper("string".to_owned())), - optional_string: Some("cool string".to_owned()), - optional_data: Some(Data { + string_wrapper: Some(StringWrapper("string".to_owned())), + string: Some("cool string".to_owned()), + data: Some(Data { key: "key".to_owned(), value: 34, }), @@ -48,10 +48,10 @@ impl ConfigurationProxy { fn new_with_none() -> Self { Self { - optional_inner: None, - optional_string_wrapper: None, - optional_string: None, - optional_data: None, + inner: None, + string_wrapper: None, + string: None, + data: None, } } } @@ -157,13 +157,10 @@ fn test_env_factory() -> TestEnv { fn test_proxy_load_from_env() { let config = ConfigurationProxy::new_with_placeholders(); let env_config = ConfigurationProxy::from_env(&test_env_factory()).expect("valid env"); - assert_eq!(&env_config.optional_data, &config.optional_data); - assert_eq!( - &env_config.optional_string_wrapper, - &config.optional_string_wrapper - ); - assert_eq!(&env_config.optional_string, &config.optional_string); - assert_eq!(&env_config.optional_inner, &config.optional_inner); + assert_eq!(&env_config.data, &config.data); + assert_eq!(&env_config.string_wrapper, &config.string_wrapper); + assert_eq!(&env_config.string, &config.string); + assert_eq!(&env_config.inner, &config.inner); } #[test] @@ -172,7 +169,7 @@ fn test_can_load_inner_without_the_wrapping_config() { env.remove_var("CONF_OPTIONAL_INNER"); let config = ConfigurationProxy::new_with_placeholders(); let env_config = ConfigurationProxy::from_env(&env).expect("valid env"); - assert_eq!(&env_config.optional_inner, &config.optional_inner); + assert_eq!(&env_config.inner, &config.inner); } #[test] @@ -180,7 +177,7 @@ fn test_proxy_combine_does_not_overload_with_none() { let config = ConfigurationProxy::new_with_none(); let env_config = ConfigurationProxy::from_env(&test_env_factory()).expect("valid env"); let combine_config = env_config.clone().override_with(config); - assert_eq!(&env_config.optional_data, &combine_config.optional_data); + assert_eq!(&env_config.data, &combine_config.data); } #[test] @@ -205,5 +202,5 @@ fn configuration_proxy_from_env_returns_err_on_parsing_error() { let err = Target::from_env(&Env).expect_err("Must not be parsed"); let err = eyre::Report::new(err); - assert_eq!(format!("{err:?}"), "Failed to deserialize the field `FOO`\n\nCaused by:\n JSON5: --> 1:1\n |\n 1 | not u64 for sure\n | ^---\n |\n = expected array, boolean, null, number, object, or string\n\nLocation:\n config/base/tests/simple.rs:207:15"); + assert_eq!(format!("{err:?}"), "Failed to deserialize the field `FOO`\n\nCaused by:\n JSON5: --> 1:1\n |\n 1 | not u64 for sure\n | ^---\n |\n = expected array, boolean, null, number, object, or string\n\nLocation:\n config/base/tests/simple.rs:204:15"); } diff --git a/config/src/iroha.rs b/config/src/iroha.rs index cd11b80812e..6ed054b6593 100644 --- a/config/src/iroha.rs +++ b/config/src/iroha.rs @@ -268,7 +268,7 @@ mod tests { } #[test] - #[should_panic] + #[should_panic(expected = "Failed to parse Trusted Peers")] fn parse_trusted_peers_fail_duplicate_peer_id() { let trusted_peers_string = r#"[{"address":"127.0.0.1:1337", "public_key": "ed0120954C83A4220FAFFB2C1D23FC5225B3E7952D53ACBB2A065FF30C631E5E1D6B10"}, {"address":"127.0.0.1:1337", "public_key": "ed0120954C83A4220FAFFB2C1D23FC5225B3E7952D53ACBB2A065FF30C631E5E1D6B10"}, {"address":"localhost:1338", "public_key": "ed0120954C83A4220FAFFB2C1D23FC5225B3E7952D53ACBB2A065FF30C631E5E1D6B10"}, {"address": "195.162.0.1:23", "public_key": "ed0120954C83A4220FAFFB2C1D23FC5225B3E7952D53ACBB2A065FF30C631E5E1D6B10"}]"#; let _result: TrustedPeers = diff --git a/configs/peer/executor.wasm b/configs/peer/executor.wasm index 98e559649612f9c7a108fa974374bdd76e02ce23..2ef54f969b642947ac965f14c877ddb8a7b17bb0 100644 GIT binary patch delta 105540 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 delta 107924 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≀#mKi=TL{!`Z(~2ukK)I- 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, _>>()? }; diff --git a/core/src/block_sync.rs b/core/src/block_sync.rs index 1f8d8fe1fcb..22adcfc2ef8 100644 --- a/core/src/block_sync.rs +++ b/core/src/block_sync.rs @@ -56,7 +56,7 @@ impl BlockSynchronizer { loop { tokio::select! { _ = gossip_period.tick() => self.request_block().await, - _ = self.sumeragi.wsv_updated() => { + () = self.sumeragi.wsv_updated() => { let (latest_hash, previous_hash) = self .sumeragi .apply_wsv(|wsv| (wsv.latest_block_hash(), wsv.previous_block_hash())); diff --git a/core/src/gossiper.rs b/core/src/gossiper.rs index 7f1ea21b690..5856dfd4a1b 100644 --- a/core/src/gossiper.rs +++ b/core/src/gossiper.rs @@ -79,7 +79,7 @@ impl TransactionGossiper { loop { tokio::select! { _ = gossip_period.tick() => self.gossip_transactions(), - _ = self.sumeragi.wsv_updated() => { + () = self.sumeragi.wsv_updated() => { self.wsv = self.sumeragi.wsv_clone(); } transaction_gossip = message_receiver.recv() => { @@ -118,7 +118,7 @@ impl TransactionGossiper { match AcceptedTransaction::accept(tx, transaction_limits) { Ok(tx) => match self.queue.push(tx, &self.wsv) { - Ok(_) => {} + Ok(()) => {} Err(crate::queue::Failure { tx, err: crate::queue::Error::InBlockchain, diff --git a/core/src/kura.rs b/core/src/kura.rs index 671b0c958c8..cede4d491b3 100644 --- a/core/src/kura.rs +++ b/core/src/kura.rs @@ -165,7 +165,7 @@ impl Kura { let mut block_data_buffer = vec![0_u8; block.length.try_into()?]; match block_store.read_block_data(block.start, &mut block_data_buffer) { - Ok(_) => match SignedBlock::decode_all_versioned(&block_data_buffer) { + Ok(()) => match SignedBlock::decode_all_versioned(&block_data_buffer) { Ok(decoded_block) => { if previous_block_hash != decoded_block.payload().header.previous_block_hash { @@ -416,7 +416,7 @@ impl BlockStore { .map_err(|e| Error::MkDir(e, store_path.to_path_buf())) { Err(e) => Err(e), - Ok(_) => { + Ok(()) => { if let Err(e) = fs::File::options() .read(true) .write(true) @@ -560,7 +560,7 @@ impl BlockStore { hashes_file .read_exact(&mut buffer) .add_err_context(&path) - .and_then(|_| HashOf::decode_all(&mut buffer.as_slice()).map_err(Error::Codec)) + .and_then(|()| HashOf::decode_all(&mut buffer.as_slice()).map_err(Error::Codec)) }) .collect() } @@ -1036,7 +1036,7 @@ mod tests { } #[test] - #[should_panic] + #[should_panic(expected = "Kura must be able to lock the blockstore")] fn concurrent_lock() { let dir = tempfile::tempdir().unwrap(); let _store = BlockStore::new(dir.path(), LockStatus::Unlocked); diff --git a/core/src/query/cursor.rs b/core/src/query/cursor.rs index b1ef3393c8f..c7e903de4dc 100644 --- a/core/src/query/cursor.rs +++ b/core/src/query/cursor.rs @@ -62,11 +62,7 @@ impl> Batched { self.cursor = if let Some(cursor) = self.cursor { if batch_size >= self.batch_size.get() { - let batch_size = self - .batch_size - .get() - .try_into() - .expect("usize should fit in u64"); + let batch_size = self.batch_size.get().into(); Some( cursor .checked_add(batch_size) @@ -76,12 +72,7 @@ impl> Batched { None } } else if batch_size >= self.batch_size.get() { - Some( - self.batch_size - .get() - .try_into() - .expect("usize should fit in u64"), - ) + Some(self.batch_size.get().into()) } else { None }; diff --git a/core/src/query/store.rs b/core/src/query/store.rs index 432f3ab142c..92684de1e09 100644 --- a/core/src/query/store.rs +++ b/core/src/query/store.rs @@ -326,13 +326,19 @@ mod tests { .handle_query_output(query_output, &sorting, pagination, fetch_size) .unwrap() .into(); - let Value::Vec(v) = batch else { panic!("not expected result") }; + let Value::Vec(v) = batch else { + panic!("not expected result") + }; counter += v.len(); while cursor.cursor.is_some() { - let Ok(batched) = query_store_handle.handle_query_cursor(cursor) else { break }; + let Ok(batched) = query_store_handle.handle_query_cursor(cursor) else { + break; + }; let (batch, new_cursor) = batched.into(); - let Value::Vec(v) = batch else { panic!("not expected result") }; + let Value::Vec(v) = batch else { + panic!("not expected result") + }; counter += v.len(); cursor = new_cursor; diff --git a/core/src/queue.rs b/core/src/queue.rs index 9a3365750d5..bc3d860cd1f 100644 --- a/core/src/queue.rs +++ b/core/src/queue.rs @@ -46,9 +46,9 @@ impl AcceptedTransaction { #[derive(Debug)] pub struct Queue { /// The queue for transactions - queue: ArrayQueue>, + tx_hashes: ArrayQueue>, /// [`AcceptedTransaction`]s addressed by `Hash` - txs: DashMap, AcceptedTransaction>, + accepted_txs: DashMap, AcceptedTransaction>, /// Amount of transactions per user in the queue txs_per_user: DashMap, /// The maximum number of transactions in the queue @@ -99,8 +99,8 @@ impl Queue { /// Makes queue from configuration pub fn from_configuration(cfg: &Configuration) -> Self { Self { - queue: ArrayQueue::new(cfg.max_transactions_in_queue as usize), - txs: DashMap::new(), + tx_hashes: ArrayQueue::new(cfg.max_transactions_in_queue as usize), + accepted_txs: DashMap::new(), txs_per_user: DashMap::new(), max_txs: cfg.max_transactions_in_queue as usize, max_txs_per_user: cfg.max_transactions_in_queue_per_user as usize, @@ -140,7 +140,7 @@ impl Queue { &'wsv self, wsv: &'wsv WorldStateView, ) -> impl Iterator + 'wsv { - self.txs.iter().filter_map(|tx| { + self.accepted_txs.iter().filter_map(|tx| { if self.is_pending(tx.value(), wsv) { return Some(tx.value().clone()); } @@ -151,7 +151,7 @@ impl Queue { /// Returns `n` randomly selected transaction from the queue. pub fn n_random_transactions(&self, n: u32, wsv: &WorldStateView) -> Vec { - self.txs + self.accepted_txs .iter() .filter(|e| self.is_pending(e.value(), wsv)) .map(|e| e.value().clone()) @@ -193,9 +193,9 @@ impl Queue { } // Get `txs_len` before entry to avoid deadlock - let txs_len = self.txs.len(); + let txs_len = self.accepted_txs.len(); let hash = tx.payload().hash(); - let entry = match self.txs.entry(hash) { + let entry = match self.accepted_txs.entry(hash) { Entry::Occupied(mut old_tx) => { // MST case let signatures_amount_before = old_tx.get().signatures().len(); @@ -226,10 +226,10 @@ impl Queue { // Insert entry first so that the `tx` popped from `queue` will always have a `(hash, tx)` record in `txs`. entry.insert(tx); - self.queue.push(hash).map_err(|err_hash| { + self.tx_hashes.push(hash).map_err(|err_hash| { warn!("Queue is full"); let (_, err_tx) = self - .txs + .accepted_txs .remove(&err_hash) .expect("Inserted just before match"); self.decrease_per_user_tx_count(&err_tx.payload().authority); @@ -238,7 +238,7 @@ impl Queue { err: Error::Full, } })?; - trace!("Transaction queue length = {}", self.queue.len(),); + trace!("Transaction queue length = {}", self.tx_hashes.len(),); Ok(()) } @@ -250,10 +250,10 @@ impl Queue { expired_transactions: &mut Vec, ) -> Option { loop { - let Some(hash) = self.queue.pop() else { + let Some(hash) = self.tx_hashes.pop() else { return None; }; - let entry = match self.txs.entry(hash) { + let entry = match self.accepted_txs.entry(hash) { Entry::Occupied(entry) => entry, // FIXME: Reachable under high load. Investigate, see if it's a problem. // As practice shows this code is not `unreachable!()`. @@ -288,7 +288,7 @@ impl Queue { /// Return the number of transactions in the queue. pub fn tx_len(&self) -> usize { - self.txs.len() + self.accepted_txs.len() } /// Gets transactions till they fill whole block or till the end of queue. @@ -335,7 +335,7 @@ impl Queue { seen_queue .into_iter() - .try_for_each(|hash| self.queue.push(hash)) + .try_for_each(|hash| self.tx_hashes.push(hash)) .expect("Exceeded the number of transactions pending"); expired_transactions.extend(expired_transactions_queue); } @@ -623,7 +623,7 @@ mod tests { .. }) )); - assert_eq!(queue.txs.len(), 0); + assert_eq!(queue.accepted_txs.len(), 0); } #[test] @@ -653,7 +653,7 @@ mod tests { .len(), 0 ); - assert_eq!(queue.txs.len(), 0); + assert_eq!(queue.accepted_txs.len(), 0); } #[test] @@ -850,11 +850,11 @@ mod tests { get_txs_handle.join().unwrap(); // Validate the queue state. - let array_queue: Vec<_> = core::iter::from_fn(|| queue.queue.pop()).collect(); + let array_queue: Vec<_> = core::iter::from_fn(|| queue.tx_hashes.pop()).collect(); - assert_eq!(array_queue.len(), queue.txs.len()); + assert_eq!(array_queue.len(), queue.accepted_txs.len()); for tx in array_queue { - assert!(queue.txs.contains_key(&tx)); + assert!(queue.accepted_txs.contains_key(&tx)); } } @@ -889,7 +889,7 @@ mod tests { .. }) )); - assert_eq!(queue.txs.len(), 1); + assert_eq!(queue.accepted_txs.len(), 1); } #[test] diff --git a/core/src/smartcontracts/isi/account.rs b/core/src/smartcontracts/isi/account.rs index 508772dbd6b..2c1e67ca25c 100644 --- a/core/src/smartcontracts/isi/account.rs +++ b/core/src/smartcontracts/isi/account.rs @@ -48,9 +48,7 @@ pub mod isi { match wsv.asset(&asset_id) { Err(err) => match err { - QueryExecutionFail::Find(find_err) - if matches!(find_err, FindError::Asset(_)) => - { + QueryExecutionFail::Find(FindError::Asset(_)) => { assert_can_register(&asset_id.definition_id, wsv, &self.object.value)?; let asset = wsv .asset_or_insert(asset_id.clone(), self.object.value) diff --git a/core/src/smartcontracts/isi/triggers/set.rs b/core/src/smartcontracts/isi/triggers/set.rs index 3cd20738837..624fc2a6acd 100644 --- a/core/src/smartcontracts/isi/triggers/set.rs +++ b/core/src/smartcontracts/isi/triggers/set.rs @@ -175,7 +175,7 @@ impl Serialize for TriggersWithContext<'_, F> { S: Serializer, { let mut map = serializer.serialize_map(Some(self.triggers.len()))?; - for (id, action) in self.triggers.iter() { + for (id, action) in self.triggers { let action = self.set.get_original_action(action.clone()); map.serialize_entry(&id, &action)?; } diff --git a/core/src/smartcontracts/wasm.rs b/core/src/smartcontracts/wasm.rs index 014960c147f..0d0116dba2f 100644 --- a/core/src/smartcontracts/wasm.rs +++ b/core/src/smartcontracts/wasm.rs @@ -1103,7 +1103,7 @@ impl<'wrld> import::traits::GetExecutorPayloads import::traits::GetExecutorPayloads import::traits::GetExecutorPayloads { + () = self.sumeragi.finalized_wsv_updated() => { self.sumeragi.apply_finalized_wsv(|finalized_wsv| self.new_wsv_available = finalized_wsv.height() > 0); } _ = message_receiver.recv() => { diff --git a/core/src/wsv.rs b/core/src/wsv.rs index ba80418e408..13a899845e9 100644 --- a/core/src/wsv.rs +++ b/core/src/wsv.rs @@ -561,7 +561,7 @@ impl WorldStateView { } let wsv = self.clone(); let event = match self.process_trigger(&id, &action, event) { - Ok(_) => { + Ok(()) => { succeed.push(id.clone()); TriggerCompletedEvent::new(id, TriggerCompletedOutcome::Success) } diff --git a/core/test_network/src/lib.rs b/core/test_network/src/lib.rs index 93da80d6b8a..a5fbb690c6f 100644 --- a/core/test_network/src/lib.rs +++ b/core/test_network/src/lib.rs @@ -323,7 +323,7 @@ impl Network { /// When unsuccessful after `MAX_RETRIES`. pub fn wait_for_genesis_committed(clients: &[Client], offline_peers: u32) { const POLL_PERIOD: Duration = Duration::from_millis(1000); - const MAX_RETRIES: u32 = 30; + const MAX_RETRIES: u32 = 40; for _ in 0..MAX_RETRIES { let without_genesis_peers = clients.iter().fold(0_u32, |acc, client| { diff --git a/crypto/src/lib.rs b/crypto/src/lib.rs index eb11d4bf977..5ae39a89ea2 100755 --- a/crypto/src/lib.rs +++ b/crypto/src/lib.rs @@ -367,10 +367,7 @@ impl FromStr for PublicKey { #[cfg(not(feature = "ffi_import"))] impl PublicKey { fn normalize(&self) -> String { - let multihash: &multihash::Multihash = &self - .clone() - .try_into() - .expect("Failed to get multihash representation."); + let multihash: &multihash::Multihash = &self.clone().into(); let bytes = Vec::try_from(multihash).expect("Failed to convert multihash to bytes."); let mut bytes_iter = bytes.into_iter(); diff --git a/crypto/src/signature/bls/implementation.rs b/crypto/src/signature/bls/implementation.rs index c3dff70bc9f..d7084aa82c7 100644 --- a/crypto/src/signature/bls/implementation.rs +++ b/crypto/src/signature/bls/implementation.rs @@ -81,7 +81,7 @@ impl PublicKey { pub fn from_bytes(bytes: &[u8]) -> Result { Ok(Self( - C::Generator::from_bytes(bytes).map_err(|e| Error::Parse(format!("{:?}", e)))?, + C::Generator::from_bytes(bytes).map_err(|e| Error::Parse(format!("{e:?}")))?, )) } } @@ -129,7 +129,7 @@ impl Signature { pub fn from_bytes(bytes: &[u8]) -> Result { Ok(Signature( - C::SignatureGroup::from_bytes(bytes).map_err(|e| Error::Parse(format!("{:?}", e)))?, + C::SignatureGroup::from_bytes(bytes).map_err(|e| Error::Parse(format!("{e:?}")))?, )) } } @@ -140,13 +140,13 @@ impl BlsImpl { fn parse_public_key(pk: &IrohaPublicKey) -> Result, Error> { assert_eq!(pk.digest_function, C::ALGORITHM); PublicKey::from_bytes(&pk.payload) - .map_err(|e| Error::Parse(format!("Failed to parse public key: {}", e))) + .map_err(|e| Error::Parse(format!("Failed to parse public key: {e}"))) } fn parse_private_key(sk: &IrohaPrivateKey) -> Result { assert_eq!(sk.digest_function, C::ALGORITHM); PrivateKey::from_bytes(&sk.payload) - .map_err(|e| Error::Parse(format!("Failed to parse private key: {}", e))) + .map_err(|e| Error::Parse(format!("Failed to parse private key: {e}"))) } // the names are from an RFC, not a good idea to change them @@ -165,7 +165,7 @@ impl BlsImpl { let mut okm = [0u8; PRIVATE_KEY_SIZE]; let h = hkdf::Hkdf::::new(Some(&salt[..]), &ikm); h.expand(&info[..], &mut okm).map_err(|err| { - Error::KeyGen(format!("Failed to generate keypair: {}", err)) + Error::KeyGen(format!("Failed to generate keypair: {err}")) })?; let private_key: PrivateKey = PrivateKey::from(&okm); ( diff --git a/crypto/src/signature/ed25519.rs b/crypto/src/signature/ed25519.rs index 6f462ee9b75..0312bff8c12 100644 --- a/crypto/src/signature/ed25519.rs +++ b/crypto/src/signature/ed25519.rs @@ -2,10 +2,6 @@ use std::convert::TryFrom; use arrayref::array_ref; use ed25519_dalek::{Signature, SigningKey, VerifyingKey as PK}; -pub use ed25519_dalek::{ - EXPANDED_SECRET_KEY_LENGTH as PRIVATE_KEY_SIZE, PUBLIC_KEY_LENGTH as PUBLIC_KEY_SIZE, - SIGNATURE_LENGTH as SIGNATURE_SIZE, -}; use iroha_primitives::const_vec::ConstVec; use rand::{rngs::OsRng, SeedableRng}; use rand_chacha::ChaChaRng; @@ -146,7 +142,7 @@ mod test { assert!(result.is_ok()); assert!(result.unwrap()); - assert_eq!(sig.len(), SIGNATURE_SIZE); + assert_eq!(sig.len(), ed25519_dalek::SIGNATURE_LENGTH); assert_eq!(hex::encode(sig.as_slice()), SIGNATURE_1); //Check if libsodium signs the message and this module still can verify it diff --git a/crypto/src/signature/secp256k1.rs b/crypto/src/signature/secp256k1.rs index 8cca69a1fd5..4d7ec814141 100644 --- a/crypto/src/signature/secp256k1.rs +++ b/crypto/src/signature/secp256k1.rs @@ -81,7 +81,7 @@ mod ecdsa_secp256k1 { pub fn sign(message: &[u8], sk: &PrivateKey) -> Result, Error> { assert_eq!(sk.digest_function, ALGORITHM); let signing_key = k256::SecretKey::from_slice(&sk.payload[..]) - .map_err(|e| Error::Signing(format!("{:?}", e)))?; + .map_err(|e| Error::Signing(format!("{e:?}")))?; let signing_key = k256::ecdsa::SigningKey::from(signing_key); let signature: k256::ecdsa::Signature = signing_key.sign(message); @@ -91,9 +91,9 @@ mod ecdsa_secp256k1 { pub fn verify(message: &[u8], signature: &[u8], pk: &PublicKey) -> Result { let compressed_pk = Self::public_key_compressed(pk); let verifying_key = k256::PublicKey::from_sec1_bytes(&compressed_pk) - .map_err(|e| Error::Signing(format!("{:?}", e)))?; + .map_err(|e| Error::Signing(format!("{e:?}")))?; let signature = k256::ecdsa::Signature::from_slice(signature) - .map_err(|e| Error::Signing(format!("{:?}", e)))?; + .map_err(|e| Error::Signing(format!("{e:?}")))?; let verifying_key = k256::ecdsa::VerifyingKey::from(verifying_key); diff --git a/data_model/derive/tests/partial_tagged_serde_self.rs b/data_model/derive/tests/partial_tagged_serde_self.rs index 1600b04453a..fcb0b173db0 100644 --- a/data_model/derive/tests/partial_tagged_serde_self.rs +++ b/data_model/derive/tests/partial_tagged_serde_self.rs @@ -18,7 +18,7 @@ fn partially_tagged_serde() { Negate(Box::new(Atom(42))), Negate(Box::new(Negate(Box::new(Atom(42))))), ]; - let serialized_values = [r#"42"#, r#"{"Negate":42}"#, r#"{"Negate":{"Negate":42}}"#]; + let serialized_values = [r"42", r#"{"Negate":42}"#, r#"{"Negate":{"Negate":42}}"#]; for (value, serialized_value) in values.iter().zip(serialized_values.iter()) { let serialized = serde_json::to_string(value) diff --git a/data_model/src/events/pipeline.rs b/data_model/src/events/pipeline.rs index 27dbb58ac59..62a208fb0d9 100644 --- a/data_model/src/events/pipeline.rs +++ b/data_model/src/events/pipeline.rs @@ -276,10 +276,10 @@ mod tests { ], events .iter() - .cloned() - .filter(|event| PipelineEventFilter::new() + .filter(|&event| PipelineEventFilter::new() .hash(Hash::prehashed([0_u8; Hash::LENGTH])) .matches(event)) + .cloned() .collect::>() ); assert_eq!( @@ -290,10 +290,10 @@ mod tests { }], events .iter() - .cloned() - .filter(|event| PipelineEventFilter::new() + .filter(|&event| PipelineEventFilter::new() .entity_kind(PipelineEntityKind::Block) .matches(event)) + .cloned() .collect::>() ); assert_eq!( @@ -304,19 +304,19 @@ mod tests { }], events .iter() - .cloned() - .filter(|event| PipelineEventFilter::new() + .filter(|&event| PipelineEventFilter::new() .entity_kind(PipelineEntityKind::Transaction) .hash(Hash::prehashed([2_u8; Hash::LENGTH])) .matches(event)) + .cloned() .collect::>() ); assert_eq!( events, events .iter() + .filter(|&event| PipelineEventFilter::new().matches(event)) .cloned() - .filter(|event| PipelineEventFilter::new().matches(event)) .collect::>() ) } diff --git a/data_model/src/lib.rs b/data_model/src/lib.rs index 8bb1f0d1a98..ff1920331da 100644 --- a/data_model/src/lib.rs +++ b/data_model/src/lib.rs @@ -1593,7 +1593,7 @@ where /// # Examples /// /// - /// ```rust + /// ``` /// use std::ops::ControlFlow; /// use iroha_data_model::PredicateSymbol; /// @@ -1633,7 +1633,6 @@ where /// } /// } /// - /// #[test] /// fn test() { /// let good = Check::Good; /// let bad = Check::Bad("example".to_owned()); diff --git a/data_model/src/predicate.rs b/data_model/src/predicate.rs index 119625f6293..4e5d72d8c0c 100644 --- a/data_model/src/predicate.rs +++ b/data_model/src/predicate.rs @@ -1293,7 +1293,7 @@ pub mod ip_addr { self.0 .iter() .copied() - .zip(input.into_iter()) + .zip(input) .all(|(myself, other)| myself.applies(other)) } } diff --git a/data_model/src/smart_contract.rs b/data_model/src/smart_contract.rs index 0800fbc27df..6e363f07218 100644 --- a/data_model/src/smart_contract.rs +++ b/data_model/src/smart_contract.rs @@ -49,7 +49,7 @@ pub mod payloads { /// Height of the latest block in the blockchain pub block_height: u64, /// Operation to be validated - pub to_validate: T, + pub target: T, } } diff --git a/ffi/src/lib.rs b/ffi/src/lib.rs index 7d84fe3bec5..dcdd52f0d9a 100644 --- a/ffi/src/lib.rs +++ b/ffi/src/lib.rs @@ -329,6 +329,7 @@ macro_rules! ffi_type { type Target = $target; #[inline] + #[allow(clippy::redundant_closure_call)] unsafe fn is_valid(target: &Self::Target) -> bool { $validity_fn(target) } diff --git a/ffi/src/repr_c.rs b/ffi/src/repr_c.rs index b7896a7273f..621b160b173 100644 --- a/ffi/src/repr_c.rs +++ b/ffi/src/repr_c.rs @@ -606,11 +606,11 @@ impl CTypeConvert<'_, Robust, R> for R { type RustStore = (); type FfiStore = (); - fn into_repr_c(self, _: &mut ()) -> R { + fn into_repr_c(self, (): &mut ()) -> R { self } - unsafe fn try_from_repr_c(source: R, _: &mut ()) -> Result { + unsafe fn try_from_repr_c(source: R, (): &mut ()) -> Result { Ok(source) } } @@ -622,7 +622,7 @@ impl CTypeConvert<'_, Robust, *mut [R; N]> for [R; N] store.insert(self) } - unsafe fn try_from_repr_c(source: *mut [R; N], _: &mut ()) -> Result { + unsafe fn try_from_repr_c(source: *mut [R; N], (): &mut ()) -> Result { if source.is_null() { return Err(FfiReturn::ArgIsNull); } @@ -660,7 +660,7 @@ impl CTypeConvert<'_, Box, *mut R> for Box { &mut **store.insert(self) } - unsafe fn try_from_repr_c(source: *mut R, _: &mut ()) -> Result { + unsafe fn try_from_repr_c(source: *mut R, (): &mut ()) -> Result { if source.is_null() { return Err(FfiReturn::ArgIsNull); } @@ -699,7 +699,7 @@ impl CTypeConvert<'_, Box<[Robust]>, SliceMut> for Box<[R]> { SliceMut::from_slice(Some(store.as_mut())) } - unsafe fn try_from_repr_c(source: SliceMut, _: &mut ()) -> Result { + unsafe fn try_from_repr_c(source: SliceMut, (): &mut ()) -> Result { source .into_rust() .ok_or(FfiReturn::ArgIsNull) @@ -741,11 +741,11 @@ impl CTypeConvert<'_, &[Robust], SliceRef> for &[R] { type RustStore = (); type FfiStore = (); - fn into_repr_c(self, _: &mut ()) -> SliceRef { + fn into_repr_c(self, (): &mut ()) -> SliceRef { SliceRef::from_slice(Some(self)) } - unsafe fn try_from_repr_c(source: SliceRef, _: &mut ()) -> Result { + unsafe fn try_from_repr_c(source: SliceRef, (): &mut ()) -> Result { source.into_rust().ok_or(FfiReturn::ArgIsNull) } } @@ -779,11 +779,11 @@ impl CTypeConvert<'_, &mut [Robust], SliceMut> for &mut [R] { type RustStore = (); type FfiStore = (); - fn into_repr_c(self, _: &mut ()) -> SliceMut { + fn into_repr_c(self, (): &mut ()) -> SliceMut { SliceMut::from_slice(Some(self)) } - unsafe fn try_from_repr_c(source: SliceMut, _: &mut ()) -> Result { + unsafe fn try_from_repr_c(source: SliceMut, (): &mut ()) -> Result { source.into_rust().ok_or(FfiReturn::ArgIsNull) } } @@ -814,7 +814,7 @@ impl CTypeConvert<'_, Vec, SliceMut> for Vec { SliceMut::from_slice(Some(store)) } - unsafe fn try_from_repr_c(source: SliceMut, _: &mut ()) -> Result { + unsafe fn try_from_repr_c(source: SliceMut, (): &mut ()) -> Result { source .into_rust() .ok_or(FfiReturn::ArgIsNull) @@ -865,10 +865,10 @@ impl CTypeConvert<'_, Opaque, *mut R> for R { type RustStore = (); type FfiStore = (); - fn into_repr_c(self, _: &mut ()) -> *mut R { + fn into_repr_c(self, (): &mut ()) -> *mut R { Box::into_raw(Box::new(self)) } - unsafe fn try_from_repr_c(source: *mut R, _: &mut ()) -> Result { + unsafe fn try_from_repr_c(source: *mut R, (): &mut ()) -> Result { if source.is_null() { return Err(FfiReturn::ArgIsNull); } @@ -893,11 +893,11 @@ impl CTypeConvert<'_, Box, *mut R> for Box { type RustStore = (); type FfiStore = (); - fn into_repr_c(self, _: &mut ()) -> *mut R { + fn into_repr_c(self, (): &mut ()) -> *mut R { Box::into_raw(self) } - unsafe fn try_from_repr_c(source: *mut R, _: &mut ()) -> Result { + unsafe fn try_from_repr_c(source: *mut R, (): &mut ()) -> Result { if source.is_null() { return Err(FfiReturn::ArgIsNull); } @@ -932,7 +932,7 @@ impl CTypeConvert<'_, Box<[Opaque]>, SliceMut<*mut R>> for Box<[R]> { SliceMut::from_slice(Some(store)) } - unsafe fn try_from_repr_c(source: SliceMut<*mut R>, _: &mut ()) -> Result { + unsafe fn try_from_repr_c(source: SliceMut<*mut R>, (): &mut ()) -> Result { source .into_rust() .ok_or(FfiReturn::ArgIsNull)? @@ -1064,7 +1064,7 @@ impl CTypeConvert<'_, Vec, SliceMut<*mut R>> for Vec { SliceMut::from_slice(Some(store)) } - unsafe fn try_from_repr_c(source: SliceMut<*mut R>, _: &mut ()) -> Result { + unsafe fn try_from_repr_c(source: SliceMut<*mut R>, (): &mut ()) -> Result { source .into_rust() .ok_or(FfiReturn::ArgIsNull)? @@ -1098,7 +1098,7 @@ impl CTypeConvert<'_, [Opaque; N], [*mut R; N]> for [R; N] { type RustStore = (); type FfiStore = (); - fn into_repr_c(self, _: &mut Self::RustStore) -> [*mut R; N] { + fn into_repr_c(self, (): &mut Self::RustStore) -> [*mut R; N] { let array = self .into_iter() .map(Box::new) @@ -1110,7 +1110,7 @@ impl CTypeConvert<'_, [Opaque; N], [*mut R; N]> for [R; N] { unsafe { array.unwrap_unchecked() } } - unsafe fn try_from_repr_c(source: [*mut R; N], _: &mut ()) -> Result { + unsafe fn try_from_repr_c(source: [*mut R; N], (): &mut ()) -> Result { Ok(source .into_iter() .map(|item| { @@ -1133,7 +1133,7 @@ impl CTypeConvert<'_, [Opaque; N], *mut [*mut R; N]> for [R; store.insert(self.into_repr_c(&mut ())) } - unsafe fn try_from_repr_c(source: *mut [*mut R; N], _: &mut ()) -> Result { + unsafe fn try_from_repr_c(source: *mut [*mut R; N], (): &mut ()) -> Result { if source.is_null() { return Err(FfiReturn::ArgIsNull); } @@ -1229,11 +1229,11 @@ impl CTypeConvert<'_, Box, *mut Extern> for Box { type RustStore = (); type FfiStore = (); - fn into_repr_c(self, _: &mut ()) -> *mut Extern { + fn into_repr_c(self, (): &mut ()) -> *mut Extern { ManuallyDrop::new(*self).as_extern_ptr_mut() } - unsafe fn try_from_repr_c(source: *mut Extern, _: &mut ()) -> Result { + unsafe fn try_from_repr_c(source: *mut Extern, (): &mut ()) -> Result { if source.is_null() { return Err(FfiReturn::ArgIsNull); } diff --git a/ffi/src/slice.rs b/ffi/src/slice.rs index d66cf3d0200..8c3edfc9b8e 100644 --- a/ffi/src/slice.rs +++ b/ffi/src/slice.rs @@ -29,19 +29,19 @@ pub struct OutBoxedSlice(*mut C, usize); impl Copy for SliceRef {} impl Clone for SliceRef { fn clone(&self) -> Self { - Self(self.0, self.1) + *self } } impl Copy for SliceMut {} impl Clone for SliceMut { fn clone(&self) -> Self { - Self(self.0, self.1) + *self } } impl Copy for OutBoxedSlice {} impl Clone for OutBoxedSlice { fn clone(&self) -> Self { - Self(self.0, self.1) + *self } } diff --git a/genesis/src/lib.rs b/genesis/src/lib.rs index 5fd2f1fc56a..0428a2240ac 100644 --- a/genesis/src/lib.rs +++ b/genesis/src/lib.rs @@ -63,7 +63,7 @@ impl GenesisNetwork { let transactions_iter = std::iter::once(GenesisTransactionBuilder { isi: vec![UpgradeExpr::new(Executor::try_from(raw_block.executor)?).into()], }) - .chain(raw_block.transactions.into_iter()); + .chain(raw_block.transactions); #[cfg(test)] let transactions_iter = raw_block.transactions.into_iter(); diff --git a/primitives/src/cmpext.rs b/primitives/src/cmpext.rs index 0de287e3f3c..ea4d40239e2 100644 --- a/primitives/src/cmpext.rs +++ b/primitives/src/cmpext.rs @@ -92,7 +92,7 @@ macro_rules! impl_as_dyn_key { impl PartialOrd for dyn $trait + '_ { fn partial_cmp(&self, other: &Self) -> Option<::core::cmp::Ordering> { - self.as_key().partial_cmp(&other.as_key()) + Some(self.cmp(other)) } } diff --git a/primitives/src/unique_vec.rs b/primitives/src/unique_vec.rs index 4448aef397f..728d920370e 100644 --- a/primitives/src/unique_vec.rs +++ b/primitives/src/unique_vec.rs @@ -335,7 +335,7 @@ mod tests { } #[test] - #[should_panic] + #[should_panic(expected = "removal index (is 3) should be < len (is 3)")] fn remove_out_of_bounds_panics() { let mut unique_vec = unique_vec![1, 2, 3]; unique_vec.remove(3); diff --git a/smart_contract/executor/derive/src/entrypoint.rs b/smart_contract/executor/derive/src/entrypoint.rs index 3e4e6daa601..60b6cd9ad65 100644 --- a/smart_contract/executor/derive/src/entrypoint.rs +++ b/smart_contract/executor/derive/src/entrypoint.rs @@ -112,7 +112,7 @@ fn impl_validate_entrypoint( unsafe extern "C" fn #generated_entrypoint_ident() -> *const u8 { let payload = ::iroha_executor::#get_validation_payload_fn_ident(); let verdict: ::iroha_executor::data_model::executor::Result = - #fn_name(payload.authority, payload.to_validate, payload.block_height); + #fn_name(payload.authority, payload.target, payload.block_height); let bytes_box = ::core::mem::ManuallyDrop::new(::iroha_executor::utils::encode_with_length_prefix(&verdict)); bytes_box.as_ptr() diff --git a/smart_contract/executor/src/lib.rs b/smart_contract/executor/src/lib.rs index cdbb7fe199c..8b9a7403a52 100644 --- a/smart_contract/executor/src/lib.rs +++ b/smart_contract/executor/src/lib.rs @@ -227,7 +227,6 @@ pub mod prelude { pub use super::{ data_model::{ executor::{MigrationError, MigrationResult, Result}, - prelude::*, visit::Visit, ValidationFail, }, diff --git a/smart_contract/src/lib.rs b/smart_contract/src/lib.rs index 5ec0acd2083..45232f9cdfb 100644 --- a/smart_contract/src/lib.rs +++ b/smart_contract/src/lib.rs @@ -269,7 +269,7 @@ impl QueryOutputCursor { /// May fail due to the same reasons [`QueryOutputCursorIterator`] can fail to iterate. pub fn collect(self) -> Result>> { let Value::Vec(v) = self.batch else { - return Ok(self.batch) + return Ok(self.batch); }; // Making sure we received all values diff --git a/telemetry/src/ws.rs b/telemetry/src/ws.rs index 67579104b91..700860f2de8 100644 --- a/telemetry/src/ws.rs +++ b/telemetry/src/ws.rs @@ -139,7 +139,7 @@ where async fn send_message(&mut self, msg: Message) { if let Some(sink) = self.sink.as_mut() { match sink.send(msg).await { - Ok(_) => {} + Ok(()) => {} Err(Error::AlreadyClosed | Error::ConnectionClosed) => { iroha_logger::debug!("Closed connection to telemetry"); self.sink = None; @@ -305,7 +305,7 @@ mod tests { let this = Pin::into_inner(self); match this.sender.poll_ready(cx) { Poll::Ready(r) => { - let result = (this.before_send)().map(|_| r.expect("failed to send")); + let result = (this.before_send)().map(|()| r.expect("failed to send")); Poll::Ready(result) } Poll::Pending => Poll::Pending, diff --git a/tools/kagami/src/genesis.rs b/tools/kagami/src/genesis.rs index 41ff4c71237..48caeb74337 100644 --- a/tools/kagami/src/genesis.rs +++ b/tools/kagami/src/genesis.rs @@ -15,9 +15,9 @@ use serde_json::json; use super::*; -const INLINED_EXECUTOR_WARNING: &str = r#"WARN: You're using genesis with inlined executor. +const INLINED_EXECUTOR_WARNING: &str = r"WARN: You're using genesis with inlined executor. Consider specifying a separate executor file using `--executor-path-in-genesis` instead. -Use `--help` for more information."#; +Use `--help` for more information."; #[derive(Parser, Debug, Clone)] #[clap(group = ArgGroup::new("executor").required(true))] diff --git a/tools/wasm_test_runner/src/main.rs b/tools/wasm_test_runner/src/main.rs index a2d3b5ca91f..951889169e8 100644 --- a/tools/wasm_test_runner/src/main.rs +++ b/tools/wasm_test_runner/src/main.rs @@ -23,7 +23,7 @@ fn main() -> Result { }; // Modules can be compiled through either the text or binary format let engine = Engine::default(); - let module = Module::from_file(&engine, &file)?; + let module = Module::from_file(&engine, file)?; let mut tests = Vec::new(); for export in module.exports() { if let Some(name) = export.name().strip_prefix("$webassembly-test$") {