Skip to content

Commit 81c828e

Browse files
committed
svm: properly test underfunded nonce fee-payer (#9246)
1 parent a49b7c8 commit 81c828e

1 file changed

Lines changed: 31 additions & 19 deletions

File tree

svm/src/transaction_processor.rs

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

2271+
let nonce_versions = nonce::versions::Versions::new(nonce::state::State::Initialized(
2272+
nonce::state::Data::new(
2273+
*fee_payer_address,
2274+
DurableNonce::default(),
2275+
lamports_per_signature,
2276+
),
2277+
));
2278+
2279+
let environment_blockhash = Hash::new_unique();
2280+
let next_durable_nonce = DurableNonce::from_blockhash(&environment_blockhash);
2281+
22712282
// Sufficient Fees
22722283
{
22732284
let fee_payer_account = AccountSharedData::new_data(
22742285
min_balance + transaction_fee + priority_fee,
2275-
&nonce::versions::Versions::new(nonce::state::State::Initialized(
2276-
nonce::state::Data::new(
2277-
*fee_payer_address,
2278-
DurableNonce::default(),
2279-
lamports_per_signature,
2280-
),
2281-
)),
2286+
&nonce_versions,
22822287
&system_program::id(),
22832288
)
22842289
.unwrap();
22852290

2291+
let mut future_nonce = NonceInfo::new(*fee_payer_address, fee_payer_account.clone());
2292+
future_nonce
2293+
.try_advance_nonce(next_durable_nonce, lamports_per_signature)
2294+
.unwrap();
2295+
22862296
let mut mock_accounts = HashMap::new();
22872297
mock_accounts.insert(*fee_payer_address, fee_payer_account.clone());
22882298
let mut mock_bank = MockBankCallback {
@@ -2295,13 +2305,6 @@ mod tests {
22952305

22962306
let mut error_counters = TransactionErrorMetrics::default();
22972307

2298-
let environment_blockhash = Hash::new_unique();
2299-
let next_durable_nonce = DurableNonce::from_blockhash(&environment_blockhash);
2300-
let mut future_nonce = NonceInfo::new(*fee_payer_address, fee_payer_account.clone());
2301-
future_nonce
2302-
.try_advance_nonce(next_durable_nonce, lamports_per_signature)
2303-
.unwrap();
2304-
23052308
let tx_details = CheckedTransactionDetails::new(
23062309
Some(future_nonce.clone()),
23072310
compute_budget_and_limits,
@@ -2354,13 +2357,16 @@ mod tests {
23542357
{
23552358
let fee_payer_account = AccountSharedData::new_data(
23562359
transaction_fee + priority_fee, // no min_balance this time
2357-
&nonce::versions::Versions::new(nonce::state::State::Initialized(
2358-
nonce::state::Data::default(),
2359-
)),
2360+
&nonce_versions,
23602361
&system_program::id(),
23612362
)
23622363
.unwrap();
23632364

2365+
let mut future_nonce = NonceInfo::new(*fee_payer_address, fee_payer_account.clone());
2366+
future_nonce
2367+
.try_advance_nonce(next_durable_nonce, lamports_per_signature)
2368+
.unwrap();
2369+
23642370
let mut mock_accounts = HashMap::new();
23652371
mock_accounts.insert(*fee_payer_address, fee_payer_account.clone());
23662372
let mock_bank = MockBankCallback {
@@ -2370,11 +2376,17 @@ mod tests {
23702376
let mut account_loader = (&mock_bank).into();
23712377

23722378
let mut error_counters = TransactionErrorMetrics::default();
2379+
2380+
let tx_details = CheckedTransactionDetails::new(
2381+
Some(future_nonce.clone()),
2382+
compute_budget_and_limits,
2383+
);
2384+
23732385
let result = TransactionBatchProcessor::<TestForkGraph>::validate_transaction_nonce_and_fee_payer(
23742386
&mut account_loader,
23752387
&message,
2376-
CheckedTransactionDetails::new(None, compute_budget_and_limits),
2377-
&Hash::default(),
2388+
tx_details,
2389+
&environment_blockhash,
23782390
&rent,
23792391
&mut error_counters,
23802392
);

0 commit comments

Comments
 (0)