CLI: Put deploy ephemeral keypair behind a flag
				
					
				
			This commit is contained in:
		
				
					committed by
					
						
						mergify[bot]
					
				
			
			
				
	
			
			
			
						parent
						
							359707c85e
						
					
				
				
					commit
					5a5b7f39c1
				
			@@ -177,6 +177,7 @@ pub enum CliCommand {
 | 
			
		||||
        program_location: String,
 | 
			
		||||
        address: Option<SignerIndex>,
 | 
			
		||||
        use_deprecated_loader: bool,
 | 
			
		||||
        random_address: bool,
 | 
			
		||||
    },
 | 
			
		||||
    // Stake Commands
 | 
			
		||||
    CreateStakeAccount {
 | 
			
		||||
@@ -609,12 +610,14 @@ pub fn parse_command(
 | 
			
		||||
                1
 | 
			
		||||
            });
 | 
			
		||||
            let use_deprecated_loader = matches.is_present("use_deprecated_loader");
 | 
			
		||||
            let random_address = matches.is_present("random_address");
 | 
			
		||||
 | 
			
		||||
            Ok(CliCommandInfo {
 | 
			
		||||
                command: CliCommand::Deploy {
 | 
			
		||||
                    program_location: matches.value_of("program_location").unwrap().to_string(),
 | 
			
		||||
                    address,
 | 
			
		||||
                    use_deprecated_loader,
 | 
			
		||||
                    random_address,
 | 
			
		||||
                },
 | 
			
		||||
                signers,
 | 
			
		||||
            })
 | 
			
		||||
@@ -1131,12 +1134,16 @@ fn process_deploy(
 | 
			
		||||
    program_location: &str,
 | 
			
		||||
    address: Option<SignerIndex>,
 | 
			
		||||
    use_deprecated_loader: bool,
 | 
			
		||||
    random_address: bool,
 | 
			
		||||
) -> ProcessResult {
 | 
			
		||||
    let new_keypair = Keypair::new(); // Create ephemeral keypair to use for program address, if not provided
 | 
			
		||||
    let program_id = if let Some(i) = address {
 | 
			
		||||
        config.signers[i]
 | 
			
		||||
    } else {
 | 
			
		||||
    } else if random_address {
 | 
			
		||||
        &new_keypair
 | 
			
		||||
    } else {
 | 
			
		||||
        // Clap will enforce one of the previous two conditions
 | 
			
		||||
        unreachable!();
 | 
			
		||||
    };
 | 
			
		||||
    let mut file = File::open(program_location).map_err(|err| {
 | 
			
		||||
        CliError::DynamicProgramError(format!("Unable to open program file: {}", err))
 | 
			
		||||
@@ -1570,12 +1577,14 @@ pub fn process_command(config: &CliConfig) -> ProcessResult {
 | 
			
		||||
            program_location,
 | 
			
		||||
            address,
 | 
			
		||||
            use_deprecated_loader,
 | 
			
		||||
            random_address,
 | 
			
		||||
        } => process_deploy(
 | 
			
		||||
            &rpc_client,
 | 
			
		||||
            config,
 | 
			
		||||
            program_location,
 | 
			
		||||
            *address,
 | 
			
		||||
            *use_deprecated_loader,
 | 
			
		||||
            *random_address,
 | 
			
		||||
        ),
 | 
			
		||||
 | 
			
		||||
        // Stake Commands
 | 
			
		||||
@@ -2192,10 +2201,17 @@ pub fn app<'ab, 'v>(name: &str, about: &'ab str, version: &'v str) -> App<'ab, '
 | 
			
		||||
                .arg(
 | 
			
		||||
                    Arg::with_name("address_signer")
 | 
			
		||||
                        .index(2)
 | 
			
		||||
                        .value_name("SIGNER_KEYPAIR")
 | 
			
		||||
                        .value_name("ADDRESS_KEYPAIR")
 | 
			
		||||
                        .takes_value(true)
 | 
			
		||||
                        .validator(is_valid_signer)
 | 
			
		||||
                        .help("The signer for the desired address of the program [default: new random address]")
 | 
			
		||||
                        .required_unless("random_address")
 | 
			
		||||
                        .help("The signer for the desired program address. See also: --random-address")
 | 
			
		||||
                )
 | 
			
		||||
                .arg(
 | 
			
		||||
                    Arg::with_name("random_address")
 | 
			
		||||
                        .long("random-address")
 | 
			
		||||
                        .takes_value(false)
 | 
			
		||||
                        .help("Deploy at a random address. WARNING: Deployment cannot be retried!")
 | 
			
		||||
                )
 | 
			
		||||
                .arg(
 | 
			
		||||
                    Arg::with_name("use_deprecated_loader")
 | 
			
		||||
@@ -2558,10 +2574,12 @@ mod tests {
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
        // Test Deploy Subcommand
 | 
			
		||||
        let test_deploy =
 | 
			
		||||
            test_commands
 | 
			
		||||
                .clone()
 | 
			
		||||
                .get_matches_from(vec!["test", "deploy", "/Users/test/program.o"]);
 | 
			
		||||
        let test_deploy = test_commands.clone().get_matches_from(vec![
 | 
			
		||||
            "test",
 | 
			
		||||
            "deploy",
 | 
			
		||||
            "/Users/test/program.o",
 | 
			
		||||
            "--random-address",
 | 
			
		||||
        ]);
 | 
			
		||||
        assert_eq!(
 | 
			
		||||
            parse_command(&test_deploy, &default_signer, &mut None).unwrap(),
 | 
			
		||||
            CliCommandInfo {
 | 
			
		||||
@@ -2569,6 +2587,7 @@ mod tests {
 | 
			
		||||
                    program_location: "/Users/test/program.o".to_string(),
 | 
			
		||||
                    address: None,
 | 
			
		||||
                    use_deprecated_loader: false,
 | 
			
		||||
                    random_address: true,
 | 
			
		||||
                },
 | 
			
		||||
                signers: vec![read_keypair_file(&keypair_file).unwrap().into()],
 | 
			
		||||
            }
 | 
			
		||||
@@ -2590,6 +2609,7 @@ mod tests {
 | 
			
		||||
                    program_location: "/Users/test/program.o".to_string(),
 | 
			
		||||
                    address: Some(1),
 | 
			
		||||
                    use_deprecated_loader: false,
 | 
			
		||||
                    random_address: false,
 | 
			
		||||
                },
 | 
			
		||||
                signers: vec![
 | 
			
		||||
                    read_keypair_file(&keypair_file).unwrap().into(),
 | 
			
		||||
@@ -2903,6 +2923,7 @@ mod tests {
 | 
			
		||||
            program_location: pathbuf.to_str().unwrap().to_string(),
 | 
			
		||||
            address: None,
 | 
			
		||||
            use_deprecated_loader: false,
 | 
			
		||||
            random_address: true,
 | 
			
		||||
        };
 | 
			
		||||
        let result = process_command(&config);
 | 
			
		||||
        let json: Value = serde_json::from_str(&result.unwrap()).unwrap();
 | 
			
		||||
@@ -2921,6 +2942,7 @@ mod tests {
 | 
			
		||||
            program_location: "bad/file/location.so".to_string(),
 | 
			
		||||
            address: None,
 | 
			
		||||
            use_deprecated_loader: false,
 | 
			
		||||
            random_address: true,
 | 
			
		||||
        };
 | 
			
		||||
        assert!(process_command(&config).is_err());
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -64,6 +64,7 @@ fn test_cli_deploy_program() {
 | 
			
		||||
        program_location: pathbuf.to_str().unwrap().to_string(),
 | 
			
		||||
        address: None,
 | 
			
		||||
        use_deprecated_loader: false,
 | 
			
		||||
        random_address: true,
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    let response = process_command(&config);
 | 
			
		||||
@@ -98,6 +99,7 @@ fn test_cli_deploy_program() {
 | 
			
		||||
        program_location: pathbuf.to_str().unwrap().to_string(),
 | 
			
		||||
        address: Some(1),
 | 
			
		||||
        use_deprecated_loader: false,
 | 
			
		||||
        random_address: false,
 | 
			
		||||
    };
 | 
			
		||||
    process_command(&config).unwrap();
 | 
			
		||||
    let account1 = rpc_client
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user