Priority queue supports deprecated compute budget ix (#32567)

Supports deprecated compute budget instruction when getting transaction's priority details
This commit is contained in:
Tao Zhu 2023-07-20 19:17:56 -05:00 committed by GitHub
parent 15f948b47c
commit 19f5b49abb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 52 additions and 6 deletions

View File

@ -27,11 +27,11 @@ pub trait GetTransactionPriorityDetails {
let prioritization_fee_details = compute_budget
.process_instructions(
instructions,
true, // use default units per instruction
false, // stop supporting prioritization by request_units_deprecated instruction
true, // enable request heap frame instruction
true, // enable support set accounts data size instruction
// TODO: round_compute_unit_price_enabled: bool
true, // use default units per instruction
true, // supports prioritization by request_units_deprecated instruction
true, // enable request heap frame instruction
true, // enable support set accounts data size instruction
// TODO: round_compute_unit_price_enabled: bool
)
.ok()?;
Some(TransactionPriorityDetails {
@ -70,7 +70,8 @@ mod tests {
use {
super::*,
solana_sdk::{
compute_budget::ComputeBudgetInstruction,
compute_budget::{self, ComputeBudgetInstruction},
instruction::Instruction,
message::Message,
pubkey::Pubkey,
signature::{Keypair, Signer},
@ -193,4 +194,49 @@ mod tests {
})
);
}
#[test]
fn test_get_priority_with_deprecated_compute_unit_request() {
let priority = 1_000;
let units = 200_000;
let additional_fee = units * priority / 1_000_000;
let keypair = Keypair::new();
let transaction = Transaction::new_unsigned(Message::new(
&[
system_instruction::transfer(&keypair.pubkey(), &Pubkey::new_unique(), 1),
Instruction::new_with_borsh(
compute_budget::id(),
&ComputeBudgetInstruction::RequestUnitsDeprecated {
units,
additional_fee,
},
vec![],
),
],
Some(&keypair.pubkey()),
));
// assert for SanitizedVersionedTransaction
let versioned_transaction = VersionedTransaction::from(transaction.clone());
let sanitized_versioned_transaction =
SanitizedVersionedTransaction::try_new(versioned_transaction).unwrap();
assert_eq!(
sanitized_versioned_transaction.get_transaction_priority_details(false),
Some(TransactionPriorityDetails {
priority: priority as u64,
compute_unit_limit: units as u64
})
);
// assert for SanitizedTransaction
let sanitized_transaction =
SanitizedTransaction::try_from_legacy_transaction(transaction).unwrap();
assert_eq!(
sanitized_transaction.get_transaction_priority_details(false),
Some(TransactionPriorityDetails {
priority: priority as u64,
compute_unit_limit: units as u64
})
);
}
}