cli: Speed up fee check on program deployment (#25718)
This commit is contained in:
parent
edefaa437f
commit
d5e18ba1a1
|
@ -68,6 +68,22 @@ pub fn check_account_for_spend_multiple_fees_with_commitment(
|
||||||
commitment: CommitmentConfig,
|
commitment: CommitmentConfig,
|
||||||
) -> Result<(), CliError> {
|
) -> Result<(), CliError> {
|
||||||
let fee = get_fee_for_messages(rpc_client, messages)?;
|
let fee = get_fee_for_messages(rpc_client, messages)?;
|
||||||
|
check_account_for_spend_and_fee_with_commitment(
|
||||||
|
rpc_client,
|
||||||
|
account_pubkey,
|
||||||
|
balance,
|
||||||
|
fee,
|
||||||
|
commitment,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn check_account_for_spend_and_fee_with_commitment(
|
||||||
|
rpc_client: &RpcClient,
|
||||||
|
account_pubkey: &Pubkey,
|
||||||
|
balance: u64,
|
||||||
|
fee: u64,
|
||||||
|
commitment: CommitmentConfig,
|
||||||
|
) -> Result<(), CliError> {
|
||||||
if !check_account_for_balance_with_commitment(
|
if !check_account_for_balance_with_commitment(
|
||||||
rpc_client,
|
rpc_client,
|
||||||
account_pubkey,
|
account_pubkey,
|
||||||
|
|
|
@ -1898,7 +1898,14 @@ fn do_process_program_write_and_deploy(
|
||||||
}
|
}
|
||||||
|
|
||||||
if !skip_fee_check {
|
if !skip_fee_check {
|
||||||
check_payer(&rpc_client, config, balance_needed, &messages)?;
|
check_payer(
|
||||||
|
&rpc_client,
|
||||||
|
config,
|
||||||
|
balance_needed,
|
||||||
|
&initial_message,
|
||||||
|
&write_messages,
|
||||||
|
&final_message,
|
||||||
|
)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
send_deploy_messages(
|
send_deploy_messages(
|
||||||
|
@ -2032,9 +2039,17 @@ fn do_process_program_upgrade(
|
||||||
&blockhash,
|
&blockhash,
|
||||||
);
|
);
|
||||||
messages.push(&final_message);
|
messages.push(&final_message);
|
||||||
|
let final_message = Some(final_message);
|
||||||
|
|
||||||
if !skip_fee_check {
|
if !skip_fee_check {
|
||||||
check_payer(&rpc_client, config, balance_needed, &messages)?;
|
check_payer(
|
||||||
|
&rpc_client,
|
||||||
|
config,
|
||||||
|
balance_needed,
|
||||||
|
&initial_message,
|
||||||
|
&write_messages,
|
||||||
|
&final_message,
|
||||||
|
)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
send_deploy_messages(
|
send_deploy_messages(
|
||||||
|
@ -2042,7 +2057,7 @@ fn do_process_program_upgrade(
|
||||||
config,
|
config,
|
||||||
&initial_message,
|
&initial_message,
|
||||||
&write_messages,
|
&write_messages,
|
||||||
&Some(final_message),
|
&final_message,
|
||||||
buffer_signer,
|
buffer_signer,
|
||||||
Some(upgrade_authority),
|
Some(upgrade_authority),
|
||||||
Some(&[upgrade_authority]),
|
Some(&[upgrade_authority]),
|
||||||
|
@ -2134,14 +2149,28 @@ fn check_payer(
|
||||||
rpc_client: &RpcClient,
|
rpc_client: &RpcClient,
|
||||||
config: &CliConfig,
|
config: &CliConfig,
|
||||||
balance_needed: u64,
|
balance_needed: u64,
|
||||||
messages: &[&Message],
|
initial_message: &Option<Message>,
|
||||||
|
write_messages: &Option<Vec<Message>>,
|
||||||
|
final_message: &Option<Message>,
|
||||||
) -> Result<(), Box<dyn std::error::Error>> {
|
) -> Result<(), Box<dyn std::error::Error>> {
|
||||||
// Does the payer have enough?
|
let mut fee = 0;
|
||||||
check_account_for_spend_multiple_fees_with_commitment(
|
if let Some(message) = initial_message {
|
||||||
|
fee += rpc_client.get_fee_for_message(message)?;
|
||||||
|
}
|
||||||
|
if let Some(write_messages) = write_messages {
|
||||||
|
// Assume all write messages cost the same
|
||||||
|
if let Some(message) = write_messages.get(0) {
|
||||||
|
fee += rpc_client.get_fee_for_message(message)? * (write_messages.len() as u64);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if let Some(message) = final_message {
|
||||||
|
fee += rpc_client.get_fee_for_message(message)?;
|
||||||
|
}
|
||||||
|
check_account_for_spend_and_fee_with_commitment(
|
||||||
rpc_client,
|
rpc_client,
|
||||||
&config.signers[0].pubkey(),
|
&config.signers[0].pubkey(),
|
||||||
balance_needed,
|
balance_needed,
|
||||||
messages,
|
fee,
|
||||||
config.commitment,
|
config.commitment,
|
||||||
)?;
|
)?;
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|
Loading…
Reference in New Issue