Skip to content

Commit ba89792

Browse files
committed
sim-rs: support leios-aggressive-mempool-pruning setting
1 parent 7d98460 commit ba89792

File tree

4 files changed

+25
-0
lines changed

4 files changed

+25
-0
lines changed

data/simulation/config.d.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,10 @@ export interface Config {
5353
* The strategy to use when selecting TXs from the Leios mempool.
5454
*/
5555
"leios-mempool-sampling-strategy": MempoolSamplingStrategy;
56+
/**
57+
* If true, transactions will be removed from the Leios mempool if they conflict with in-flight IBs.
58+
*/
59+
"leios-mempool-aggressive-pruning": boolean;
5660
/**
5761
* Praos blockchain quality parameter.
5862
* This is η from the Leios paper.

data/simulation/config.default.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ leios-vote-send-recv-stages: false
3030
leios-late-ib-inclusion: true
3131
leios-header-diffusion-time-ms: 1000.0
3232
leios-mempool-sampling-strategy: ordered-by-id
33+
leios-mempool-aggressive-pruning: false
3334
# TODO: revise default
3435
praos-chain-quality: 40
3536
praos-fallback-enabled: true

sim-rs/sim-core/src/config.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ pub struct RawParameters {
6868
pub leios_late_ib_inclusion: bool,
6969
pub leios_header_diffusion_time_ms: f64,
7070
pub leios_mempool_sampling_strategy: MempoolSamplingStrategy,
71+
pub leios_mempool_aggressive_pruning: bool,
7172
pub praos_chain_quality: u64,
7273
pub praos_fallback_enabled: bool,
7374

@@ -475,6 +476,7 @@ pub struct SimConfiguration {
475476
pub(crate) header_diffusion_time: Duration,
476477
pub(crate) relay_strategy: RelayStrategy,
477478
pub(crate) mempool_strategy: MempoolSamplingStrategy,
479+
pub(crate) mempool_aggressive_pruning: bool,
478480
pub(crate) praos_chain_quality: u64,
479481
pub(crate) block_generation_probability: f64,
480482
pub(crate) ib_generation_probability: f64,
@@ -520,6 +522,7 @@ impl SimConfiguration {
520522
header_diffusion_time: duration_ms(params.leios_header_diffusion_time_ms),
521523
relay_strategy: params.relay_strategy,
522524
mempool_strategy: params.leios_mempool_sampling_strategy,
525+
mempool_aggressive_pruning: params.leios_mempool_aggressive_pruning,
523526
praos_chain_quality: params.praos_chain_quality,
524527
block_generation_probability: params.rb_generation_probability,
525528
ib_generation_probability: params.ib_generation_probability,

sim-rs/sim-core/src/sim/node.rs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,7 @@ struct SeenTransaction {
155155
#[derive(Default)]
156156
struct NodeLeiosState {
157157
mempool: BTreeMap<TransactionId, SeenTransaction>,
158+
input_ids_from_ibs: HashSet<u64>,
158159
ibs_to_generate: BTreeMap<u64, Vec<InputBlockHeader>>,
159160
ibs: BTreeMap<InputBlockId, InputBlockState>,
160161
ib_requests: BTreeMap<NodeId, PeerInputBlockRequests>,
@@ -1043,6 +1044,13 @@ impl Node {
10431044
}
10441045
self.send_to(*peer, SimulationMessage::AnnounceTx(id))?;
10451046
}
1047+
if self.sim_config.mempool_aggressive_pruning
1048+
&& self.leios.input_ids_from_ibs.contains(&tx.input_id)
1049+
{
1050+
// Ignoring a TX which conflicts with TXs we've seen in input blocks.
1051+
// This only affects the Leios mempool; these TXs should still be able to reach the chain through Praos.
1052+
return Ok(());
1053+
}
10461054
self.leios.mempool.insert(
10471055
tx.id,
10481056
SeenTransaction {
@@ -1205,6 +1213,15 @@ impl Node {
12051213
// Do not include transactions from this IB in any IBs we produce ourselves.
12061214
self.leios.mempool.remove(&transaction.id);
12071215
}
1216+
if self.sim_config.mempool_aggressive_pruning {
1217+
// If we're using aggressive pruning, remove transactions from the mempool if they conflict with transactions in this IB
1218+
self.leios
1219+
.input_ids_from_ibs
1220+
.extend(ib.transactions.iter().map(|tx| tx.input_id));
1221+
self.leios
1222+
.mempool
1223+
.retain(|_, seen| !self.leios.input_ids_from_ibs.contains(&seen.tx.input_id));
1224+
}
12081225
if self
12091226
.leios
12101227
.ibs

0 commit comments

Comments
 (0)