|
|
@@ -688,10 +688,6 @@ impl<FG: ForkGraph> TransactionBatchProcessor<FG> {
|
|
|
compute_budget_and_limits,
|
|
|
} = checked_details;
|
|
|
|
|
|
- let compute_budget_and_limits = compute_budget_and_limits.inspect_err(|_err| {
|
|
|
- error_counters.invalid_compute_budget += 1;
|
|
|
- })?;
|
|
|
-
|
|
|
let fee_payer_address = message.fee_payer();
|
|
|
|
|
|
// We *must* use load_transaction_account() here because *this* is when the fee-payer
|
|
|
@@ -1197,7 +1193,7 @@ mod tests {
|
|
|
solana_svm_callback::{AccountState, InvokeContextCallback},
|
|
|
solana_transaction::{sanitized::SanitizedTransaction, Transaction},
|
|
|
solana_transaction_context::TransactionContext,
|
|
|
- solana_transaction_error::{TransactionError, TransactionError::DuplicateInstruction},
|
|
|
+ solana_transaction_error::TransactionError,
|
|
|
std::collections::HashMap,
|
|
|
test_case::test_case,
|
|
|
};
|
|
|
@@ -2045,7 +2041,7 @@ mod tests {
|
|
|
TransactionBatchProcessor::<TestForkGraph>::validate_transaction_nonce_and_fee_payer(
|
|
|
&mut account_loader,
|
|
|
&message,
|
|
|
- CheckedTransactionDetails::new(None, Ok(compute_budget_and_limits)),
|
|
|
+ CheckedTransactionDetails::new(None, compute_budget_and_limits),
|
|
|
&Hash::default(),
|
|
|
&rent,
|
|
|
&mut error_counters,
|
|
|
@@ -2124,7 +2120,7 @@ mod tests {
|
|
|
TransactionBatchProcessor::<TestForkGraph>::validate_transaction_nonce_and_fee_payer(
|
|
|
&mut account_loader,
|
|
|
&message,
|
|
|
- CheckedTransactionDetails::new(None, Ok(compute_budget_and_limits)),
|
|
|
+ CheckedTransactionDetails::new(None, compute_budget_and_limits),
|
|
|
&Hash::default(),
|
|
|
&rent,
|
|
|
&mut error_counters,
|
|
|
@@ -2177,7 +2173,7 @@ mod tests {
|
|
|
&message,
|
|
|
CheckedTransactionDetails::new(
|
|
|
None,
|
|
|
- Ok(SVMTransactionExecutionAndFeeBudgetLimits::default()),
|
|
|
+ SVMTransactionExecutionAndFeeBudgetLimits::default(),
|
|
|
),
|
|
|
&Hash::default(),
|
|
|
&Rent::default(),
|
|
|
@@ -2210,13 +2206,13 @@ mod tests {
|
|
|
&message,
|
|
|
CheckedTransactionDetails::new(
|
|
|
None,
|
|
|
- Ok(SVMTransactionExecutionAndFeeBudgetLimits::with_fee(
|
|
|
+ SVMTransactionExecutionAndFeeBudgetLimits::with_fee(
|
|
|
MockBankCallback::calculate_fee_details(
|
|
|
&message,
|
|
|
lamports_per_signature,
|
|
|
0,
|
|
|
),
|
|
|
- )),
|
|
|
+ ),
|
|
|
),
|
|
|
&Hash::default(),
|
|
|
&Rent::default(),
|
|
|
@@ -2253,13 +2249,13 @@ mod tests {
|
|
|
&message,
|
|
|
CheckedTransactionDetails::new(
|
|
|
None,
|
|
|
- Ok(SVMTransactionExecutionAndFeeBudgetLimits::with_fee(
|
|
|
+ SVMTransactionExecutionAndFeeBudgetLimits::with_fee(
|
|
|
MockBankCallback::calculate_fee_details(
|
|
|
&message,
|
|
|
lamports_per_signature,
|
|
|
0,
|
|
|
),
|
|
|
- )),
|
|
|
+ ),
|
|
|
),
|
|
|
&Hash::default(),
|
|
|
&rent,
|
|
|
@@ -2294,13 +2290,13 @@ mod tests {
|
|
|
&message,
|
|
|
CheckedTransactionDetails::new(
|
|
|
None,
|
|
|
- Ok(SVMTransactionExecutionAndFeeBudgetLimits::with_fee(
|
|
|
+ SVMTransactionExecutionAndFeeBudgetLimits::with_fee(
|
|
|
MockBankCallback::calculate_fee_details(
|
|
|
&message,
|
|
|
lamports_per_signature,
|
|
|
0,
|
|
|
),
|
|
|
- )),
|
|
|
+ ),
|
|
|
),
|
|
|
&Hash::default(),
|
|
|
&Rent::default(),
|
|
|
@@ -2311,33 +2307,6 @@ mod tests {
|
|
|
assert_eq!(result, Err(TransactionError::InvalidAccountForFee));
|
|
|
}
|
|
|
|
|
|
- #[test]
|
|
|
- fn test_validate_transaction_fee_payer_invalid_compute_budget() {
|
|
|
- let message = new_unchecked_sanitized_message(Message::new(
|
|
|
- &[
|
|
|
- ComputeBudgetInstruction::set_compute_unit_limit(2000u32),
|
|
|
- ComputeBudgetInstruction::set_compute_unit_limit(42u32),
|
|
|
- ],
|
|
|
- Some(&Pubkey::new_unique()),
|
|
|
- ));
|
|
|
-
|
|
|
- let mock_bank = MockBankCallback::default();
|
|
|
- let mut account_loader = (&mock_bank).into();
|
|
|
- let mut error_counters = TransactionErrorMetrics::default();
|
|
|
- let result =
|
|
|
- TransactionBatchProcessor::<TestForkGraph>::validate_transaction_nonce_and_fee_payer(
|
|
|
- &mut account_loader,
|
|
|
- &message,
|
|
|
- CheckedTransactionDetails::new(None, Err(DuplicateInstruction(1))),
|
|
|
- &Hash::default(),
|
|
|
- &Rent::default(),
|
|
|
- &mut error_counters,
|
|
|
- );
|
|
|
-
|
|
|
- assert_eq!(error_counters.invalid_compute_budget.0, 1);
|
|
|
- assert_eq!(result, Err(TransactionError::DuplicateInstruction(1u8)));
|
|
|
- }
|
|
|
-
|
|
|
#[test_case(false; "informal_loaded_size")]
|
|
|
#[test_case(true; "simd186_loaded_size")]
|
|
|
fn test_validate_transaction_fee_payer_is_nonce(formalize_loaded_transaction_data_size: bool) {
|
|
|
@@ -2398,7 +2367,7 @@ mod tests {
|
|
|
|
|
|
let tx_details = CheckedTransactionDetails::new(
|
|
|
Some(future_nonce.clone()),
|
|
|
- Ok(compute_budget_and_limits),
|
|
|
+ compute_budget_and_limits,
|
|
|
);
|
|
|
|
|
|
let result = TransactionBatchProcessor::<TestForkGraph>::validate_transaction_nonce_and_fee_payer(
|
|
|
@@ -2467,7 +2436,7 @@ mod tests {
|
|
|
let result = TransactionBatchProcessor::<TestForkGraph>::validate_transaction_nonce_and_fee_payer(
|
|
|
&mut account_loader,
|
|
|
&message,
|
|
|
- CheckedTransactionDetails::new(None, Ok(compute_budget_and_limits)),
|
|
|
+ CheckedTransactionDetails::new(None, compute_budget_and_limits),
|
|
|
&Hash::default(),
|
|
|
&rent,
|
|
|
&mut error_counters,
|
|
|
@@ -2510,9 +2479,9 @@ mod tests {
|
|
|
&message,
|
|
|
CheckedTransactionDetails::new(
|
|
|
None,
|
|
|
- Ok(SVMTransactionExecutionAndFeeBudgetLimits::with_fee(
|
|
|
+ SVMTransactionExecutionAndFeeBudgetLimits::with_fee(
|
|
|
MockBankCallback::calculate_fee_details(&message, 5000, 0),
|
|
|
- )),
|
|
|
+ ),
|
|
|
),
|
|
|
&Hash::default(),
|
|
|
&Rent::default(),
|