From e360e63b74c3a4a5e9b600a7ffe044b5afd5cc28 Mon Sep 17 00:00:00 2001 From: Tyera Eulberg Date: Fri, 2 Aug 2019 08:40:54 -0600 Subject: [PATCH] getProgramAccounts to check for existing validator-info (#5404) --- validator-info/src/validator_info.rs | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/validator-info/src/validator_info.rs b/validator-info/src/validator_info.rs index b29ea0fa1..2c2c8fa90 100644 --- a/validator-info/src/validator_info.rs +++ b/validator-info/src/validator_info.rs @@ -283,10 +283,27 @@ fn main() -> Result<(), Box> { }; let validator_keypair = read_keypair(id_path)?; - // Create validator-info keypair to use if info_pubkey no provided or does not exist + // Check for existing validator-info account + let all_config = rpc_client.get_program_accounts(&solana_config_api::id())?; + let existing_account = all_config + .iter() + .filter(|(_, account)| { + let key_list: ConfigKeys = + deserialize(&account.data).map_err(|_| false).unwrap(); + key_list.keys.contains(&(id(), false)) + }) + .find(|(pubkey, account)| { + let (validator_pubkey, _) = + parse_validator_info(&pubkey, &account.data).unwrap(); + validator_pubkey == validator_keypair.pubkey() + }); + + // Create validator-info keypair to use if info_pubkey not provided or does not exist let info_keypair = Keypair::new(); let mut info_pubkey = if let Some(pubkey) = matches.value_of("info_pubkey") { pubkey.parse::().unwrap() + } else if let Some(validator_info) = existing_account { + validator_info.0 } else { info_keypair.pubkey() };