Skip to content

Commit

Permalink
feat(mempool): impl mempool state
Browse files Browse the repository at this point in the history
  • Loading branch information
MohammadNassar1 committed Jul 23, 2024
1 parent 177aaf0 commit c67cc0a
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 1 deletion.
17 changes: 17 additions & 0 deletions crates/mempool/src/mempool.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ pub struct Mempool {
tx_pool: TransactionPool,
// Transactions eligible for sequencing.
tx_queue: TransactionQueue,
// Represents the current state of the mempool during block creation.
mempool_state: HashMap<ContractAddress, AccountState>,
}

impl Mempool {
Expand Down Expand Up @@ -55,13 +57,19 @@ impl Mempool {
eligible_txs.push(tx);
}

// Update the mempool state with the new nonces.
for tx in &eligible_txs {
self.mempool_state.entry(tx.sender_address).or_default().nonce = tx.nonce;
}

Ok(eligible_txs)
}

/// Adds a new transaction to the mempool.
/// TODO: support fee escalation and transactions with future nonces.
/// TODO: check Account nonce and balance.
pub fn add_tx(&mut self, input: MempoolInput) -> MempoolResult<()> {
self.is_duplicated_tx(&input.tx)?;
self.insert_tx(input)
}

Expand Down Expand Up @@ -108,6 +116,15 @@ impl Mempool {
Ok(())
}

fn is_duplicated_tx(&self, tx: &ThinTransaction) -> MempoolResult<()> {
if let Some(AccountState { nonce }) = self.mempool_state.get(&tx.sender_address) {
if nonce >= &tx.nonce {
return Err(MempoolError::DuplicateTransaction { tx_hash: tx.tx_hash });
}
}
Ok(())
}

#[cfg(test)]
pub(crate) fn _tx_pool(&self) -> &TransactionPool {
&self.tx_pool
Expand Down
2 changes: 1 addition & 1 deletion crates/mempool/src/mempool_test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ impl MempoolState {
impl From<MempoolState> for Mempool {
fn from(mempool_state: MempoolState) -> Mempool {
let MempoolState { tx_pool, tx_queue } = mempool_state;
Mempool { tx_pool, tx_queue }
Mempool { tx_pool, tx_queue, ..Default::default() }
}
}

Expand Down

0 comments on commit c67cc0a

Please sign in to comment.