Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
233 commits
Select commit Hold shift + click to select a range
1b1312a
Jito Patch
buffalu Dec 18, 2024
9deb40b
first loop at consumer
May 14, 2025
d35a345
up
May 14, 2025
8cca5ca
Fixes
May 14, 2025
60e5232
More work
May 14, 2025
788e878
More updates
May 14, 2025
174e708
More work
May 14, 2025
85383e7
Clean-up
May 14, 2025
3adf64d
More clean-up
May 14, 2025
80df366
More changes
May 15, 2025
09f6ee5
Fix log
May 15, 2025
608770d
pipe it through
May 15, 2025
abee958
Full piping?
May 15, 2025
2a4c0ea
- import some JSS staples
May 15, 2025
5820eed
unused
May 15, 2025
db31009
Add revert on error flag to work
May 15, 2025
00e954d
Add todo
May 15, 2025
348877e
Extra info shims
May 15, 2025
7716eb9
More work
May 15, 2025
91b8f48
Decouple JSS Connection
May 15, 2025
318d89c
Add JSS Dependencies struct
May 15, 2025
958f5ec
Fix
May 15, 2025
20a01e7
WIP
May 15, 2025
8034195
More work
May 15, 2025
07d3447
More work
May 15, 2025
43d4803
more changes
May 15, 2025
061084c
More work
May 15, 2025
34f7045
Block engine stage filtering
May 15, 2025
8e9835e
fix tpu
May 15, 2025
7028655
fetch stage manager filter
May 15, 2025
20ad181
More work
May 15, 2025
503082f
heavy WIP
May 15, 2025
f512433
fmt
May 15, 2025
42b7f03
up
May 16, 2025
3f6e63b
Add the dummy type
May 16, 2025
bfcaeec
Hook things up
May 16, 2025
66efb3c
Leverage current bufferer
May 16, 2025
eaf25bd
More rough stuff
May 16, 2025
0135804
trashola
May 16, 2025
28343d6
More work
May 16, 2025
6503813
Add pre-lock filter
May 16, 2025
0f180b2
Small updates
May 16, 2025
0086a73
Disable other receive_and_bufferers if jss_enabled=true
May 17, 2025
f67b67a
update
May 17, 2025
df199bb
small updates
May 17, 2025
29d3eeb
Remove
May 17, 2025
dd5f6d2
Remove
May 17, 2025
0562ae5
Something is working
May 17, 2025
c051e75
More work
May 17, 2025
94223d0
- Send leader states
May 17, 2025
68af232
Fixes
May 17, 2025
ac32a7e
Add revert on error tests
May 17, 2025
c4341c5
Add WIP test
May 17, 2025
8b550c0
Up
May 17, 2025
1449e27
No longer using random workers
May 17, 2025
1894a1c
clear dat shi
May 17, 2025
8311000
Add some more comments
May 17, 2025
40130cf
fmt
May 17, 2025
70da45e
account locking
May 21, 2025
a1f73a7
updates
May 22, 2025
0351f2f
more work
May 22, 2025
b035f15
Revert: interface is fixed
May 27, 2025
fe181dc
Fix batch creation
May 27, 2025
0f2be4e
Log some errors
May 27, 2025
0bb5e8a
Add some details
May 27, 2025
fb3cfce
Fix locking
May 27, 2025
aa4d21e
Name changes
May 27, 2025
5301606
Move container cleaning to BufferAndReceive
May 29, 2025
7cbb827
Don't thrash updates
May 29, 2025
657274d
Simplify
May 29, 2025
99b0c7a
Don't send back info if not requested
May 29, 2025
c6bbec8
Remove comment
May 29, 2025
2fa1353
make sure to drain and send back
May 29, 2025
d4a048c
add deadline for receive and buffer
May 29, 2025
e860fd2
- Remove universal send-back
May 29, 2025
248170c
Remove sleeps
May 29, 2025
0772238
Add sleep for one
May 29, 2025
4123a2c
Remove
May 29, 2025
33b0322
rename to Jss Scheduler
May 30, 2025
df9e3e5
Have JSS Scheduler deal with slot boundary
May 30, 2025
8b0736d
fmt
May 30, 2025
5a88622
Big changes
May 30, 2025
edd93e9
Small fixes
May 30, 2025
5701304
Remove collect
May 30, 2025
b6295ad
Fix compilation
May 30, 2025
de36835
fix locking?
May 30, 2025
e80f1a3
Don't wait so long with deadline
May 31, 2025
d1a89a2
Add limit
May 31, 2025
b53c312
Fix locking more?
May 31, 2025
7a734af
1:1 bundle result
May 30, 2025
73de20c
Real locking fix?
Jun 1, 2025
13a91ef
Update hard-coded value
Jun 3, 2025
8c9ef76
Fix bundle ordering
Jun 3, 2025
1a67cfe
Enable/disable scheduling depending on which scheduler you're in
Jun 3, 2025
805934d
Fix format
Jun 3, 2025
7c6569e
Another fix
Jun 3, 2025
61adb4f
Don't panic
Jun 3, 2025
42ea712
More don't panic
Jun 3, 2025
93f961c
Prevent eternal locking
Jun 3, 2025
c9704a0
Change order or slot boundary
Jun 3, 2025
2880e41
Some changes
Jun 3, 2025
c0e3e51
Update QoS on lock error
Jun 3, 2025
9366fa1
- Improve dumb worker selection
Jun 3, 2025
5ceca4b
Refresh builder config in the background
Jun 3, 2025
a416bd4
- jss_connection refactoring
Jun 3, 2025
8533f7f
Refactor bundle result (in preparation)
Jun 4, 2025
263b121
fmt
Jun 4, 2025
629c639
Prep for fail reasons
Jun 4, 2025
586e0fa
Use enum instead of string
Jun 4, 2025
9c004b3
cleaner code for revert_on_error
Jun 4, 2025
594098a
Send transaction not commit reasons
Jun 5, 2025
3a0247d
Remove some logs
Jun 6, 2025
8f5d744
Update metrics
Jun 6, 2025
3ce757d
- Create non-conflicting batches for every batch (not just revert on …
Jun 6, 2025
73dd2e5
small
Jun 6, 2025
41161a1
Even smaller?
Jun 6, 2025
9ab85bf
remove
Jun 6, 2025
ba96272
refactor in prep
Jun 6, 2025
69e9c9a
- decouple consumer batch from single bundle/txn
Jun 6, 2025
61cc95c
fmt
Jun 6, 2025
21f0fcb
More refactor
Jun 6, 2025
e4fdcc6
- Schedule individual txns as batch
Jun 6, 2025
e0281cf
Fix scheduling
Jun 6, 2025
d2c333b
Bubble up deserialization error
Jun 6, 2025
7b4bc51
- Custom validation logic for bundles
Jun 9, 2025
d2f0b18
- Remove log
Jun 9, 2025
943ce3f
Add protos
Jun 10, 2025
7e52a7e
Update accounts.rs
dgski Jun 10, 2025
8ee7134
fix bench
Jun 10, 2025
639dfde
fmt
Jun 10, 2025
f4b89cc
clippy fixes
Jun 10, 2025
e2507c2
fmt
Jun 10, 2025
b58a66c
Some PR comments addressed
Jun 10, 2025
c05232f
More PR comments
Jun 10, 2025
79300d1
Change to 24
Jun 10, 2025
f119d5d
- Address some PR comments
Jun 10, 2025
34272ce
Fix compilation
Jun 10, 2025
8c2605c
fmt
Jun 10, 2025
a6597fb
Small change
Jun 11, 2025
c1beba9
fmt
Jun 11, 2025
b537b8a
small changes
Jun 11, 2025
c33df4b
Fix?
Jun 11, 2025
f7eed81
Move to top
Jun 11, 2025
73b8d26
- Mirror checks via comments
Jun 11, 2025
f47a72d
WIP tests
Jun 11, 2025
44e415a
Add tests to jss_receive_and_buffer + refactor
Jun 11, 2025
2dae8fd
WIP jss_scheduler tests
Jun 12, 2025
d447d5d
Finish jss_scheduler test
Jun 12, 2025
5b77182
Add work count checks
Jun 12, 2025
b1d0b63
Pr comment
Jun 12, 2025
95b07da
pr comment
Jun 12, 2025
237679a
- Log stream error
Jun 12, 2025
360fde3
- Prevent duplicate transactions
Jun 13, 2025
fdac58c
Add slot protection
Jun 16, 2025
ede3b30
small update
Jun 17, 2025
d2e0b23
Make sure to unblock
Jun 17, 2025
a08f2fa
Update core/src/banking_stage/consumer.rs
dgski Jun 18, 2025
9db9d10
bump
Jun 18, 2025
f85d6be
update protos
Jun 18, 2025
299e880
Update
Jun 18, 2025
949c0d8
drain channel
Jun 18, 2025
30e3f5d
Change to 100ms
Jun 18, 2025
3c38396
Update
Jun 18, 2025
2e5d849
fix
Jun 18, 2025
a52d635
No tip processing for vote threads
Jun 19, 2025
b5815e3
No need for jss_enabled in receive_and_buffer
Jun 21, 2025
0e8b5fe
fmt
Jun 21, 2025
b6b4b26
Comments
Jun 21, 2025
52ac7b3
Small tweaks
Jun 21, 2025
08b5e93
exit from first error when parsing bundle
Jun 21, 2025
c3ddf92
Remove un-needed check
Jun 21, 2025
2fb446c
Reusable buffer for hash duplicate check
Jun 21, 2025
cb493e7
- boost threads
Jun 21, 2025
55ac0cb
- Use SmallVec for transaction batches
Jun 21, 2025
3eac28e
Fix test
Jun 21, 2025
fae36c0
add datapoint error
Jun 21, 2025
0e2da26
Re-usable hashsets for conflicting batch creation
Jun 21, 2025
9541d62
Fix account locking batch
Jun 21, 2025
21a58a4
Fix tests
Jun 21, 2025
e954400
- Start with jss_enabled=true
Jun 21, 2025
888c968
- validate JSS url
Jun 21, 2025
da70299
Prevent even more allocations
Jun 21, 2025
554ad9e
All memory re-used in jss_scheduler
Jun 21, 2025
e2a7a75
Use versioned messages
Jun 21, 2025
a145c62
The great renaming (part 1)
Jun 21, 2025
37105b0
Fix tests
Jun 21, 2025
386028c
Use new names
Jun 21, 2025
74fe44c
fmt
Jun 21, 2025
b6b3601
Update core/src/bam_manager.rs
dgski Jun 24, 2025
077333d
Initial simplified version
Jun 24, 2025
f1fa872
fmt
Jun 24, 2025
a32b3b3
Add actual transaction submission
Jun 24, 2025
6844c86
Add some logs
Jun 24, 2025
9632bab
fmt
Jun 24, 2025
87cdf13
More work
Jun 25, 2025
444b3d7
Fix conditional
Jun 25, 2025
d823b08
Improve
Jun 25, 2025
f488170
Add logs
Jun 25, 2025
5abd612
Add prio-fees
Jun 25, 2025
e379f44
Update core/src/bam_payment.rs
dgski Jun 25, 2025
3c454e3
Use different way to get current slot
Jun 25, 2025
88d5103
revert
Jun 25, 2025
eaf605e
Add error log
Jun 25, 2025
56d7d9b
Fix
Jun 25, 2025
6811efe
Create batching
Jun 25, 2025
b57533c
Update
Jun 25, 2025
4a5a813
fmt
Jun 25, 2025
0872376
Remove newline
Jun 25, 2025
8491a35
Update
Jun 25, 2025
ba0d561
Better dedup
Jun 25, 2025
962df19
Add another log
Jun 25, 2025
c0b4386
More changes
Jun 25, 2025
c74d1c9
Log signature
Jun 25, 2025
07e5c31
Log signature
Jun 25, 2025
00de635
refactor
Jun 25, 2025
7da974f
Small fixes
Jun 25, 2025
506abf1
Merge pull request #67 from jito-labs/dg/v2.2_jss_minimal_fee_collect…
dgski Jun 25, 2025
7eb1168
Use new protos
Jun 25, 2025
dc02e1f
enforce comission
Jun 25, 2025
788f0a6
small fix
Jun 25, 2025
0e6977d
Merge pull request #69 from jito-labs/dg/v2.2_protoupdate
dgski Jun 25, 2025
cb8a7df
Merge branch 'v2.2' into dg/v2.2_jss_minimal
Jul 14, 2025
5999d9e
merge fix
Jul 14, 2025
33e28bd
delete tip-distributor
Jul 14, 2025
c046e8c
Remove dup + fmt
Jul 16, 2025
c101244
Remove print
Jul 24, 2025
597665b
Cargo.lock
Jul 24, 2025
e3a5d16
linter
Jul 24, 2025
2dc3203
small changes
Jul 24, 2025
7a9cf4b
Revert name change
Jul 25, 2025
f708334
Update to bam-protos
Jul 25, 2025
d224288
Fix url
Jul 25, 2025
2cdc601
Update ordering
Jul 25, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -90,4 +90,4 @@ jobs:
# title: 'Bump version to ${{ steps.parse_info.outputs.next_version }}',
# head: 'version-bump-${{ steps.parse_info.outputs.next_version }}',
# base: '${{ steps.parse_info.outputs.target_branch }}'
# })
# })
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,6 @@
[submodule "jito-protos/protos"]
path = jito-protos/protos
url = https://github.com/jito-labs/mev-protos.git
[submodule "jito-protos/bam-protos"]
path = jito-protos/bam-protos
url = git@github.com:jito-labs/bam-protos.git
1 change: 1 addition & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion accounts-db/benches/bench_lock_accounts.rs
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ fn bench_entry_lock_accounts(c: &mut Criterion) {
for batch in &transaction_batches {
let results =
accounts.lock_accounts(black_box(batch.iter()), MAX_TX_ACCOUNT_LOCKS);
accounts.unlock_accounts(batch.iter().zip(&results));
accounts.unlock_accounts(batch.iter().zip(&results), false);
}
})
});
Expand Down
198 changes: 191 additions & 7 deletions accounts-db/src/accounts.rs
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,9 @@ use {
},
solana_transaction_context::TransactionAccount,
std::{
cell::RefCell,
cmp::Reverse,
collections::{BinaryHeap, HashSet},
collections::{BinaryHeap, HashMap, HashSet},
ops::RangeBounds,
sync::{
atomic::{AtomicUsize, Ordering},
Expand All @@ -35,6 +36,11 @@ use {
},
};

thread_local! {
/// Reusable deduped locks for batched account locking.
static REUSABLE_DEDUPED_LOCKS: RefCell<HashMap<Pubkey, bool>> = RefCell::new(HashMap::new());
}

pub type PubkeyAccountSlot = (Pubkey, AccountSharedData, Slot);

pub struct TransactionAccountLocksIterator<'a, T: SVMMessage> {
Expand Down Expand Up @@ -570,7 +576,7 @@ impl Accounts {
.map(|_| TransactionAccountLocksIterator::new(tx))
})
.collect();
self.lock_accounts_inner(tx_account_locks_results, None, None)
self.lock_accounts_inner(tx_account_locks_results, None, None, false)
}

#[must_use]
Expand All @@ -581,6 +587,7 @@ impl Accounts {
tx_account_lock_limit: usize,
additional_read_locks: Option<&HashSet<Pubkey>>,
additional_write_locks: Option<&HashSet<Pubkey>>,
batched: bool,
) -> Vec<Result<()>> {
// Validate the account locks, then get iterator if successful validation.
let tx_account_locks_results: Vec<Result<_>> = txs
Expand All @@ -595,6 +602,7 @@ impl Accounts {
tx_account_locks_results,
additional_read_locks,
additional_write_locks,
batched,
)
}

Expand All @@ -604,7 +612,15 @@ impl Accounts {
tx_account_locks_results: Vec<Result<TransactionAccountLocksIterator<impl SVMMessage>>>,
additional_read_locks: Option<&HashSet<Pubkey>>,
additional_write_locks: Option<&HashSet<Pubkey>>,
batched: bool,
) -> Vec<Result<()>> {
if batched {
return self.lock_accounts_batched(
tx_account_locks_results,
additional_read_locks,
additional_write_locks,
);
}
let account_locks = &mut self.account_locks.lock().unwrap();
tx_account_locks_results
.into_iter()
Expand All @@ -619,15 +635,97 @@ impl Accounts {
.collect()
}

/// Lock accounts in batches, deduplicating locks across transactions.
/// Returns a vec with all transaction locks associated with the
/// first transaction result, and `Ok(())` for all other transactions (If successful).
fn lock_accounts_batched(
&self,
tx_account_locks_results: Vec<Result<TransactionAccountLocksIterator<impl SVMMessage>>>,
additional_read_locks: Option<&HashSet<Pubkey>>,
additional_write_locks: Option<&HashSet<Pubkey>>,
) -> Vec<Result<()>> {
if let Some(err) = tx_account_locks_results.iter().find_map(|res| {
if let Err(err) = res {
Some(err.clone())
} else {
None
}
}) {
return tx_account_locks_results
.into_iter()
.map(|_| Err(err.clone()))
.collect();
}

let len = tx_account_locks_results.len();
let result = REUSABLE_DEDUPED_LOCKS.with_borrow_mut(|deduped_locks| {
deduped_locks.clear();
Self::get_deduped_batch_locks(
deduped_locks,
tx_account_locks_results.into_iter().map(|res| res.unwrap()),
);
let account_locks = &mut self.account_locks.lock().unwrap();
account_locks.try_lock_accounts(
deduped_locks
.iter()
.map(|(pubkey, is_writable)| (pubkey, *is_writable)),
additional_read_locks,
additional_write_locks,
)
});

(0..len).map(|_| result.clone()).collect()
}

/// Deduplicate the locks across all transactions in a batch; promoting read-only locks to writable
/// if a writable lock exists for the same pubkey.
fn get_deduped_batch_locks<'a>(
deduped_locks: &mut HashMap<Pubkey, bool>,
tx_account_locks: impl Iterator<
Item = TransactionAccountLocksIterator<'a, impl SVMMessage + 'a>,
>,
) {
for tx_account_locks in tx_account_locks {
for (pubkey, is_writable) in tx_account_locks.accounts_with_is_writable() {
if let Some(existing) = deduped_locks.get(pubkey) {
if *existing && !is_writable {
continue;
}
}
deduped_locks.insert(*pubkey, is_writable);
}
}
}

/// Once accounts are unlocked, new transactions that modify that state can enter the pipeline
pub fn unlock_accounts<'a, Tx: SVMMessage + 'a>(
&self,
txs_and_results: impl Iterator<Item = (&'a Tx, &'a Result<()>)> + Clone,
batched: bool,
) {
if !txs_and_results.clone().any(|(_, res)| res.is_ok()) {
return;
}

if batched {
REUSABLE_DEDUPED_LOCKS.with_borrow_mut(|deduped_locks| {
deduped_locks.clear();
Self::get_deduped_batch_locks(
deduped_locks,
txs_and_results
.clone()
.map(|(tx, _)| TransactionAccountLocksIterator::new(tx)),
);
let mut account_locks = self.account_locks.lock().unwrap();
account_locks.unlock_accounts(
deduped_locks
.iter()
.map(|(pubkey, is_writable)| (pubkey, *is_writable)),
);
});
return;
}

let mut account_locks = self.account_locks.lock().unwrap();
debug!("bank unlock accounts");
for (tx, res) in txs_and_results {
Expand Down Expand Up @@ -991,7 +1089,7 @@ mod tests {
let txs = vec![new_sanitized_tx(&[&keypair], message, Hash::default())];
let results = accounts.lock_accounts(txs.iter(), MAX_TX_ACCOUNT_LOCKS);
assert_eq!(results, vec![Ok(())]);
accounts.unlock_accounts(txs.iter().zip(&results));
accounts.unlock_accounts(txs.iter().zip(&results), false);
}

// Disallow over MAX_TX_ACCOUNT_LOCKS
Expand Down Expand Up @@ -1089,8 +1187,8 @@ mod tests {
.unwrap()
.is_locked_readonly(&keypair1.pubkey()));

accounts.unlock_accounts(iter::once(&tx).zip(&results0));
accounts.unlock_accounts(txs.iter().zip(&results1));
accounts.unlock_accounts(iter::once(&tx).zip(&results0), false);
accounts.unlock_accounts(txs.iter().zip(&results1), false);
let instructions = vec![CompiledInstruction::new(2, &(), vec![0, 1])];
let message = Message::new_with_compiled_instructions(
1,
Expand Down Expand Up @@ -1171,7 +1269,7 @@ mod tests {
counter_clone.clone().fetch_add(1, Ordering::Release);
}
}
accounts_clone.unlock_accounts(txs.iter().zip(&results));
accounts_clone.unlock_accounts(txs.iter().zip(&results), false);
if exit_clone.clone().load(Ordering::Relaxed) {
break;
}
Expand All @@ -1187,7 +1285,7 @@ mod tests {
thread::sleep(time::Duration::from_millis(50));
assert_eq!(counter_value, counter_clone.clone().load(Ordering::Acquire));
}
accounts_arc.unlock_accounts(txs.iter().zip(&results));
accounts_arc.unlock_accounts(txs.iter().zip(&results), false);
thread::sleep(time::Duration::from_millis(50));
}
exit.store(true, Ordering::Relaxed);
Expand Down Expand Up @@ -1321,6 +1419,7 @@ mod tests {
MAX_TX_ACCOUNT_LOCKS,
None,
None,
false,
);

assert_eq!(
Expand Down Expand Up @@ -1638,4 +1737,89 @@ mod tests {
));
}
}

#[test]
fn test_batched_locking() {
let keypair0 = Keypair::new();
let keypair1 = Keypair::new();
let keypair2 = Keypair::new();
let keypair3 = Keypair::new();

let account0 = AccountSharedData::new(1, 0, &Pubkey::default());
let account1 = AccountSharedData::new(2, 0, &Pubkey::default());
let account2 = AccountSharedData::new(3, 0, &Pubkey::default());
let account3 = AccountSharedData::new(4, 0, &Pubkey::default());

let accounts_db = AccountsDb::new_single_for_tests();
let accounts = Accounts::new(Arc::new(accounts_db));
accounts.store_for_tests(0, &keypair0.pubkey(), &account0);
accounts.store_for_tests(0, &keypair1.pubkey(), &account1);
accounts.store_for_tests(0, &keypair2.pubkey(), &account2);
accounts.store_for_tests(0, &keypair3.pubkey(), &account3);

let instructions = vec![CompiledInstruction::new(2, &(), vec![0, 1])];
let message = Message::new_with_compiled_instructions(
1,
0,
2,
vec![keypair1.pubkey(), keypair0.pubkey(), native_loader::id()],
Hash::default(),
instructions,
);
let tx0 = new_sanitized_tx(&[&keypair1], message, Hash::default());
let instructions = vec![CompiledInstruction::new(2, &(), vec![0, 1])];
let message = Message::new_with_compiled_instructions(
1,
0,
2,
vec![keypair2.pubkey(), keypair0.pubkey(), native_loader::id()],
Hash::default(),
instructions,
);
let tx1 = new_sanitized_tx(&[&keypair2], message, Hash::default());
let instructions = vec![CompiledInstruction::new(2, &(), vec![0, 1])];
let message = Message::new_with_compiled_instructions(
1,
0,
2,
vec![keypair3.pubkey(), keypair0.pubkey(), native_loader::id()],
Hash::default(),
instructions,
);
let tx2 = new_sanitized_tx(&[&keypair3], message, Hash::default());
let txs = vec![tx0, tx1, tx2];

let qos_results = vec![Ok(()), Ok(()), Ok(())];

let results = accounts.lock_accounts_with_results(
txs.iter(),
qos_results.into_iter(),
MAX_TX_ACCOUNT_LOCKS,
None,
None,
true,
);

assert_eq!(
results,
vec![
Ok(()), // Read-only account (keypair0) can be referenced multiple times
Ok(()), // Read-only account (keypair0) can be referenced multiple times
Ok(()), // Read-only account (keypair0) can be referenced multiple times
],
);

// verify that keypair0 read-only locked
assert!(accounts
.account_locks
.lock()
.unwrap()
.is_locked_readonly(&keypair0.pubkey()));
// verify that keypair2 (for tx1) is write-locked (2 txns referencing it)
assert!(accounts
.account_locks
.lock()
.unwrap()
.is_locked_write(&keypair2.pubkey()));
}
}
2 changes: 2 additions & 0 deletions banking-bench/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -507,6 +507,8 @@ fn main() {
HashSet::default(),
BundleAccountLocker::default(),
|_| 0,
None,
None,
);

// This is so that the signal_receiver does not go out of scope after the closure.
Expand Down
2 changes: 2 additions & 0 deletions core/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ serde = { workspace = true }
serde_bytes = { workspace = true }
serde_derive = { workspace = true }
slab = { workspace = true }
smallvec = { workspace = true }
solana-accounts-db = { workspace = true }
solana-bloom = { workspace = true }
solana-builtins-default-costs = { workspace = true }
Expand Down Expand Up @@ -132,6 +133,7 @@ solana-version = { workspace = true }
solana-vote = { workspace = true }
solana-vote-program = { workspace = true }
solana-wen-restart = { workspace = true }
spl-memo = { workspace = true, features = ["no-entrypoint"] }
strum = { workspace = true, features = ["derive"] }
strum_macros = { workspace = true }
sys-info = { workspace = true }
Expand Down
2 changes: 2 additions & 0 deletions core/benches/banking_stage.rs
Original file line number Diff line number Diff line change
Expand Up @@ -339,6 +339,8 @@ fn bench_banking(
HashSet::default(),
BundleAccountLocker::default(),
|_| 0,
None,
None,
);

let chunk_len = verified.len() / CHUNKS;
Expand Down
1 change: 1 addition & 0 deletions core/benches/consumer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -177,6 +177,7 @@ fn bench_process_and_record_transactions(bencher: &mut Bencher, batch_size: usiz
transaction_iter.next().unwrap(),
0,
&|_| 0,
false,
);
assert!(summary
.execute_and_commit_transactions_output
Expand Down
Loading
Loading