cli: don't overallocate upgradeable buffer accounts (#15603) (#15625)

(cherry picked from commit d73af9c1dd)

Co-authored-by: Jack May <jack@solana.com>
This commit is contained in:
mergify[bot]
2021-03-02 08:21:09 -08:00
committed by GitHub
parent 979e07501a
commit eb12d29683
3 changed files with 10 additions and 6 deletions

View File

@@ -718,7 +718,8 @@ fn process_program_deploy(
} else {
return Err("Program location required if buffer not supplied".into());
};
let buffer_data_len = if let Some(len) = max_len {
let buffer_data_len = program_len;
let programdata_len = if let Some(len) = max_len {
if program_len > len {
return Err("Max length specified not large enough".into());
}
@@ -738,6 +739,7 @@ fn process_program_deploy(
config,
&program_data,
buffer_data_len,
programdata_len,
minimum_balance,
&bpf_loader_upgradeable::id(),
Some(&[program_signer.unwrap(), upgrade_authority_signer]),
@@ -825,7 +827,7 @@ fn process_write_buffer(
let buffer_data_len = if let Some(len) = max_len {
len
} else {
program_data.len() * 2
program_data.len()
};
let minimum_balance = rpc_client.get_minimum_balance_for_rent_exemption(
UpgradeableLoaderState::programdata_len(buffer_data_len)?,
@@ -836,6 +838,7 @@ fn process_write_buffer(
config,
&program_data,
program_data.len(),
program_data.len(),
minimum_balance,
&bpf_loader_upgradeable::id(),
None,
@@ -1072,6 +1075,7 @@ pub fn process_deploy(
config,
&program_data,
program_data.len(),
program_data.len(),
minimum_balance,
&loader_id,
Some(&[buffer_signer]),
@@ -1092,6 +1096,7 @@ fn do_process_program_write_and_deploy(
config: &CliConfig,
program_data: &[u8],
buffer_data_len: usize,
programdata_len: usize,
minimum_balance: u64,
loader_id: &Pubkey,
program_signers: Option<&[&dyn Signer]>,
@@ -1207,7 +1212,7 @@ fn do_process_program_write_and_deploy(
rpc_client.get_minimum_balance_for_rent_exemption(
UpgradeableLoaderState::program_len()?,
)?,
buffer_data_len,
programdata_len,
)?,
Some(&config.signers[0].pubkey()),
)

View File

@@ -569,7 +569,7 @@ fn test_cli_program_write_buffer() {
.unwrap();
let minimum_balance_for_buffer_default = rpc_client
.get_minimum_balance_for_rent_exemption(
UpgradeableLoaderState::programdata_len(max_len * 2).unwrap(),
UpgradeableLoaderState::programdata_len(max_len).unwrap(),
)
.unwrap();