Skip to content

Commit f97a18f

Browse files
committed
apollo_mempool: add validate tx api
1 parent d2786cb commit f97a18f

File tree

4 files changed

+48
-2
lines changed

4 files changed

+48
-2
lines changed

crates/apollo_mempool/src/communication.rs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,12 @@ use apollo_mempool_types::communication::{
1111
MempoolResponse,
1212
};
1313
use apollo_mempool_types::errors::MempoolError;
14-
use apollo_mempool_types::mempool_types::{CommitBlockArgs, MempoolResult, MempoolSnapshot};
14+
use apollo_mempool_types::mempool_types::{
15+
CommitBlockArgs,
16+
MempoolResult,
17+
MempoolSnapshot,
18+
ValidationArgs,
19+
};
1520
use apollo_network_types::network_types::BroadcastedMessageMetadata;
1621
use apollo_time::time::DefaultClock;
1722
use async_trait::async_trait;
@@ -104,6 +109,11 @@ impl MempoolCommunicationWrapper {
104109
Ok(())
105110
}
106111

112+
fn validate_tx(&mut self, args: ValidationArgs) -> MempoolResult<()> {
113+
self.mempool.validate_tx(args)?;
114+
Ok(())
115+
}
116+
107117
fn commit_block(&mut self, args: CommitBlockArgs) -> MempoolResult<()> {
108118
self.mempool.commit_block(args);
109119
Ok(())
@@ -136,6 +146,9 @@ impl ComponentRequestHandler<MempoolRequest, MempoolResponse> for MempoolCommuni
136146
// Update the dynamic config before handling the request.
137147
self.update_dynamic_config().await;
138148
match request {
149+
MempoolRequest::ValidateTransaction(args) => {
150+
MempoolResponse::ValidateTransaction(self.validate_tx(args))
151+
}
139152
MempoolRequest::AddTransaction(args) => {
140153
MempoolResponse::AddTransaction(self.add_tx(args).await)
141154
}

crates/apollo_mempool/src/mempool.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ use apollo_mempool_types::mempool_types::{
1010
MempoolResult,
1111
MempoolSnapshot,
1212
MempoolStateSnapshot,
13+
ValidationArgs,
1314
};
1415
use apollo_time::time::{Clock, DateTime};
1516
use indexmap::IndexSet;
@@ -335,6 +336,12 @@ impl Mempool {
335336
.collect())
336337
}
337338

339+
/// Perform validation of an incoming transaction.
340+
pub fn validate_tx(&mut self, _args: ValidationArgs) -> MempoolResult<()> {
341+
// TODO(Lev): Implement validation of an incoming transaction.
342+
Ok(())
343+
}
344+
338345
/// Adds a new transaction to the mempool.
339346
#[instrument(
340347
skip(self, args),

crates/apollo_mempool_types/src/communication.rs

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ use strum_macros::{AsRefStr, EnumDiscriminants, EnumIter, IntoStaticStr};
2222
use thiserror::Error;
2323

2424
use crate::errors::MempoolError;
25-
use crate::mempool_types::{AddTransactionArgs, CommitBlockArgs, MempoolSnapshot};
25+
use crate::mempool_types::{AddTransactionArgs, CommitBlockArgs, MempoolSnapshot, ValidationArgs};
2626

2727
pub type LocalMempoolClient = LocalComponentClient<MempoolRequest, MempoolResponse>;
2828
pub type RemoteMempoolClient = RemoteComponentClient<MempoolRequest, MempoolResponse>;
@@ -45,6 +45,7 @@ pub trait MempoolClient: Send + Sync {
4545
// TODO(AlonH): Add Option<BroadcastedMessageMetadata> as an argument for add_transaction
4646
// TODO(AlonH): Rename tx to transaction
4747
async fn add_tx(&self, args: AddTransactionArgsWrapper) -> MempoolClientResult<()>;
48+
async fn validate_tx(&self, args: ValidationArgs) -> MempoolClientResult<()>;
4849
async fn commit_block(&self, args: CommitBlockArgs) -> MempoolClientResult<()>;
4950
async fn get_txs(&self, n_txs: usize) -> MempoolClientResult<Vec<InternalRpcTransaction>>;
5051
async fn account_tx_in_pool_or_recent_block(
@@ -63,6 +64,7 @@ pub trait MempoolClient: Send + Sync {
6364
)]
6465
pub enum MempoolRequest {
6566
AddTransaction(AddTransactionArgsWrapper),
67+
ValidateTransaction(ValidationArgs),
6668
CommitBlock(CommitBlockArgs),
6769
GetTransactions(usize),
6870
AccountTxInPoolOrRecentBlock(ContractAddress),
@@ -79,6 +81,7 @@ impl PrioritizedRequest for MempoolRequest {
7981
RequestPriority::High
8082
}
8183
MempoolRequest::AddTransaction(_)
84+
| MempoolRequest::ValidateTransaction(_)
8285
| MempoolRequest::AccountTxInPoolOrRecentBlock(_)
8386
| MempoolRequest::UpdateGasPrice(_)
8487
| MempoolRequest::GetMempoolSnapshot() => RequestPriority::Normal,
@@ -89,6 +92,7 @@ impl PrioritizedRequest for MempoolRequest {
8992
#[derive(Clone, Serialize, Deserialize, AsRefStr)]
9093
pub enum MempoolResponse {
9194
AddTransaction(MempoolResult<()>),
95+
ValidateTransaction(MempoolResult<()>),
9296
CommitBlock(MempoolResult<()>),
9397
GetTransactions(MempoolResult<Vec<InternalRpcTransaction>>),
9498
AccountTxInPoolOrRecentBlock(MempoolResult<bool>),
@@ -121,6 +125,17 @@ where
121125
)
122126
}
123127

128+
async fn validate_tx(&self, args: ValidationArgs) -> MempoolClientResult<()> {
129+
let request = MempoolRequest::ValidateTransaction(args);
130+
handle_all_response_variants!(
131+
MempoolResponse,
132+
ValidateTransaction,
133+
MempoolClientError,
134+
MempoolError,
135+
Direct
136+
)
137+
}
138+
124139
async fn commit_block(&self, args: CommitBlockArgs) -> MempoolClientResult<()> {
125140
let request = MempoolRequest::CommitBlock(args);
126141
handle_all_response_variants!(

crates/apollo_mempool_types/src/mempool_types.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ use serde::{Deserialize, Serialize};
77
use starknet_api::block::GasPrice;
88
use starknet_api::core::{ContractAddress, Nonce};
99
use starknet_api::rpc_transaction::InternalRpcTransaction;
10+
use starknet_api::transaction::fields::Tip;
1011
use starknet_api::transaction::TransactionHash;
1112
use strum::VariantNames;
1213

@@ -39,6 +40,16 @@ impl AddTransactionArgs {
3940
}
4041
}
4142

43+
#[derive(Clone, Debug, Serialize, Deserialize)]
44+
pub struct ValidationArgs {
45+
pub address: ContractAddress,
46+
pub account_nonce: Nonce,
47+
pub tx_hash: TransactionHash,
48+
pub tx_nonce: Nonce,
49+
pub tip: Tip,
50+
pub max_l2_gas_price: GasPrice,
51+
}
52+
4253
#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
4354
pub struct CommitBlockArgs {
4455
pub address_to_nonce: HashMap<ContractAddress, Nonce>,

0 commit comments

Comments
 (0)