cli: skip no-op program buffer writes (#277)
cli: skip no-op program deploy write txs
This commit is contained in:
parent
fee4d82a56
commit
21eff36754
|
@ -2213,11 +2213,12 @@ fn do_process_program_write_and_deploy(
|
|||
let blockhash = rpc_client.get_latest_blockhash()?;
|
||||
|
||||
// Initialize buffer account or complete if already partially initialized
|
||||
let (initial_instructions, balance_needed) = if let Some(account) = rpc_client
|
||||
let (initial_instructions, balance_needed, buffer_program_data) = if let Some(mut account) =
|
||||
rpc_client
|
||||
.get_account_with_commitment(buffer_pubkey, config.commitment)?
|
||||
.value
|
||||
{
|
||||
complete_partial_program_init(
|
||||
let (ixs, balance_needed) = complete_partial_program_init(
|
||||
loader_id,
|
||||
&fee_payer_signer.pubkey(),
|
||||
buffer_pubkey,
|
||||
|
@ -2229,7 +2230,11 @@ fn do_process_program_write_and_deploy(
|
|||
},
|
||||
min_rent_exempt_program_data_balance,
|
||||
allow_excessive_balance,
|
||||
)?
|
||||
)?;
|
||||
let buffer_program_data = account
|
||||
.data
|
||||
.split_off(UpgradeableLoaderState::size_of_buffer_metadata());
|
||||
(ixs, balance_needed, buffer_program_data)
|
||||
} else if loader_id == &bpf_loader_upgradeable::id() {
|
||||
(
|
||||
bpf_loader_upgradeable::create_buffer(
|
||||
|
@ -2240,6 +2245,7 @@ fn do_process_program_write_and_deploy(
|
|||
program_len,
|
||||
)?,
|
||||
min_rent_exempt_program_data_balance,
|
||||
vec![0; program_len],
|
||||
)
|
||||
} else {
|
||||
(
|
||||
|
@ -2251,6 +2257,7 @@ fn do_process_program_write_and_deploy(
|
|||
loader_id,
|
||||
)],
|
||||
min_rent_exempt_program_data_balance,
|
||||
vec![0; program_len],
|
||||
)
|
||||
};
|
||||
let initial_message = if !initial_instructions.is_empty() {
|
||||
|
@ -2281,7 +2288,10 @@ fn do_process_program_write_and_deploy(
|
|||
let mut write_messages = vec![];
|
||||
let chunk_size = calculate_max_chunk_size(&create_msg);
|
||||
for (chunk, i) in program_data.chunks(chunk_size).zip(0..) {
|
||||
write_messages.push(create_msg((i * chunk_size) as u32, chunk.to_vec()));
|
||||
let offset = i * chunk_size;
|
||||
if chunk != &buffer_program_data[offset..offset + chunk.len()] {
|
||||
write_messages.push(create_msg(offset as u32, chunk.to_vec()));
|
||||
}
|
||||
}
|
||||
|
||||
// Create and add final message
|
||||
|
@ -2370,11 +2380,12 @@ fn do_process_program_upgrade(
|
|||
let (initial_message, write_messages, balance_needed) =
|
||||
if let Some(buffer_signer) = buffer_signer {
|
||||
// Check Buffer account to see if partial initialization has occurred
|
||||
let (initial_instructions, balance_needed) = if let Some(account) = rpc_client
|
||||
let (initial_instructions, balance_needed, buffer_program_data) =
|
||||
if let Some(mut account) = rpc_client
|
||||
.get_account_with_commitment(&buffer_signer.pubkey(), config.commitment)?
|
||||
.value
|
||||
{
|
||||
complete_partial_program_init(
|
||||
let (ixs, balance_needed) = complete_partial_program_init(
|
||||
&bpf_loader_upgradeable::id(),
|
||||
&fee_payer_signer.pubkey(),
|
||||
&buffer_signer.pubkey(),
|
||||
|
@ -2382,7 +2393,11 @@ fn do_process_program_upgrade(
|
|||
UpgradeableLoaderState::size_of_buffer(program_len),
|
||||
min_rent_exempt_program_data_balance,
|
||||
true,
|
||||
)?
|
||||
)?;
|
||||
let buffer_program_data = account
|
||||
.data
|
||||
.split_off(UpgradeableLoaderState::size_of_buffer_metadata());
|
||||
(ixs, balance_needed, buffer_program_data)
|
||||
} else {
|
||||
(
|
||||
bpf_loader_upgradeable::create_buffer(
|
||||
|
@ -2393,6 +2408,7 @@ fn do_process_program_upgrade(
|
|||
program_len,
|
||||
)?,
|
||||
min_rent_exempt_program_data_balance,
|
||||
vec![0; program_len],
|
||||
)
|
||||
};
|
||||
|
||||
|
@ -2426,7 +2442,10 @@ fn do_process_program_upgrade(
|
|||
let mut write_messages = vec![];
|
||||
let chunk_size = calculate_max_chunk_size(&create_msg);
|
||||
for (chunk, i) in program_data.chunks(chunk_size).zip(0..) {
|
||||
write_messages.push(create_msg((i * chunk_size) as u32, chunk.to_vec()));
|
||||
let offset = i * chunk_size;
|
||||
if chunk != &buffer_program_data[offset..offset + chunk.len()] {
|
||||
write_messages.push(create_msg(offset as u32, chunk.to_vec()));
|
||||
}
|
||||
}
|
||||
|
||||
(initial_message, write_messages, balance_needed)
|
||||
|
|
Loading…
Reference in New Issue