Skip to content

Commit

Permalink
feat: add Mempool and its API
Browse files Browse the repository at this point in the history
  • Loading branch information
Gilad Chase committed Apr 18, 2024
1 parent a726c4c commit 5dd5cb6
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 0 deletions.
2 changes: 2 additions & 0 deletions crates/mempool/src/errors.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
#[derive(Debug, Error)]
pub enum MempoolError {}
2 changes: 2 additions & 0 deletions crates/mempool/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,2 +1,4 @@
// TODO: change to pub(crate) once this is used by the (not yet implemented) mempool struct.
pub mod errors;
pub mod mempool;
pub mod priority_queue;
45 changes: 45 additions & 0 deletions crates/mempool/src/mempool.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
use std::collections::HashMap;

use starknet_api::{
core::ContractAddress, internal_transaction::InternalTransaction, transaction::TransactionHash,
};

use crate::errors::MempoolError;

pub type MempoolResult<T> = Result<T, MempoolError>;

pub struct Mempool;

impl Mempool {
/// Retrieves up to `n_txs` transactions with the highest priority from the mempool.
/// Transactions are guaranteed to be unique across calls until `commit_block` is invoked.
// TODO: the last part about commit_block is incorrect if we delete txs in get_txs and then push back.
pub fn get_txs(n_txs: u8) -> MempoolResult<Vec<InternalTransaction>> {
todo!();
}

/// Adds a new transaction to the mempool.
/// TODO: support fee escalation and transactions with future nonces.
pub fn add_tx(
&mut self,
tx: InternalTransaction,
account_state: AccountState,
) -> MempoolResult<()> {
todo!();
}

/// Update the mempool's internal state according to the committed block's transactions.
/// This method also updates internal state (resolves nonce gaps, updates account balances).
// TODO: the part about resolving nonce gaps is incorrect if we delete txs in get_txs and then
// push back.
pub fn commit_block(
&mut self,
block_number: u64,
txs_in_block: &[TransactionHash],
state_changes: HashMap<ContractAddress, AccountState>,
) -> MempoolResult<()> {
todo!()
}
}

pub struct AccountState;

0 comments on commit 5dd5cb6

Please sign in to comment.