From 5631685d302439f7f8be149c5e7e41500f95a5c6 Mon Sep 17 00:00:00 2001 From: kirill lykov Date: Tue, 7 Mar 2023 05:32:42 -0800 Subject: [PATCH] replaced chunks with tuples in validator (#30499) * replaced chunks with tuples in test validator * update Cargo.lock * replaced chunks with tuples in genesis * Update Cargo.lock --- Cargo.lock | 2 + genesis/Cargo.toml | 1 + genesis/src/main.rs | 138 ++++++++++----------- programs/sbf/Cargo.lock | 1 + validator/Cargo.toml | 1 + validator/src/bin/solana-test-validator.rs | 105 +++++++--------- 6 files changed, 114 insertions(+), 134 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index dbc2f909de..ad27e1e33b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5551,6 +5551,7 @@ dependencies = [ "base64 0.13.0", "bincode", "clap 2.33.3", + "itertools", "serde", "serde_json", "serde_yaml 0.9.13", @@ -6957,6 +6958,7 @@ dependencies = [ "crossbeam-channel", "fd-lock", "indicatif", + "itertools", "jsonrpc-core", "jsonrpc-core-client", "jsonrpc-derive", diff --git a/genesis/Cargo.toml b/genesis/Cargo.toml index 1c5aaee9a4..a63ea89c1c 100644 --- a/genesis/Cargo.toml +++ b/genesis/Cargo.toml @@ -13,6 +13,7 @@ edition = { workspace = true } base64 = { workspace = true } bincode = { workspace = true } clap = { workspace = true } +itertools = { workspace = true } serde = { workspace = true } serde_json = { workspace = true } serde_yaml = { workspace = true } diff --git a/genesis/src/main.rs b/genesis/src/main.rs index 6a7d6355d9..043fd0e291 100644 --- a/genesis/src/main.rs +++ b/genesis/src/main.rs @@ -3,6 +3,7 @@ use { clap::{crate_description, crate_name, value_t, value_t_or_exit, App, Arg, ArgMatches}, + itertools::Itertools, solana_clap_utils::{ input_parsers::{ cluster_type_of, pubkey_of, pubkeys_of, unix_timestamp_from_rfc3339_datetime, @@ -615,85 +616,76 @@ fn main() -> Result<(), Box> { }; if let Some(values) = matches.values_of("bpf_program") { - let values: Vec<&str> = values.collect::>(); - for address_loader_program in values.chunks(3) { - match address_loader_program { - [address, loader, program] => { - let address = parse_address(address, "address"); - let loader = parse_address(loader, "loader"); - let program_data = parse_program_data(program); - genesis_config.add_account( - address, - AccountSharedData::from(Account { - lamports: genesis_config.rent.minimum_balance(program_data.len()), - data: program_data, - executable: true, - owner: loader, - rent_epoch: 0, - }), - ); - } - _ => unreachable!(), - } + for (address, loader, program) in values.tuples() { + let address = parse_address(address, "address"); + let loader = parse_address(loader, "loader"); + let program_data = parse_program_data(program); + genesis_config.add_account( + address, + AccountSharedData::from(Account { + lamports: genesis_config.rent.minimum_balance(program_data.len()), + data: program_data, + executable: true, + owner: loader, + rent_epoch: 0, + }), + ); } } if let Some(values) = matches.values_of("upgradeable_program") { - let values: Vec<&str> = values.collect::>(); - for address_loader_program_upgrade_authority in values.chunks(4) { - match address_loader_program_upgrade_authority { - [address, loader, program, upgrade_authority] => { - let address = parse_address(address, "address"); - let loader = parse_address(loader, "loader"); - let program_data_elf = parse_program_data(program); - let upgrade_authority_address = if *upgrade_authority == "none" { - Pubkey::default() - } else { - upgrade_authority.parse::().unwrap_or_else(|_| { - read_keypair_file(upgrade_authority).map(|keypair| keypair.pubkey()).unwrap_or_else(|err| { - eprintln!("Error: invalid upgrade_authority {upgrade_authority}: {err}"); - process::exit(1); - }) - }) - }; - - let (programdata_address, _) = - Pubkey::find_program_address(&[address.as_ref()], &loader); - let mut program_data = - bincode::serialize(&UpgradeableLoaderState::ProgramData { - slot: 0, - upgrade_authority_address: Some(upgrade_authority_address), + for (address, loader, program, upgrade_authority) in values.tuples() { + let address = parse_address(address, "address"); + let loader = parse_address(loader, "loader"); + let program_data_elf = parse_program_data(program); + let upgrade_authority_address = if upgrade_authority == "none" { + Pubkey::default() + } else { + upgrade_authority.parse::().unwrap_or_else(|_| { + read_keypair_file(upgrade_authority) + .map(|keypair| keypair.pubkey()) + .unwrap_or_else(|err| { + eprintln!( + "Error: invalid upgrade_authority {upgrade_authority}: {err}" + ); + process::exit(1); }) - .unwrap(); - program_data.extend_from_slice(&program_data_elf); - genesis_config.add_account( - programdata_address, - AccountSharedData::from(Account { - lamports: genesis_config.rent.minimum_balance(program_data.len()), - data: program_data, - owner: loader, - executable: false, - rent_epoch: 0, - }), - ); + }) + }; - let program_data = bincode::serialize(&UpgradeableLoaderState::Program { - programdata_address, - }) - .unwrap(); - genesis_config.add_account( - address, - AccountSharedData::from(Account { - lamports: genesis_config.rent.minimum_balance(program_data.len()), - data: program_data, - owner: loader, - executable: true, - rent_epoch: 0, - }), - ); - } - _ => unreachable!(), - } + let (programdata_address, _) = + Pubkey::find_program_address(&[address.as_ref()], &loader); + let mut program_data = bincode::serialize(&UpgradeableLoaderState::ProgramData { + slot: 0, + upgrade_authority_address: Some(upgrade_authority_address), + }) + .unwrap(); + program_data.extend_from_slice(&program_data_elf); + genesis_config.add_account( + programdata_address, + AccountSharedData::from(Account { + lamports: genesis_config.rent.minimum_balance(program_data.len()), + data: program_data, + owner: loader, + executable: false, + rent_epoch: 0, + }), + ); + + let program_data = bincode::serialize(&UpgradeableLoaderState::Program { + programdata_address, + }) + .unwrap(); + genesis_config.add_account( + address, + AccountSharedData::from(Account { + lamports: genesis_config.rent.minimum_balance(program_data.len()), + data: program_data, + owner: loader, + executable: true, + rent_epoch: 0, + }), + ); } } diff --git a/programs/sbf/Cargo.lock b/programs/sbf/Cargo.lock index 39d8370a59..0eed9d9976 100644 --- a/programs/sbf/Cargo.lock +++ b/programs/sbf/Cargo.lock @@ -6162,6 +6162,7 @@ dependencies = [ "crossbeam-channel", "fd-lock", "indicatif", + "itertools", "jsonrpc-core", "jsonrpc-core-client", "jsonrpc-derive", diff --git a/validator/Cargo.toml b/validator/Cargo.toml index 663bb531b1..2306035b43 100644 --- a/validator/Cargo.toml +++ b/validator/Cargo.toml @@ -18,6 +18,7 @@ core_affinity = { workspace = true } crossbeam-channel = { workspace = true } fd-lock = { workspace = true } indicatif = { workspace = true } +itertools = { workspace = true } jsonrpc-core = { workspace = true } jsonrpc-core-client = { workspace = true, features = ["ipc"] } jsonrpc-derive = { workspace = true } diff --git a/validator/src/bin/solana-test-validator.rs b/validator/src/bin/solana-test-validator.rs index 5f32cb29cc..1ff73a62e9 100644 --- a/validator/src/bin/solana-test-validator.rs +++ b/validator/src/bin/solana-test-validator.rs @@ -1,6 +1,7 @@ use { clap::{crate_name, value_t, value_t_or_exit, values_t_or_exit}, crossbeam_channel::unbounded, + itertools::Itertools, log::*, solana_clap_utils::{ input_parsers::{pubkey_of, pubkeys_of, value_of}, @@ -203,79 +204,61 @@ fn main() { let mut upgradeable_programs_to_load = vec![]; if let Some(values) = matches.values_of("bpf_program") { - let values: Vec<&str> = values.collect::>(); - for address_program in values.chunks(2) { - match address_program { - [address, program] => { - let address = parse_address(address, "address"); - let program_path = parse_program_path(program); + for (address, program) in values.into_iter().tuples() { + let address = parse_address(address, "address"); + let program_path = parse_program_path(program); - upgradeable_programs_to_load.push(UpgradeableProgramInfo { - program_id: address, - loader: solana_sdk::bpf_loader_upgradeable::id(), - upgrade_authority: Pubkey::default(), - program_path, - }); - } - _ => unreachable!(), - } + upgradeable_programs_to_load.push(UpgradeableProgramInfo { + program_id: address, + loader: solana_sdk::bpf_loader_upgradeable::id(), + upgrade_authority: Pubkey::default(), + program_path, + }); } } if let Some(values) = matches.values_of("upgradeable_program") { - let values: Vec<&str> = values.collect::>(); - for address_program_upgrade_authority in values.chunks(3) { - match address_program_upgrade_authority { - [address, program, upgrade_authority] => { - let address = parse_address(address, "address"); - let program_path = parse_program_path(program); - let upgrade_authority_address = if *upgrade_authority == "none" { - Pubkey::default() - } else { - upgrade_authority - .parse::() - .or_else(|_| { - read_keypair_file(upgrade_authority).map(|keypair| keypair.pubkey()) - }) - .unwrap_or_else(|err| { - println!( - "Error: invalid upgrade_authority {upgrade_authority}: {err}" - ); - exit(1); - }) - }; + for (address, program, upgrade_authority) in + values.into_iter().tuples::<(&str, &str, &str)>() + { + let address = parse_address(address, "address"); + let program_path = parse_program_path(program); + let upgrade_authority_address = if upgrade_authority == "none" { + Pubkey::default() + } else { + upgrade_authority + .parse::() + .or_else(|_| { + read_keypair_file(upgrade_authority).map(|keypair| keypair.pubkey()) + }) + .unwrap_or_else(|err| { + println!("Error: invalid upgrade_authority {upgrade_authority}: {err}"); + exit(1); + }) + }; - upgradeable_programs_to_load.push(UpgradeableProgramInfo { - program_id: address, - loader: solana_sdk::bpf_loader_upgradeable::id(), - upgrade_authority: upgrade_authority_address, - program_path, - }); - } - _ => unreachable!(), - } + upgradeable_programs_to_load.push(UpgradeableProgramInfo { + program_id: address, + loader: solana_sdk::bpf_loader_upgradeable::id(), + upgrade_authority: upgrade_authority_address, + program_path, + }); } } let mut accounts_to_load = vec![]; if let Some(values) = matches.values_of("account") { - let values: Vec<&str> = values.collect::>(); - for address_filename in values.chunks(2) { - match address_filename { - [address, filename] => { - let address = if *address == "-" { - None - } else { - Some(address.parse::().unwrap_or_else(|err| { - println!("Error: invalid address {address}: {err}"); - exit(1); - })) - }; + for (address, filename) in values.into_iter().tuples() { + let address = if address == "-" { + None + } else { + Some(address.parse::().unwrap_or_else(|err| { + println!("Error: invalid address {address}: {err}"); + exit(1); + })) + }; - accounts_to_load.push(AccountInfo { address, filename }); - } - _ => unreachable!(), - } + accounts_to_load.push(AccountInfo { address, filename }); } }