Add fee-payer arg to solana feature activate (#29367)
This commit is contained in:
parent
edd5f6f3be
commit
d33129193f
|
@ -6,7 +6,7 @@ use {
|
||||||
clap::{App, AppSettings, Arg, ArgMatches, SubCommand},
|
clap::{App, AppSettings, Arg, ArgMatches, SubCommand},
|
||||||
console::style,
|
console::style,
|
||||||
serde::{Deserialize, Serialize},
|
serde::{Deserialize, Serialize},
|
||||||
solana_clap_utils::{input_parsers::*, input_validators::*, keypair::*},
|
solana_clap_utils::{fee_payer::*, input_parsers::*, input_validators::*, keypair::*},
|
||||||
solana_cli_output::{cli_version::CliVersion, QuietDisplay, VerboseDisplay},
|
solana_cli_output::{cli_version::CliVersion, QuietDisplay, VerboseDisplay},
|
||||||
solana_remote_wallet::remote_wallet::RemoteWalletManager,
|
solana_remote_wallet::remote_wallet::RemoteWalletManager,
|
||||||
solana_rpc_client::rpc_client::RpcClient,
|
solana_rpc_client::rpc_client::RpcClient,
|
||||||
|
@ -42,6 +42,7 @@ pub enum FeatureCliCommand {
|
||||||
Activate {
|
Activate {
|
||||||
feature: Pubkey,
|
feature: Pubkey,
|
||||||
force: ForceActivation,
|
force: ForceActivation,
|
||||||
|
fee_payer: SignerIndex,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -429,7 +430,8 @@ impl FeatureSubCommands for App<'_, '_> {
|
||||||
.hidden(true)
|
.hidden(true)
|
||||||
.multiple(true)
|
.multiple(true)
|
||||||
.help("Override activation sanity checks. Don't use this flag"),
|
.help("Override activation sanity checks. Don't use this flag"),
|
||||||
),
|
)
|
||||||
|
.arg(fee_payer_arg()),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -453,7 +455,8 @@ pub fn parse_feature_subcommand(
|
||||||
let response = match matches.subcommand() {
|
let response = match matches.subcommand() {
|
||||||
("activate", Some(matches)) => {
|
("activate", Some(matches)) => {
|
||||||
let (feature_signer, feature) = signer_of(matches, "feature", wallet_manager)?;
|
let (feature_signer, feature) = signer_of(matches, "feature", wallet_manager)?;
|
||||||
let mut signers = vec![default_signer.signer_from_path(matches, wallet_manager)?];
|
let (fee_payer, fee_payer_pubkey) =
|
||||||
|
signer_of(matches, FEE_PAYER_ARG.name, wallet_manager)?;
|
||||||
|
|
||||||
let force = match matches.occurrences_of("force") {
|
let force = match matches.occurrences_of("force") {
|
||||||
2 => ForceActivation::Yes,
|
2 => ForceActivation::Yes,
|
||||||
|
@ -461,14 +464,23 @@ pub fn parse_feature_subcommand(
|
||||||
_ => ForceActivation::No,
|
_ => ForceActivation::No,
|
||||||
};
|
};
|
||||||
|
|
||||||
signers.push(feature_signer.unwrap());
|
let signer_info = default_signer.generate_unique_signers(
|
||||||
|
vec![fee_payer, feature_signer],
|
||||||
|
matches,
|
||||||
|
wallet_manager,
|
||||||
|
)?;
|
||||||
|
|
||||||
let feature = feature.unwrap();
|
let feature = feature.unwrap();
|
||||||
|
|
||||||
known_feature(&feature)?;
|
known_feature(&feature)?;
|
||||||
|
|
||||||
CliCommandInfo {
|
CliCommandInfo {
|
||||||
command: CliCommand::Feature(FeatureCliCommand::Activate { feature, force }),
|
command: CliCommand::Feature(FeatureCliCommand::Activate {
|
||||||
signers,
|
feature,
|
||||||
|
force,
|
||||||
|
fee_payer: signer_info.index_of(fee_payer_pubkey).unwrap(),
|
||||||
|
}),
|
||||||
|
signers: signer_info.signers,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
("status", Some(matches)) => {
|
("status", Some(matches)) => {
|
||||||
|
@ -506,9 +518,11 @@ pub fn process_feature_subcommand(
|
||||||
features,
|
features,
|
||||||
display_all,
|
display_all,
|
||||||
} => process_status(rpc_client, config, features, *display_all),
|
} => process_status(rpc_client, config, features, *display_all),
|
||||||
FeatureCliCommand::Activate { feature, force } => {
|
FeatureCliCommand::Activate {
|
||||||
process_activate(rpc_client, config, *feature, *force)
|
feature,
|
||||||
}
|
force,
|
||||||
|
fee_payer,
|
||||||
|
} => process_activate(rpc_client, config, *feature, *force, *fee_payer),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -843,7 +857,9 @@ fn process_activate(
|
||||||
config: &CliConfig,
|
config: &CliConfig,
|
||||||
feature_id: Pubkey,
|
feature_id: Pubkey,
|
||||||
force: ForceActivation,
|
force: ForceActivation,
|
||||||
|
fee_payer: SignerIndex,
|
||||||
) -> ProcessResult {
|
) -> ProcessResult {
|
||||||
|
let fee_payer = config.signers[fee_payer];
|
||||||
let account = rpc_client
|
let account = rpc_client
|
||||||
.get_multiple_accounts(&[feature_id])?
|
.get_multiple_accounts(&[feature_id])?
|
||||||
.into_iter()
|
.into_iter()
|
||||||
|
@ -874,15 +890,11 @@ fn process_activate(
|
||||||
false,
|
false,
|
||||||
SpendAmount::Some(rent),
|
SpendAmount::Some(rent),
|
||||||
&blockhash,
|
&blockhash,
|
||||||
&config.signers[0].pubkey(),
|
&fee_payer.pubkey(),
|
||||||
|lamports| {
|
|lamports| {
|
||||||
Message::new(
|
Message::new(
|
||||||
&feature::activate_with_lamports(
|
&feature::activate_with_lamports(&feature_id, &fee_payer.pubkey(), lamports),
|
||||||
&feature_id,
|
Some(&fee_payer.pubkey()),
|
||||||
&config.signers[0].pubkey(),
|
|
||||||
lamports,
|
|
||||||
),
|
|
||||||
Some(&config.signers[0].pubkey()),
|
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
config.commitment,
|
config.commitment,
|
||||||
|
|
Loading…
Reference in New Issue