Skip to content

Commit af5d4e8

Browse files
authored
svm: properly test underfunded nonce fee-payer (#9246)
1 parent f5684f0 commit af5d4e8

File tree

1 file changed

+31
-19
lines changed

1 file changed

+31
-19
lines changed

svm/src/transaction_processor.rs

Lines changed: 31 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2331,21 +2331,31 @@ mod tests {
23312331
let min_balance = Rent::default().minimum_balance(nonce::state::State::size());
23322332
let priority_fee = compute_unit_limit;
23332333

2334+
let nonce_versions = nonce::versions::Versions::new(nonce::state::State::Initialized(
2335+
nonce::state::Data::new(
2336+
*fee_payer_address,
2337+
DurableNonce::default(),
2338+
lamports_per_signature,
2339+
),
2340+
));
2341+
2342+
let environment_blockhash = Hash::new_unique();
2343+
let next_durable_nonce = DurableNonce::from_blockhash(&environment_blockhash);
2344+
23342345
// Sufficient Fees
23352346
{
23362347
let fee_payer_account = AccountSharedData::new_data(
23372348
min_balance + transaction_fee + priority_fee,
2338-
&nonce::versions::Versions::new(nonce::state::State::Initialized(
2339-
nonce::state::Data::new(
2340-
*fee_payer_address,
2341-
DurableNonce::default(),
2342-
lamports_per_signature,
2343-
),
2344-
)),
2349+
&nonce_versions,
23452350
&system_program::id(),
23462351
)
23472352
.unwrap();
23482353

2354+
let mut future_nonce = NonceInfo::new(*fee_payer_address, fee_payer_account.clone());
2355+
future_nonce
2356+
.try_advance_nonce(next_durable_nonce, lamports_per_signature)
2357+
.unwrap();
2358+
23492359
let mut mock_accounts = HashMap::new();
23502360
mock_accounts.insert(*fee_payer_address, fee_payer_account.clone());
23512361
let mut mock_bank = MockBankCallback {
@@ -2358,13 +2368,6 @@ mod tests {
23582368

23592369
let mut error_counters = TransactionErrorMetrics::default();
23602370

2361-
let environment_blockhash = Hash::new_unique();
2362-
let next_durable_nonce = DurableNonce::from_blockhash(&environment_blockhash);
2363-
let mut future_nonce = NonceInfo::new(*fee_payer_address, fee_payer_account.clone());
2364-
future_nonce
2365-
.try_advance_nonce(next_durable_nonce, lamports_per_signature)
2366-
.unwrap();
2367-
23682371
let tx_details = CheckedTransactionDetails::new(
23692372
Some(future_nonce.clone()),
23702373
compute_budget_and_limits,
@@ -2417,13 +2420,16 @@ mod tests {
24172420
{
24182421
let fee_payer_account = AccountSharedData::new_data(
24192422
transaction_fee + priority_fee, // no min_balance this time
2420-
&nonce::versions::Versions::new(nonce::state::State::Initialized(
2421-
nonce::state::Data::default(),
2422-
)),
2423+
&nonce_versions,
24232424
&system_program::id(),
24242425
)
24252426
.unwrap();
24262427

2428+
let mut future_nonce = NonceInfo::new(*fee_payer_address, fee_payer_account.clone());
2429+
future_nonce
2430+
.try_advance_nonce(next_durable_nonce, lamports_per_signature)
2431+
.unwrap();
2432+
24272433
let mut mock_accounts = HashMap::new();
24282434
mock_accounts.insert(*fee_payer_address, fee_payer_account.clone());
24292435
let mock_bank = MockBankCallback {
@@ -2433,11 +2439,17 @@ mod tests {
24332439
let mut account_loader = (&mock_bank).into();
24342440

24352441
let mut error_counters = TransactionErrorMetrics::default();
2442+
2443+
let tx_details = CheckedTransactionDetails::new(
2444+
Some(future_nonce.clone()),
2445+
compute_budget_and_limits,
2446+
);
2447+
24362448
let result = TransactionBatchProcessor::<TestForkGraph>::validate_transaction_nonce_and_fee_payer(
24372449
&mut account_loader,
24382450
&message,
2439-
CheckedTransactionDetails::new(None, compute_budget_and_limits),
2440-
&Hash::default(),
2451+
tx_details,
2452+
&environment_blockhash,
24412453
&rent,
24422454
&mut error_counters,
24432455
);

0 commit comments

Comments
 (0)