diff --git a/Cargo.lock b/Cargo.lock index 689301097e..05c84bea9b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4075,6 +4075,7 @@ dependencies = [ "serde", "serde_derive", "solana-clap-utils", + "solana-cli-config", "solana-logger 1.4.9", "solana-metrics", "solana-sdk", @@ -4157,6 +4158,7 @@ dependencies = [ "serde_yaml", "solana-budget-program", "solana-clap-utils", + "solana-cli-config", "solana-exchange-program", "solana-ledger", "solana-logger 1.4.9", diff --git a/faucet/Cargo.toml b/faucet/Cargo.toml index 06ac298f34..f499cc23f4 100644 --- a/faucet/Cargo.toml +++ b/faucet/Cargo.toml @@ -17,6 +17,7 @@ log = "0.4.8" serde = "1.0.112" serde_derive = "1.0.103" solana-clap-utils = { path = "../clap-utils", version = "1.4.9" } +solana-cli-config = { path = "../cli-config", version = "1.4.9" } solana-logger = { path = "../logger", version = "1.4.9" } solana-metrics = { path = "../metrics", version = "1.4.9" } solana-sdk = { path = "../sdk", version = "1.4.9" } diff --git a/faucet/src/bin/faucet.rs b/faucet/src/bin/faucet.rs index 7144704603..7b982e58c4 100644 --- a/faucet/src/bin/faucet.rs +++ b/faucet/src/bin/faucet.rs @@ -13,6 +13,8 @@ use std::{ }; fn main() -> Result<(), Box> { + let default_keypair = solana_cli_config::Config::default().keypair_path; + solana_logger::setup_with_default("solana=info"); solana_metrics::set_panic_hook("faucet"); let matches = App::new(crate_name!()) @@ -25,7 +27,8 @@ fn main() -> Result<(), Box> { .value_name("PATH") .takes_value(true) .required(true) - .help("File from which to read the mint's keypair"), + .default_value(&default_keypair) + .help("File from which to read the faucet's keypair"), ) .arg( Arg::with_name("slice") @@ -51,7 +54,7 @@ fn main() -> Result<(), Box> { ) .get_matches(); - let mint_keypair = read_keypair_file(matches.value_of("keypair").unwrap()) + let faucet_keypair = read_keypair_file(matches.value_of("keypair").unwrap()) .expect("failed to read client keypair"); let time_slice = value_of(&matches, "slice"); @@ -61,7 +64,7 @@ fn main() -> Result<(), Box> { let faucet_addr = socketaddr!(0, FAUCET_PORT); let faucet = Arc::new(Mutex::new(Faucet::new( - mint_keypair, + faucet_keypair, time_slice, per_time_cap, per_request_cap, diff --git a/faucet/src/faucet.rs b/faucet/src/faucet.rs index 0094fb3cb0..6a60024ed0 100644 --- a/faucet/src/faucet.rs +++ b/faucet/src/faucet.rs @@ -59,7 +59,7 @@ pub enum FaucetRequest { } pub struct Faucet { - mint_keypair: Keypair, + faucet_keypair: Keypair, ip_cache: Vec, pub time_slice: Duration, per_time_cap: u64, @@ -69,7 +69,7 @@ pub struct Faucet { impl Faucet { pub fn new( - mint_keypair: Keypair, + faucet_keypair: Keypair, time_input: Option, per_time_cap: Option, per_request_cap: Option, @@ -77,7 +77,7 @@ impl Faucet { let time_slice = Duration::new(time_input.unwrap_or(TIME_SLICE), 0); let per_time_cap = per_time_cap.unwrap_or(REQUEST_CAP); Faucet { - mint_keypair, + faucet_keypair, ip_cache: Vec::new(), time_slice, per_time_cap, @@ -133,11 +133,15 @@ impl Faucet { ); info!("Requesting airdrop of {} to {:?}", lamports, to); - let mint_pubkey = self.mint_keypair.pubkey(); + let mint_pubkey = self.faucet_keypair.pubkey(); let create_instruction = system_instruction::transfer(&mint_pubkey, &to, lamports); let message = Message::new(&[create_instruction], Some(&mint_pubkey)); - Ok(Transaction::new(&[&self.mint_keypair], message, blockhash)) + Ok(Transaction::new( + &[&self.faucet_keypair], + message, + blockhash, + )) } else { Err(Error::new( ErrorKind::Other, @@ -254,14 +258,14 @@ pub fn request_airdrop_transaction( // For integration tests. Listens on random open port and reports port to Sender. pub fn run_local_faucet( - mint_keypair: Keypair, + faucet_keypair: Keypair, sender: Sender, per_time_cap: Option, ) { thread::spawn(move || { let faucet_addr = socketaddr!(0, 0); let faucet = Arc::new(Mutex::new(Faucet::new( - mint_keypair, + faucet_keypair, None, per_time_cap, None, @@ -280,6 +284,11 @@ pub fn run_faucet( send_addr.send(socket.local_addr().unwrap()).unwrap(); } info!("Faucet started. Listening on: {}", faucet_addr); + info!( + "Faucet account address: {}", + faucet.lock().unwrap().faucet_keypair.pubkey() + ); + let done = socket .incoming() .map_err(|e| debug!("failed to accept socket; error = {:?}", e)) diff --git a/genesis/Cargo.toml b/genesis/Cargo.toml index 9b4a6dee27..3e22f21b50 100644 --- a/genesis/Cargo.toml +++ b/genesis/Cargo.toml @@ -17,6 +17,7 @@ serde_json = "1.0.56" serde_yaml = "0.8.13" solana-budget-program = { path = "../programs/budget", version = "1.4.9" } solana-clap-utils = { path = "../clap-utils", version = "1.4.9" } +solana-cli-config = { path = "../cli-config", version = "1.4.9" } solana-exchange-program = { path = "../programs/exchange", version = "1.4.9" } solana-ledger = { path = "../ledger", version = "1.4.9" } solana-logger = { path = "../logger", version = "1.4.9" } diff --git a/genesis/src/main.rs b/genesis/src/main.rs index b1cc646ec9..cc38d8f59e 100644 --- a/genesis/src/main.rs +++ b/genesis/src/main.rs @@ -99,6 +99,7 @@ pub fn load_genesis_accounts(file: &str, genesis_config: &mut GenesisConfig) -> #[allow(clippy::cognitive_complexity)] fn main() -> Result<(), Box> { + let default_faucet_pubkey = solana_cli_config::Config::default().keypair_path; let fee_rate_governor = FeeRateGovernor::default(); let ( default_target_lamports_per_signature, @@ -178,7 +179,6 @@ fn main() -> Result<(), Box> { .long("faucet-lamports") .value_name("LAMPORTS") .takes_value(true) - .requires("faucet_pubkey") .help("Number of lamports to assign to the faucet"), ) .arg( @@ -189,6 +189,7 @@ fn main() -> Result<(), Box> { .takes_value(true) .validator(is_pubkey_or_keypair) .requires("faucet_lamports") + .default_value(&default_faucet_pubkey) .help("Path to file containing the faucet's pubkey"), ) .arg( @@ -364,7 +365,6 @@ fn main() -> Result<(), Box> { ) .get_matches(); - let faucet_lamports = value_t!(matches, "faucet_lamports", u64).unwrap_or(0); let ledger_path = PathBuf::from(matches.value_of("ledger_path").unwrap()); let rent = Rent { @@ -414,6 +414,7 @@ fn main() -> Result<(), Box> { let bootstrap_stake_authorized_pubkey = pubkey_of(&matches, "bootstrap_stake_authorized_pubkey"); + let faucet_lamports = value_t!(matches, "faucet_lamports", u64).unwrap_or(0); let faucet_pubkey = pubkey_of(&matches, "faucet_pubkey"); let ticks_per_slot = value_t_or_exit!(matches, "ticks_per_slot", u64); diff --git a/run.sh b/run.sh index 4938280b33..f2ffeaf4d8 100755 --- a/run.sh +++ b/run.sh @@ -37,6 +37,10 @@ ledgerDir=$PWD/config/ledger SOLANA_RUN_SH_CLUSTER_TYPE=${SOLANA_RUN_SH_CLUSTER_TYPE:-development} set -x +if ! solana address; then + echo Generating default keypair + solana-keygen new --no-passphrase +fi validator_identity="$dataDir/validator-identity.json" if [[ -e $validator_identity ]]; then echo "Use existing validator keypair" @@ -55,12 +59,6 @@ if [[ -e $validator_stake_account ]]; then else solana-keygen new --no-passphrase -so "$validator_stake_account" fi -faucet="$dataDir"/faucet.json -if [[ -e $faucet ]]; then - echo "Use existing faucet keypair" -else - solana-keygen new --no-passphrase -fso "$faucet" -fi if [[ -e "$ledgerDir"/genesis.bin || -e "$ledgerDir"/genesis.tar.bz2 ]]; then echo "Use existing genesis" @@ -73,7 +71,6 @@ else # shellcheck disable=SC2086 solana-genesis \ --hashes-per-tick sleep \ - --faucet-pubkey "$dataDir"/faucet.json \ --faucet-lamports 500000000000000000 \ --bootstrap-validator \ "$dataDir"/validator-identity.json \ @@ -92,7 +89,7 @@ abort() { } trap abort INT TERM EXIT -solana-faucet --keypair "$dataDir"/faucet.json & +solana-faucet & faucet=$! args=(