rust: set stable toolchain and clippy chore

This commit is contained in:
skoupidi
2025-11-24 17:03:48 +02:00
parent b4a9071da2
commit 621e704115
28 changed files with 106 additions and 98 deletions

View File

@@ -68,7 +68,7 @@ async fn sync_blocks_real(ex: Arc<Executor<'static>>) -> Result<()> {
let block4 = th.generate_next_block(&mut fork).await?; let block4 = th.generate_next_block(&mut fork).await?;
// Add them to nodes // Add them to nodes
th.add_blocks(&vec![block1, block2.clone(), block3.clone(), block4]).await?; th.add_blocks(&[block1, block2.clone(), block3.clone(), block4]).await?;
// Nodes must have one fork with 2 blocks // Nodes must have one fork with 2 blocks
th.validate_fork_chains(1, vec![2]).await; th.validate_fork_chains(1, vec![2]).await;
@@ -93,7 +93,7 @@ async fn sync_blocks_real(ex: Arc<Executor<'static>>) -> Result<()> {
.await?; .await?;
let block6 = th.generate_next_block(&mut fork).await?; let block6 = th.generate_next_block(&mut fork).await?;
// Add them to nodes // Add them to nodes
th.add_blocks(&vec![block5, block6]).await?; th.add_blocks(&[block5, block6]).await?;
// Grab current best fork index // Grab current best fork index
let forks = th.alice.validator.consensus.forks.read().await; let forks = th.alice.validator.consensus.forks.read().await;
@@ -140,7 +140,7 @@ async fn sync_blocks_real(ex: Arc<Executor<'static>>) -> Result<()> {
drop(charlie_forks); drop(charlie_forks);
// Extend the small fork sequence and add it to nodes // Extend the small fork sequence and add it to nodes
th.add_blocks(&vec![th.generate_next_block(&mut fork).await?]).await?; th.add_blocks(&[th.generate_next_block(&mut fork).await?]).await?;
// Nodes must have two forks with 2 blocks each // Nodes must have two forks with 2 blocks each
th.validate_fork_chains(2, vec![2, 2]).await; th.validate_fork_chains(2, vec![2, 2]).await;
@@ -167,7 +167,7 @@ async fn sync_blocks_real(ex: Arc<Executor<'static>>) -> Result<()> {
// we extend it until it becomes best and a confirmation // we extend it until it becomes best and a confirmation
// occurred. // occurred.
loop { loop {
th.add_blocks(&vec![th.generate_next_block(&mut fork).await?]).await?; th.add_blocks(&[th.generate_next_block(&mut fork).await?]).await?;
// Check if confirmation occured // Check if confirmation occured
if th.alice.validator.blockchain.len() > 4 { if th.alice.validator.blockchain.len() > 4 {
break break

View File

@@ -48,7 +48,7 @@ async fn sync_forks_real(ex: Arc<Executor<'static>>) -> Result<()> {
let mut fork2 = fork1.full_clone()?; let mut fork2 = fork1.full_clone()?;
// Extend first fork with 3 blocks // Extend first fork with 3 blocks
th.add_blocks(&vec![ th.add_blocks(&[
th.generate_next_block(&mut fork0).await?, th.generate_next_block(&mut fork0).await?,
th.generate_next_block(&mut fork0).await?, th.generate_next_block(&mut fork0).await?,
th.generate_next_block(&mut fork0).await?, th.generate_next_block(&mut fork0).await?,
@@ -56,10 +56,10 @@ async fn sync_forks_real(ex: Arc<Executor<'static>>) -> Result<()> {
.await?; .await?;
// Extend second fork with 1 block // Extend second fork with 1 block
th.add_blocks(&vec![th.generate_next_block(&mut fork1).await?]).await?; th.add_blocks(&[th.generate_next_block(&mut fork1).await?]).await?;
// Extend third fork with 1 block // Extend third fork with 1 block
th.add_blocks(&vec![th.generate_next_block(&mut fork2).await?]).await?; th.add_blocks(&[th.generate_next_block(&mut fork2).await?]).await?;
// Check nodes have all the forks // Check nodes have all the forks
th.validate_fork_chains(3, vec![3, 1, 1]).await; th.validate_fork_chains(3, vec![3, 1, 1]).await;
@@ -84,8 +84,8 @@ async fn sync_forks_real(ex: Arc<Executor<'static>>) -> Result<()> {
drop(charlie_forks); drop(charlie_forks);
// Extend the small fork sequences and add it to nodes // Extend the small fork sequences and add it to nodes
th.add_blocks(&vec![th.generate_next_block(&mut fork1).await?]).await?; th.add_blocks(&[th.generate_next_block(&mut fork1).await?]).await?;
th.add_blocks(&vec![th.generate_next_block(&mut fork2).await?]).await?; th.add_blocks(&[th.generate_next_block(&mut fork2).await?]).await?;
// Check charlie has the correct forks // Check charlie has the correct forks
let charlie_forks = charlie.validator.consensus.forks.read().await; let charlie_forks = charlie.validator.consensus.forks.read().await;

View File

@@ -74,7 +74,7 @@ pub struct RlnIdentity {
} }
impl RlnIdentity { impl RlnIdentity {
pub fn new(mut rng: (impl CryptoRng + RngCore)) -> Self { pub fn new(mut rng: impl CryptoRng + RngCore) -> Self {
Self { Self {
nullifier: poseidon_hash([ nullifier: poseidon_hash([
RLN_NULLIFIER_DERIVATION_PATH, RLN_NULLIFIER_DERIVATION_PATH,

View File

@@ -19,6 +19,7 @@
use std::{ use std::{
collections::{HashMap, HashSet, VecDeque}, collections::{HashMap, HashSet, VecDeque},
io::Cursor, io::Cursor,
slice,
sync::{ sync::{
atomic::{AtomicBool, AtomicUsize, Ordering::SeqCst}, atomic::{AtomicBool, AtomicUsize, Ordering::SeqCst},
Arc, Arc,
@@ -196,7 +197,7 @@ impl Client {
*self.last_sent.write().await = event_id; *self.last_sent.write().await = event_id;
// If it fails for some reason, for now, we just note it and pass. // If it fails for some reason, for now, we just note it and pass.
if let Err(e) = self.server.darkirc.event_graph.dag_insert(&[event.clone()]).await { if let Err(e) = self.server.darkirc.event_graph.dag_insert(slice::from_ref(&event)).await {
error!("[IRC CLIENT] Failed inserting new event to DAG: {e}"); error!("[IRC CLIENT] Failed inserting new event to DAG: {e}");
} else { } else {
// We sent this, so it should be considered seen. // We sent this, so it should be considered seen.

View File

@@ -18,6 +18,7 @@
use std::{ use std::{
io::{stdin, Cursor, Read}, io::{stdin, Cursor, Read},
slice,
str::FromStr, str::FromStr,
}; };
@@ -200,15 +201,14 @@ pub fn generate_completions(shell: &str) -> Result<String> {
.long("half-split") .long("half-split")
.help("Split the output coin into two equal halves"); .help("Split the output coin into two equal halves");
let transfer = let transfer = SubCommand::with_name("transfer").about("Create a payment transaction").args(&[
SubCommand::with_name("transfer").about("Create a payment transaction").args(&vec![ amount.clone(),
amount.clone(), token.clone(),
token.clone(), recipient.clone(),
recipient.clone(), spend_hook.clone(),
spend_hook.clone(), user_data.clone(),
user_data.clone(), half_split,
half_split, ]);
]);
// Otc // Otc
let value_pair = Arg::with_name("value-pair") let value_pair = Arg::with_name("value-pair")
@@ -225,7 +225,7 @@ pub fn generate_completions(shell: &str) -> Result<String> {
let init = SubCommand::with_name("init") let init = SubCommand::with_name("init")
.about("Initialize the first half of the atomic swap") .about("Initialize the first half of the atomic swap")
.args(&vec![value_pair, token_pair]); .args(&[value_pair, token_pair]);
let join = let join =
SubCommand::with_name("join").about("Build entire swap tx given the first half from stdin"); SubCommand::with_name("join").about("Build entire swap tx given the first half from stdin");
@@ -254,7 +254,7 @@ pub fn generate_completions(shell: &str) -> Result<String> {
let gov_token_id = Arg::with_name("gov-token-id").help("DAO's governance token ID"); let gov_token_id = Arg::with_name("gov-token-id").help("DAO's governance token ID");
let create = SubCommand::with_name("create").about("Create DAO parameters").args(&vec![ let create = SubCommand::with_name("create").about("Create DAO parameters").args(&[
proposer_limit, proposer_limit,
quorum, quorum,
early_exec_quorum, early_exec_quorum,
@@ -268,27 +268,27 @@ pub fn generate_completions(shell: &str) -> Result<String> {
let import = SubCommand::with_name("import") let import = SubCommand::with_name("import")
.about("Import DAO data from stdin") .about("Import DAO data from stdin")
.args(&vec![name.clone()]); .args(slice::from_ref(&name));
let opt_name = Arg::with_name("dao-alias").help("Name identifier for the DAO (optional)"); let opt_name = Arg::with_name("dao-alias").help("Name identifier for the DAO (optional)");
let list = SubCommand::with_name("list") let list = SubCommand::with_name("list")
.about("List imported DAOs (or info about a specific one)") .about("List imported DAOs (or info about a specific one)")
.args(&vec![opt_name]); .args(&[opt_name]);
let balance = SubCommand::with_name("balance") let balance = SubCommand::with_name("balance")
.about("Show the balance of a DAO") .about("Show the balance of a DAO")
.args(&vec![name.clone()]); .args(slice::from_ref(&name));
let mint = SubCommand::with_name("mint") let mint = SubCommand::with_name("mint")
.about("Mint an imported DAO on-chain") .about("Mint an imported DAO on-chain")
.args(&vec![name.clone()]); .args(slice::from_ref(&name));
let duration = Arg::with_name("duration").help("Duration of the proposal, in block windows"); let duration = Arg::with_name("duration").help("Duration of the proposal, in block windows");
let propose_transfer = SubCommand::with_name("propose-transfer") let propose_transfer = SubCommand::with_name("propose-transfer")
.about("Create a transfer proposal for a DAO") .about("Create a transfer proposal for a DAO")
.args(&vec![ .args(&[
name.clone(), name.clone(),
duration.clone(), duration.clone(),
amount, amount,
@@ -300,10 +300,9 @@ pub fn generate_completions(shell: &str) -> Result<String> {
let propose_generic = SubCommand::with_name("propose-generic") let propose_generic = SubCommand::with_name("propose-generic")
.about("Create a generic proposal for a DAO") .about("Create a generic proposal for a DAO")
.args(&vec![name.clone(), duration, user_data.clone()]); .args(&[name.clone(), duration, user_data.clone()]);
let proposals = let proposals = SubCommand::with_name("proposals").about("List DAO proposals").args(&[name]);
SubCommand::with_name("proposals").about("List DAO proposals").args(&vec![name]);
let bulla = Arg::with_name("bulla").help("Bulla identifier for the proposal"); let bulla = Arg::with_name("bulla").help("Bulla identifier for the proposal");
@@ -311,7 +310,7 @@ pub fn generate_completions(shell: &str) -> Result<String> {
let mint_proposal = Arg::with_name("mint-proposal").help("Create the proposal transaction"); let mint_proposal = Arg::with_name("mint-proposal").help("Create the proposal transaction");
let proposal = SubCommand::with_name("proposal").about("View a DAO proposal data").args(&vec![ let proposal = SubCommand::with_name("proposal").about("View a DAO proposal data").args(&[
bulla.clone(), bulla.clone(),
export, export,
mint_proposal, mint_proposal,
@@ -325,7 +324,7 @@ pub fn generate_completions(shell: &str) -> Result<String> {
let vote_weight = let vote_weight =
Arg::with_name("vote-weight").help("Optional vote weight (amount of governance tokens)"); Arg::with_name("vote-weight").help("Optional vote weight (amount of governance tokens)");
let vote = SubCommand::with_name("vote").about("Vote on a given proposal").args(&vec![ let vote = SubCommand::with_name("vote").about("Vote on a given proposal").args(&[
bulla.clone(), bulla.clone(),
vote, vote,
vote_weight, vote_weight,
@@ -333,8 +332,7 @@ pub fn generate_completions(shell: &str) -> Result<String> {
let early = Arg::with_name("early").long("early").help("Execute the proposal early"); let early = Arg::with_name("early").long("early").help("Execute the proposal early");
let exec = let exec = SubCommand::with_name("exec").about("Execute a DAO proposal").args(&[bulla, early]);
SubCommand::with_name("exec").about("Execute a DAO proposal").args(&vec![bulla, early]);
let spend_hook_cmd = SubCommand::with_name("spend-hook") let spend_hook_cmd = SubCommand::with_name("spend-hook")
.about("Print the DAO contract base64-encoded spend hook"); .about("Print the DAO contract base64-encoded spend hook");
@@ -374,7 +372,7 @@ pub fn generate_completions(shell: &str) -> Result<String> {
let scan = SubCommand::with_name("scan") let scan = SubCommand::with_name("scan")
.about("Scan the blockchain and parse relevant transactions") .about("Scan the blockchain and parse relevant transactions")
.args(&vec![reset]); .args(&[reset]);
// Explorer // Explorer
let tx_hash = Arg::with_name("tx-hash").help("Transaction hash"); let tx_hash = Arg::with_name("tx-hash").help("Transaction hash");
@@ -383,7 +381,7 @@ pub fn generate_completions(shell: &str) -> Result<String> {
let fetch_tx = SubCommand::with_name("fetch-tx") let fetch_tx = SubCommand::with_name("fetch-tx")
.about("Fetch a blockchain transaction by hash") .about("Fetch a blockchain transaction by hash")
.args(&vec![tx_hash, encode]); .args(&[tx_hash, encode]);
let simulate_tx = let simulate_tx =
SubCommand::with_name("simulate-tx").about("Read a transaction from stdin and simulate it"); SubCommand::with_name("simulate-tx").about("Read a transaction from stdin and simulate it");
@@ -396,7 +394,7 @@ pub fn generate_completions(shell: &str) -> Result<String> {
let txs_history = SubCommand::with_name("txs-history") let txs_history = SubCommand::with_name("txs-history")
.about("Fetch broadcasted transactions history") .about("Fetch broadcasted transactions history")
.args(&vec![tx_hash, encode]); .args(&[tx_hash, encode]);
let clear_reverted = let clear_reverted =
SubCommand::with_name("clear-reverted").about("Remove reverted transactions from history"); SubCommand::with_name("clear-reverted").about("Remove reverted transactions from history");
@@ -405,7 +403,7 @@ pub fn generate_completions(shell: &str) -> Result<String> {
let scanned_blocks = SubCommand::with_name("scanned-blocks") let scanned_blocks = SubCommand::with_name("scanned-blocks")
.about("Fetch scanned blocks records") .about("Fetch scanned blocks records")
.args(&vec![height]); .args(&[height]);
let explorer = SubCommand::with_name("explorer") let explorer = SubCommand::with_name("explorer")
.about("Explorer related subcommands") .about("Explorer related subcommands")
@@ -416,7 +414,7 @@ pub fn generate_completions(shell: &str) -> Result<String> {
let token = Arg::with_name("token").help("Token to create alias for"); let token = Arg::with_name("token").help("Token to create alias for");
let add = SubCommand::with_name("add").about("Create a Token alias").args(&vec![alias, token]); let add = SubCommand::with_name("add").about("Create a Token alias").args(&[alias, token]);
let alias = Arg::with_name("alias") let alias = Arg::with_name("alias")
.short("a") .short("a")
@@ -435,7 +433,7 @@ pub fn generate_completions(shell: &str) -> Result<String> {
"Print alias info of optional arguments. \ "Print alias info of optional arguments. \
If no argument is provided, list all the aliases in the wallet.", If no argument is provided, list all the aliases in the wallet.",
) )
.args(&vec![alias, token]); .args(&[alias, token]);
let alias = Arg::with_name("alias").help("Token alias to remove"); let alias = Arg::with_name("alias").help("Token alias to remove");
@@ -452,7 +450,7 @@ pub fn generate_completions(shell: &str) -> Result<String> {
let import = SubCommand::with_name("import") let import = SubCommand::with_name("import")
.about("Import a mint authority") .about("Import a mint authority")
.args(&vec![secret_key, token_blind]); .args(&[secret_key, token_blind]);
let generate_mint = let generate_mint =
SubCommand::with_name("generate-mint").about("Generate a new mint authority"); SubCommand::with_name("generate-mint").about("Generate a new mint authority");
@@ -468,7 +466,7 @@ pub fn generate_completions(shell: &str) -> Result<String> {
let mint = SubCommand::with_name("mint") let mint = SubCommand::with_name("mint")
.about("Mint tokens") .about("Mint tokens")
.args(&vec![token, amount, recipient, spend_hook, user_data]); .args(&[token, amount, recipient, spend_hook, user_data]);
let token = Arg::with_name("token").help("Token ID to freeze"); let token = Arg::with_name("token").help("Token ID to freeze");
@@ -490,13 +488,13 @@ pub fn generate_completions(shell: &str) -> Result<String> {
let list = SubCommand::with_name("list") let list = SubCommand::with_name("list")
.about("List deploy authorities in the wallet (or a specific one)") .about("List deploy authorities in the wallet (or a specific one)")
.args(&vec![contract_id]); .args(&[contract_id]);
let tx_hash = Arg::with_name("tx-hash").help("Record transaction hash"); let tx_hash = Arg::with_name("tx-hash").help("Record transaction hash");
let export_data = SubCommand::with_name("export-data") let export_data = SubCommand::with_name("export-data")
.about("Export a contract history record wasm bincode and deployment instruction, encoded to base64") .about("Export a contract history record wasm bincode and deployment instruction, encoded to base64")
.args(&vec![tx_hash]); .args(&[tx_hash]);
let deploy_auth = Arg::with_name("deploy-auth").help("Contract ID (deploy authority)"); let deploy_auth = Arg::with_name("deploy-auth").help("Contract ID (deploy authority)");
@@ -505,14 +503,13 @@ pub fn generate_completions(shell: &str) -> Result<String> {
let deploy_ix = let deploy_ix =
Arg::with_name("deploy-ix").help("Optional path to serialized deploy instruction"); Arg::with_name("deploy-ix").help("Optional path to serialized deploy instruction");
let deploy = SubCommand::with_name("deploy").about("Deploy a smart contract").args(&vec![ let deploy = SubCommand::with_name("deploy").about("Deploy a smart contract").args(&[
deploy_auth.clone(), deploy_auth.clone(),
wasm_path, wasm_path,
deploy_ix, deploy_ix,
]); ]);
let lock = let lock = SubCommand::with_name("lock").about("Lock a smart contract").args(&[deploy_auth]);
SubCommand::with_name("lock").about("Lock a smart contract").args(&vec![deploy_auth]);
let contract = SubCommand::with_name("contract") let contract = SubCommand::with_name("contract")
.about("Contract functionalities") .about("Contract functionalities")
@@ -569,7 +566,7 @@ pub fn generate_completions(shell: &str) -> Result<String> {
let mut app = App::new("drk") let mut app = App::new("drk")
.about(cli_desc!()) .about(cli_desc!())
.args(&vec![config, network, fun, log, verbose]) .args(&[config, network, fun, log, verbose])
.subcommands(command); .subcommands(command);
let shell = match Shell::from_str(shell) { let shell = match Shell::from_str(shell) {

View File

@@ -316,7 +316,7 @@ pub fn untar_source(tar_bytes: &[u8]) -> Result<Vec<ContractSourceFile>> {
/// the `ExplorerService` when handling contract-related operations. /// the `ExplorerService` when handling contract-related operations.
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use std::{fs::File, io::Read, path::Path, sync::Arc}; use std::{fs::File, io::Read, path::Path, slice, sync::Arc};
use darkfi::{ use darkfi::{
util::logger::{setup_test_logger, Level}, util::logger::{setup_test_logger, Level},
@@ -347,7 +347,7 @@ mod tests {
); );
// Add the metadata // Add the metadata
service.add_contract_metadata(&[contract_id], &[expected_metadata.clone()])?; service.add_contract_metadata(&[contract_id], slice::from_ref(&expected_metadata))?;
// Get the metadata that was loaded as actual results // Get the metadata that was loaded as actual results
let actual_metadata = service.get_contract_metadata(&contract_id)?; let actual_metadata = service.get_contract_metadata(&contract_id)?;
@@ -436,7 +436,7 @@ mod tests {
); );
// Load contract metadata used for test // Load contract metadata used for test
service.add_contract_metadata(&[contract_id], &[expected_metadata.clone()])?; service.add_contract_metadata(&[contract_id], slice::from_ref(&expected_metadata))?;
// Transform Contract ID to a `ContractRecord` // Transform Contract ID to a `ContractRecord`
let contract_record = service.to_contract_record(&contract_id)?; let contract_record = service.to_contract_record(&contract_id)?;

View File

@@ -298,7 +298,7 @@ impl ContractMetadataStoreOverlay {
/// Acquires a lock on the database, opening a specified tree for write operations, returning a /// Acquires a lock on the database, opening a specified tree for write operations, returning a
/// [`MutexGuard<SledDbOverlay>`] representing the locked state. /// [`MutexGuard<SledDbOverlay>`] representing the locked state.
pub fn lock(&self, tree_name: &[u8]) -> Result<MutexGuard<SledDbOverlay>> { pub fn lock(&self, tree_name: &[u8]) -> Result<MutexGuard<'_, SledDbOverlay>> {
// Lock the database, open tree, and return lock // Lock the database, open tree, and return lock
let mut lock = self.overlay.lock().unwrap(); let mut lock = self.overlay.lock().unwrap();
lock.open_tree(tree_name, true)?; lock.open_tree(tree_name, true)?;
@@ -309,6 +309,8 @@ impl ContractMetadataStoreOverlay {
#[cfg(test)] #[cfg(test)]
/// This test module verifies the correct insertion and retrieval of contract metadata and source code. /// This test module verifies the correct insertion and retrieval of contract metadata and source code.
mod tests { mod tests {
use std::slice;
use darkfi::util::logger::{setup_test_logger, Level}; use darkfi::util::logger::{setup_test_logger, Level};
use darkfi_sdk::crypto::MONEY_CONTRACT_ID; use darkfi_sdk::crypto::MONEY_CONTRACT_ID;
use sled_overlay::sled::Config; use sled_overlay::sled::Config;
@@ -395,7 +397,7 @@ mod tests {
); );
// Add metadata for the source code to the test // Add metadata for the source code to the test
store.insert_metadata(&[contract_id], &[expected_metadata.clone()])?; store.insert_metadata(&[contract_id], slice::from_ref(&expected_metadata))?;
// Get the metadata content from the store // Get the metadata content from the store
let actual_metadata = store.get(&contract_id)?; let actual_metadata = store.get(&contract_id)?;

View File

@@ -17,7 +17,7 @@
*/ */
use std::{ use std::{
fmt, fmt, slice,
sync::{Arc, Mutex, MutexGuard}, sync::{Arc, Mutex, MutexGuard},
}; };
@@ -474,7 +474,7 @@ impl MetricsStoreOverlay {
metrics.timestamp = GasMetricsKey::normalize_timestamp(block_timestamp)?; metrics.timestamp = GasMetricsKey::normalize_timestamp(block_timestamp)?;
// Insert the gas metrics using metrics key // Insert the gas metrics using metrics key
self.insert(&[metrics_key.clone()], &[metrics], &mut lock)?; self.insert(slice::from_ref(&metrics_key), &[metrics], &mut lock)?;
// Insert the transaction gas data for each transaction in the block // Insert the transaction gas data for each transaction in the block
self.insert_tx_gas_data(tx_hashes, tx_gas_data, &mut lock)?; self.insert_tx_gas_data(tx_hashes, tx_gas_data, &mut lock)?;
@@ -1270,7 +1270,7 @@ mod tests {
// Simulate genesis block, metrics are stored after height 0 // Simulate genesis block, metrics are stored after height 0
if height > 0 { if height > 0 {
let tx_gas_data = random_gas_data(height as u64 + start_time); let tx_gas_data = random_gas_data(height as u64 + start_time);
accumulated_metrics.add(&[tx_gas_data.clone()]); accumulated_metrics.add(slice::from_ref(&tx_gas_data));
metrics_store.insert_gas_metrics( metrics_store.insert_gas_metrics(
height, height,
&block_timestamp, &block_timestamp,
@@ -1311,14 +1311,14 @@ mod tests {
// Generate random gas data for the given height // Generate random gas data for the given height
let gas_data = random_gas_data(height as u64); let gas_data = random_gas_data(height as u64);
accumulated_metrics.add(&[gas_data.clone()]); accumulated_metrics.add(slice::from_ref(&gas_data));
// Insert the gas metrics into the metrics store // Insert the gas metrics into the metrics store
metrics_store.insert_gas_metrics( metrics_store.insert_gas_metrics(
height, height,
&block_timestamp, &block_timestamp,
&[*TX_HASH], &[*TX_HASH],
&[gas_data.clone()], slice::from_ref(&gas_data),
)?; )?;
metrics_vec.push((accumulated_metrics, gas_data)); metrics_vec.push((accumulated_metrics, gas_data));

View File

@@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
use std::collections::HashSet; use std::{collections::HashSet, slice};
use async_trait::async_trait; use async_trait::async_trait;
use smol::lock::{Mutex, MutexGuard}; use smol::lock::{Mutex, MutexGuard};
@@ -208,7 +208,7 @@ impl JsonRpcInterface {
// Build a DAG event and return it. // Build a DAG event and return it.
let event = Event::new(serialize_async(&genevent).await, &self.event_graph).await; let event = Event::new(serialize_async(&genevent).await, &self.event_graph).await;
if let Err(e) = self.event_graph.dag_insert(&[event.clone()]).await { if let Err(e) = self.event_graph.dag_insert(slice::from_ref(&event)).await {
error!("Failed inserting new event to DAG: {e}"); error!("Failed inserting new event to DAG: {e}");
} else { } else {
// Otherwise, broadcast it // Otherwise, broadcast it

View File

@@ -22,6 +22,7 @@ use std::{
ffi::CString, ffi::CString,
fs::{create_dir_all, remove_dir_all}, fs::{create_dir_all, remove_dir_all},
io::{stdin, Write}, io::{stdin, Write},
slice,
str::FromStr, str::FromStr,
sync::{Arc, OnceLock}, sync::{Arc, OnceLock},
}; };
@@ -321,7 +322,7 @@ async fn start_sync_loop(
// If it fails for some reason, for now, we just note it // If it fails for some reason, for now, we just note it
// and pass. // and pass.
if let Err(e) = event_graph.dag_insert(&[event.clone()]).await { if let Err(e) = event_graph.dag_insert(slice::from_ref(&event)).await {
error!(target: "taud", "Failed inserting new event to DAG: {e}"); error!(target: "taud", "Failed inserting new event to DAG: {e}");
} else { } else {
// Otherwise, broadcast it // Otherwise, broadcast it

View File

@@ -1,2 +1,2 @@
[toolchain] [toolchain]
channel = "1.88" channel = "stable"

View File

@@ -16,7 +16,10 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
use std::sync::{Arc, Mutex}; use std::{
slice,
sync::{Arc, Mutex},
};
use darkfi_sdk::{ use darkfi_sdk::{
monotree::{self, Monotree}, monotree::{self, Monotree},
@@ -93,7 +96,7 @@ impl Blockchain {
let mut batches = vec![]; let mut batches = vec![];
// Store header // Store header
let (headers_batch, _) = self.headers.insert_batch(&[block.header.clone()]); let (headers_batch, _) = self.headers.insert_batch(slice::from_ref(&block.header));
trees.push(self.headers.main.clone()); trees.push(self.headers.main.clone());
batches.push(headers_batch); batches.push(headers_batch);
@@ -582,7 +585,7 @@ impl BlockchainOverlay {
/// the writes atomically. /// the writes atomically.
pub fn add_block(&self, block: &BlockInfo) -> Result<HeaderHash> { pub fn add_block(&self, block: &BlockInfo) -> Result<HeaderHash> {
// Store header // Store header
self.headers.insert(&[block.header.clone()])?; self.headers.insert(slice::from_ref(&block.header))?;
// Store block // Store block
let blk: Block = Block::from_block_info(block); let blk: Block = Block::from_block_info(block);

View File

@@ -19,6 +19,7 @@
use std::{ use std::{
collections::HashMap, collections::HashMap,
io::{Cursor, Write}, io::{Cursor, Write},
slice,
}; };
use darkfi::{ use darkfi::{
@@ -215,7 +216,7 @@ impl Wallet {
self.validator self.validator
.add_test_transactions( .add_test_transactions(
&[tx.clone()], slice::from_ref(&tx),
block_height, block_height,
self.validator.consensus.module.read().await.target, self.validator.consensus.module.read().await.target,
true, true,
@@ -227,7 +228,7 @@ impl Wallet {
{ {
let blockchain = &self.validator.blockchain; let blockchain = &self.validator.blockchain;
let txs = &blockchain.transactions; let txs = &blockchain.transactions;
txs.insert(&[tx.clone()]).expect("insert tx"); txs.insert(slice::from_ref(&tx)).expect("insert tx");
txs.insert_location(&[tx.hash()], block_height).expect("insert loc"); txs.insert_location(&[tx.hash()], block_height).expect("insert loc");
} }

View File

@@ -16,6 +16,8 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
use std::slice;
use darkfi::{ use darkfi::{
tx::{ContractCallLeaf, Transaction, TransactionBuilder}, tx::{ContractCallLeaf, Transaction, TransactionBuilder},
zk::halo2::Field, zk::halo2::Field,
@@ -147,7 +149,7 @@ impl TestHarness {
tx.signatures[0].insert(0, sigs[0]); tx.signatures[0].insert(0, sigs[0]);
let (fee_call, fee_proofs, fee_secrets, _spent_fee_coins, fee_call_params) = let (fee_call, fee_proofs, fee_secrets, _spent_fee_coins, fee_call_params) =
self.append_fee_call(holder0, tx, block_height, &[owncoin0.clone()]).await?; self.append_fee_call(holder0, tx, block_height, slice::from_ref(owncoin0)).await?;
// Append the fee call to the transaction // Append the fee call to the transaction
tx_builder.append(ContractCallLeaf { call: fee_call, proofs: fee_proofs }, vec![])?; tx_builder.append(ContractCallLeaf { call: fee_call, proofs: fee_proofs }, vec![])?;

View File

@@ -18,6 +18,7 @@
use std::{ use std::{
collections::{BTreeMap, HashSet, VecDeque}, collections::{BTreeMap, HashSet, VecDeque},
slice,
sync::{ sync::{
atomic::{AtomicUsize, Ordering::SeqCst}, atomic::{AtomicUsize, Ordering::SeqCst},
Arc, Arc,
@@ -429,7 +430,7 @@ impl ProtocolEventGraph {
target: "event_graph::protocol::handle_event_put()", target: "event_graph::protocol::handle_event_put()",
"Got all parents necessary for insertion", "Got all parents necessary for insertion",
); );
if self.event_graph.dag_insert(&[event.clone()]).await.is_err() { if self.event_graph.dag_insert(slice::from_ref(&event)).await.is_err() {
self.clone().increase_malicious_count().await?; self.clone().increase_malicious_count().await?;
continue continue
} }

View File

@@ -18,7 +18,7 @@
// cargo test --release --features=event-graph --lib eventgraph_propagation -- --include-ignored // cargo test --release --features=event-graph --lib eventgraph_propagation -- --include-ignored
use std::sync::Arc; use std::{slice, sync::Arc};
use rand::{prelude::SliceRandom, rngs::ThreadRng}; use rand::{prelude::SliceRandom, rngs::ThreadRng};
use sled_overlay::sled; use sled_overlay::sled;
@@ -223,7 +223,7 @@ async fn eventgraph_propagation_real(ex: Arc<Executor<'static>>) {
let event = Event::new(vec![1, 2, 3, 4], random_node).await; let event = Event::new(vec![1, 2, 3, 4], random_node).await;
assert!(event.parents.contains(&genesis_event_id)); assert!(event.parents.contains(&genesis_event_id));
// The node adds it to their DAG, on layer 1. // The node adds it to their DAG, on layer 1.
let event_id = random_node.dag_insert(&[event.clone()]).await.unwrap()[0]; let event_id = random_node.dag_insert(slice::from_ref(&event)).await.unwrap()[0];
let tips_layers = random_node.unreferenced_tips.read().await; let tips_layers = random_node.unreferenced_tips.read().await;
// Since genesis was referenced, its layer (0) have been removed // Since genesis was referenced, its layer (0) have been removed
assert_eq!(tips_layers.len(), 1); assert_eq!(tips_layers.len(), 1);
@@ -246,11 +246,11 @@ async fn eventgraph_propagation_real(ex: Arc<Executor<'static>>) {
// ============================================================== // ==============================================================
let random_node = eg_instances.choose(&mut rng).unwrap(); let random_node = eg_instances.choose(&mut rng).unwrap();
let event0 = Event::new(vec![1, 2, 3, 4, 0], random_node).await; let event0 = Event::new(vec![1, 2, 3, 4, 0], random_node).await;
let event0_id = random_node.dag_insert(&[event0.clone()]).await.unwrap()[0]; let event0_id = random_node.dag_insert(slice::from_ref(&event0)).await.unwrap()[0];
let event1 = Event::new(vec![1, 2, 3, 4, 1], random_node).await; let event1 = Event::new(vec![1, 2, 3, 4, 1], random_node).await;
let event1_id = random_node.dag_insert(&[event1.clone()]).await.unwrap()[0]; let event1_id = random_node.dag_insert(slice::from_ref(&event1)).await.unwrap()[0];
let event2 = Event::new(vec![1, 2, 3, 4, 2], random_node).await; let event2 = Event::new(vec![1, 2, 3, 4, 2], random_node).await;
let event2_id = random_node.dag_insert(&[event2.clone()]).await.unwrap()[0]; let event2_id = random_node.dag_insert(slice::from_ref(&event2)).await.unwrap()[0];
// Genesis event + event from 2. + upper 3 events (layer 4) // Genesis event + event from 2. + upper 3 events (layer 4)
assert_eq!(random_node.dag.len(), 5); assert_eq!(random_node.dag.len(), 5);
let tips_layers = random_node.unreferenced_tips.read().await; let tips_layers = random_node.unreferenced_tips.read().await;
@@ -279,15 +279,15 @@ async fn eventgraph_propagation_real(ex: Arc<Executor<'static>>) {
// ======= // =======
let node1 = eg_instances.choose(&mut rng).unwrap(); let node1 = eg_instances.choose(&mut rng).unwrap();
let event0_1 = Event::new(vec![1, 2, 3, 4, 3], node1).await; let event0_1 = Event::new(vec![1, 2, 3, 4, 3], node1).await;
node1.dag_insert(&[event0_1.clone()]).await.unwrap(); node1.dag_insert(slice::from_ref(&event0_1)).await.unwrap();
node1.p2p.broadcast(&EventPut(event0_1)).await; node1.p2p.broadcast(&EventPut(event0_1)).await;
let event1_1 = Event::new(vec![1, 2, 3, 4, 4], node1).await; let event1_1 = Event::new(vec![1, 2, 3, 4, 4], node1).await;
node1.dag_insert(&[event1_1.clone()]).await.unwrap(); node1.dag_insert(slice::from_ref(&event1_1)).await.unwrap();
node1.p2p.broadcast(&EventPut(event1_1)).await; node1.p2p.broadcast(&EventPut(event1_1)).await;
let event2_1 = Event::new(vec![1, 2, 3, 4, 5], node1).await; let event2_1 = Event::new(vec![1, 2, 3, 4, 5], node1).await;
node1.dag_insert(&[event2_1.clone()]).await.unwrap(); node1.dag_insert(slice::from_ref(&event2_1)).await.unwrap();
node1.p2p.broadcast(&EventPut(event2_1)).await; node1.p2p.broadcast(&EventPut(event2_1)).await;
// ======= // =======
@@ -295,15 +295,15 @@ async fn eventgraph_propagation_real(ex: Arc<Executor<'static>>) {
// ======= // =======
let node2 = eg_instances.choose(&mut rng).unwrap(); let node2 = eg_instances.choose(&mut rng).unwrap();
let event0_2 = Event::new(vec![1, 2, 3, 4, 6], node2).await; let event0_2 = Event::new(vec![1, 2, 3, 4, 6], node2).await;
node2.dag_insert(&[event0_2.clone()]).await.unwrap(); node2.dag_insert(slice::from_ref(&event0_2)).await.unwrap();
node2.p2p.broadcast(&EventPut(event0_2)).await; node2.p2p.broadcast(&EventPut(event0_2)).await;
let event1_2 = Event::new(vec![1, 2, 3, 4, 7], node2).await; let event1_2 = Event::new(vec![1, 2, 3, 4, 7], node2).await;
node2.dag_insert(&[event1_2.clone()]).await.unwrap(); node2.dag_insert(slice::from_ref(&event1_2)).await.unwrap();
node2.p2p.broadcast(&EventPut(event1_2)).await; node2.p2p.broadcast(&EventPut(event1_2)).await;
let event2_2 = Event::new(vec![1, 2, 3, 4, 8], node2).await; let event2_2 = Event::new(vec![1, 2, 3, 4, 8], node2).await;
node2.dag_insert(&[event2_2.clone()]).await.unwrap(); node2.dag_insert(slice::from_ref(&event2_2)).await.unwrap();
node2.p2p.broadcast(&EventPut(event2_2)).await; node2.p2p.broadcast(&EventPut(event2_2)).await;
// ======= // =======
@@ -311,15 +311,15 @@ async fn eventgraph_propagation_real(ex: Arc<Executor<'static>>) {
// ======= // =======
let node3 = eg_instances.choose(&mut rng).unwrap(); let node3 = eg_instances.choose(&mut rng).unwrap();
let event0_3 = Event::new(vec![1, 2, 3, 4, 9], node3).await; let event0_3 = Event::new(vec![1, 2, 3, 4, 9], node3).await;
node3.dag_insert(&[event0_3.clone()]).await.unwrap(); node3.dag_insert(slice::from_ref(&event0_3)).await.unwrap();
node2.p2p.broadcast(&EventPut(event0_3)).await; node2.p2p.broadcast(&EventPut(event0_3)).await;
let event1_3 = Event::new(vec![1, 2, 3, 4, 10], node3).await; let event1_3 = Event::new(vec![1, 2, 3, 4, 10], node3).await;
node3.dag_insert(&[event1_3.clone()]).await.unwrap(); node3.dag_insert(slice::from_ref(&event1_3)).await.unwrap();
node2.p2p.broadcast(&EventPut(event1_3)).await; node2.p2p.broadcast(&EventPut(event1_3)).await;
let event2_3 = Event::new(vec![1, 2, 3, 4, 11], node3).await; let event2_3 = Event::new(vec![1, 2, 3, 4, 11], node3).await;
node3.dag_insert(&[event2_3.clone()]).await.unwrap(); node3.dag_insert(slice::from_ref(&event2_3)).await.unwrap();
node3.p2p.broadcast(&EventPut(event2_3)).await; node3.p2p.broadcast(&EventPut(event2_3)).await;
info!("Waiting 5s for events propagation"); info!("Waiting 5s for events propagation");
@@ -398,7 +398,7 @@ async fn eventgraph_chaotic_propagation_real(ex: Arc<Executor<'static>>) {
for i in 0..n_events { for i in 0..n_events {
let random_node = eg_instances.choose(&mut rng).unwrap(); let random_node = eg_instances.choose(&mut rng).unwrap();
let event = Event::new(i.to_be_bytes().to_vec(), random_node).await; let event = Event::new(i.to_be_bytes().to_vec(), random_node).await;
random_node.dag_insert(&[event.clone()]).await.unwrap(); random_node.dag_insert(slice::from_ref(&event)).await.unwrap();
random_node.p2p.broadcast(&EventPut(event)).await; random_node.p2p.broadcast(&EventPut(event)).await;
} }
info!("Waiting 5s for events propagation"); info!("Waiting 5s for events propagation");

View File

@@ -139,7 +139,7 @@ impl<const N: usize> FunctionParams for crypto::note::ElGamalEncryptedNote<N> {
} }
/// Wrapper function for creating this Python module. /// Wrapper function for creating this Python module.
pub(crate) fn create_module(py: Python<'_>) -> PyResult<Bound<PyModule>> { pub(crate) fn create_module(py: Python<'_>) -> PyResult<Bound<'_, PyModule>> {
let submod = PyModule::new(py, "crypto")?; let submod = PyModule::new(py, "crypto")?;
submod.add_function(wrap_pyfunction!(poseidon_hash, &submod)?)?; submod.add_function(wrap_pyfunction!(poseidon_hash, &submod)?)?;
submod.add_function(wrap_pyfunction!(pedersen_commitment_u64, &submod)?)?; submod.add_function(wrap_pyfunction!(pedersen_commitment_u64, &submod)?)?;

View File

@@ -57,7 +57,7 @@ impl MerkleTree {
} }
/// Wrapper function for creating this Python module. /// Wrapper function for creating this Python module.
pub(crate) fn create_module(py: pyo3::Python<'_>) -> PyResult<Bound<PyModule>> { pub(crate) fn create_module(py: pyo3::Python<'_>) -> PyResult<Bound<'_, PyModule>> {
let submod = PyModule::new(py, "merkle")?; let submod = PyModule::new(py, "merkle")?;
submod.add_class::<MerkleTree>()?; submod.add_class::<MerkleTree>()?;
Ok(submod) Ok(submod)

View File

@@ -294,7 +294,7 @@ pub fn fp_mod_fv(x: &Bound<Fp>) -> Fq {
Fq(util::fp_mod_fv(x.borrow().deref().0)) Fq(util::fp_mod_fv(x.borrow().deref().0))
} }
pub fn create_module(py: pyo3::Python<'_>) -> PyResult<Bound<PyModule>> { pub fn create_module(py: pyo3::Python<'_>) -> PyResult<Bound<'_, PyModule>> {
let submod = PyModule::new(py, "pasta")?; let submod = PyModule::new(py, "pasta")?;
submod.add_class::<Fp>()?; submod.add_class::<Fp>()?;

View File

@@ -168,7 +168,7 @@ impl TransactionHash {
} }
} }
pub fn create_module(py: Python<'_>) -> PyResult<Bound<PyModule>> { pub fn create_module(py: Python<'_>) -> PyResult<Bound<'_, PyModule>> {
let submod = PyModule::new(py, "tx")?; let submod = PyModule::new(py, "tx")?;
submod.add_class::<Transaction>()?; submod.add_class::<Transaction>()?;

View File

@@ -354,7 +354,7 @@ impl MockProver {
} }
} }
pub fn create_module(py: Python<'_>) -> PyResult<Bound<PyModule>> { pub fn create_module(py: Python<'_>) -> PyResult<Bound<'_, PyModule>> {
let submod = PyModule::new(py, "zkas")?; let submod = PyModule::new(py, "zkas")?;
submod.add_class::<ZkBinary>()?; submod.add_class::<ZkBinary>()?;

View File

@@ -29,7 +29,7 @@ pub fn hex_from_iter<I: Iterator<Item = u8>>(iter: I) -> String {
} }
/// Decode hex string into bytes /// Decode hex string into bytes
pub fn decode_hex(hex: &str) -> HexDecodeIter { pub fn decode_hex<'a>(hex: &'a str) -> HexDecodeIter<'a> {
HexDecodeIter { hex, curr: 0 } HexDecodeIter { hex, curr: 0 }
} }

View File

@@ -70,7 +70,7 @@ impl CondVar {
} }
/// Reset the condition variable and wait for a notification /// Reset the condition variable and wait for a notification
pub fn wait(&self) -> CondVarWait { pub fn wait(&self) -> CondVarWait<'_> {
CondVarWait { state: &self.state } CondVarWait { state: &self.state }
} }

View File

@@ -47,7 +47,7 @@ pub fn encode(padding: bool, data: &[u8]) -> String {
ret.push(ENCODE_STD[(buf[4] & 0x1f) as usize]); ret.push(ENCODE_STD[(buf[4] & 0x1f) as usize]);
} }
if data.len() % 5 != 0 { if !data.len().is_multiple_of(5) {
let len = ret.len(); let len = ret.len();
let num_extra = 8 - (data.len() % 5 * 8).div_ceil(5); let num_extra = 8 - (data.len() % 5 * 8).div_ceil(5);
if padding { if padding {

View File

@@ -267,9 +267,9 @@ impl DateTime {
/// for the given month and year, accounting for leap years. It returns `true` if the day /// for the given month and year, accounting for leap years. It returns `true` if the day
/// is valid. /// is valid.
fn is_valid_day(year: u32, month: u32, day: u32) -> bool { fn is_valid_day(year: u32, month: u32, day: u32) -> bool {
let days_in_month = DAYS_IN_MONTHS let days_in_month = DAYS_IN_MONTHS[(year.is_multiple_of(4) &&
[(year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)) as usize] (!year.is_multiple_of(100) || year.is_multiple_of(400)))
[(month - 1) as usize]; as usize][(month - 1) as usize];
day > 0 && day <= days_in_month as u32 day > 0 && day <= days_in_month as u32
} }
} }

View File

@@ -377,7 +377,7 @@ impl PoWModule {
} }
// Check if need to set the new key // Check if need to set the new key
if header.height % RANDOMX_KEY_CHANGING_HEIGHT == 0 { if header.height.is_multiple_of(RANDOMX_KEY_CHANGING_HEIGHT) {
let next_key = header.hash(); let next_key = header.hash();
let flags = RandomXFlags::get_recommended_flags(); let flags = RandomXFlags::get_recommended_flags();
let cache = RandomXCache::new(flags, &next_key.inner()[..])?; let cache = RandomXCache::new(flags, &next_key.inner()[..])?;

View File

@@ -194,7 +194,7 @@ pub fn median(mut v: Vec<u64>) -> u64 {
let n = v.len() / 2; let n = v.len() / 2;
v.sort_unstable(); v.sort_unstable();
if v.len() % 2 == 0 { if v.len().is_multiple_of(2) {
v[n] v[n]
} else { } else {
get_mid(v[n - 1], v[n]) get_mid(v[n - 1], v[n])

View File

@@ -516,7 +516,7 @@ impl Parser {
self.error.warn(&format!("{section} section is empty."), 0, 0); self.error.warn(&format!("{section} section is empty."), 0, 0);
} }
if tokens[2..tokens.len() - 1].len() % 3 != 0 { if !tokens[2..tokens.len() - 1].len().is_multiple_of(3) {
return Err(self.error.abort( return Err(self.error.abort(
&format!("Invalid number of elements in '{section}' section. Must be pairs of '<Type> <name>' separated with a comma ','."), &format!("Invalid number of elements in '{section}' section. Must be pairs of '<Type> <name>' separated with a comma ','."),
tokens[0].line, tokens[0].line,