Skip to content

Commit 8f3af62

Browse files
noamsp-starkwareShahakShama
authored andcommitted
feat(starknet_mempool): handle declare tx properly
1 parent f82e6bd commit 8f3af62

File tree

4 files changed

+31
-37
lines changed

4 files changed

+31
-37
lines changed

crates/starknet_gateway/src/gateway_test.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,13 @@ use papyrus_network_types::network_types::BroadcastedMessageMetadata;
99
use papyrus_test_utils::{get_rng, GetTestInstance};
1010
use rstest::{fixture, rstest};
1111
use starknet_api::core::{ChainId, CompiledClassHash, ContractAddress, Nonce};
12-
use starknet_api::executable_transaction::{AccountTransaction, InvokeTransaction};
1312
use starknet_api::rpc_transaction::{
1413
InternalRpcTransaction,
1514
InternalRpcTransactionWithoutTxHash,
1615
RpcDeclareTransaction,
1716
RpcTransaction,
1817
};
1918
use starknet_api::transaction::{InvokeTransaction, TransactionHash, TransactionVersion};
20-
use starknet_class_manager_types::test_utils::MemoryClassManagerClient;
2119
use starknet_class_manager_types::transaction_converter::TransactionConverter;
2220
use starknet_class_manager_types::{EmptyClassManagerClient, SharedClassManagerClient};
2321
use starknet_gateway_types::errors::GatewaySpecError;

crates/starknet_mempool/src/communication.rs

Lines changed: 10 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,7 @@
11
use async_trait::async_trait;
22
use papyrus_network_types::network_types::BroadcastedMessageMetadata;
33
use starknet_api::core::ContractAddress;
4-
use starknet_api::executable_transaction::AccountTransaction;
5-
use starknet_api::rpc_transaction::{
6-
RpcDeployAccountTransaction,
7-
RpcInvokeTransaction,
8-
RpcTransaction,
9-
};
4+
use starknet_api::rpc_transaction::InternalRpcTransaction;
105
use starknet_mempool_p2p_types::communication::SharedMempoolP2pPropagatorClient;
116
use starknet_mempool_types::communication::{
127
AddTransactionArgsWrapper,
@@ -47,33 +42,20 @@ impl MempoolCommunicationWrapper {
4742
async fn send_tx_to_p2p(
4843
&self,
4944
message_metadata: Option<BroadcastedMessageMetadata>,
50-
tx: AccountTransaction,
45+
tx: InternalRpcTransaction,
5146
) -> MempoolResult<()> {
5247
match message_metadata {
5348
Some(message_metadata) => self
5449
.mempool_p2p_propagator_client
5550
.continue_propagation(message_metadata)
5651
.await
57-
.map_err(|_| MempoolError::P2pPropagatorClientError { tx_hash: tx.tx_hash() }),
52+
.map_err(|_| MempoolError::P2pPropagatorClientError { tx_hash: tx.tx_hash }),
5853
None => {
59-
let tx_hash = tx.tx_hash();
60-
match tx {
61-
AccountTransaction::Invoke(invoke_tx) => self
62-
.mempool_p2p_propagator_client
63-
.add_transaction(RpcTransaction::Invoke(RpcInvokeTransaction::V3(
64-
invoke_tx.into(),
65-
)))
66-
.await
67-
.map_err(|_| MempoolError::P2pPropagatorClientError { tx_hash })?,
68-
AccountTransaction::DeployAccount(deploy_account_tx) => self
69-
.mempool_p2p_propagator_client
70-
.add_transaction(RpcTransaction::DeployAccount(
71-
RpcDeployAccountTransaction::V3(deploy_account_tx.into()),
72-
))
73-
.await
74-
.map_err(|_| MempoolError::P2pPropagatorClientError { tx_hash })?,
75-
AccountTransaction::Declare(_) => {}
76-
}
54+
let tx_hash = tx.tx_hash;
55+
self.mempool_p2p_propagator_client
56+
.add_transaction(tx)
57+
.await
58+
.map_err(|_| MempoolError::P2pPropagatorClientError { tx_hash })?;
7759
Ok(())
7860
}
7961
}
@@ -85,18 +67,14 @@ impl MempoolCommunicationWrapper {
8567
) -> MempoolResult<()> {
8668
self.mempool.add_tx(args_wrapper.args.clone())?;
8769
// TODO(AlonH): Verify that only transactions that were added to the mempool are sent.
88-
// TODO(AlonH): handle declare correctly and remove this match.
89-
match args_wrapper.args.tx {
90-
AccountTransaction::Declare(_) => Ok(()),
91-
_ => self.send_tx_to_p2p(args_wrapper.p2p_message_metadata, args_wrapper.args.tx).await,
92-
}
70+
self.send_tx_to_p2p(args_wrapper.p2p_message_metadata, args_wrapper.args.tx).await
9371
}
9472

9573
fn commit_block(&mut self, args: CommitBlockArgs) -> MempoolResult<()> {
9674
self.mempool.commit_block(args)
9775
}
9876

99-
fn get_txs(&mut self, n_txs: usize) -> MempoolResult<Vec<AccountTransaction>> {
77+
fn get_txs(&mut self, n_txs: usize) -> MempoolResult<Vec<InternalRpcTransaction>> {
10078
self.mempool.get_txs(n_txs)
10179
}
10280

crates/starknet_mempool_p2p/src/propagator/mod.rs

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,10 @@ mod test;
44
use async_trait::async_trait;
55
use papyrus_network::network_manager::{BroadcastTopicClient, BroadcastTopicClientTrait};
66
use papyrus_protobuf::mempool::RpcTransactionWrapper;
7-
use starknet_class_manager_types::transaction_converter::TransactionConverter;
7+
use starknet_class_manager_types::transaction_converter::{
8+
TransactionConverter,
9+
TransactionConverterTrait,
10+
};
811
use starknet_mempool_p2p_types::communication::{
912
MempoolP2pPropagatorRequest,
1013
MempoolP2pPropagatorResponse,
@@ -16,15 +19,15 @@ use tracing::warn;
1619

1720
pub struct MempoolP2pPropagator {
1821
broadcast_topic_client: BroadcastTopicClient<RpcTransactionWrapper>,
19-
_transaction_converter: TransactionConverter,
22+
transaction_converter: TransactionConverter,
2023
}
2124

2225
impl MempoolP2pPropagator {
2326
pub fn new(
2427
broadcast_topic_client: BroadcastTopicClient<RpcTransactionWrapper>,
2528
transaction_converter: TransactionConverter,
2629
) -> Self {
27-
Self { broadcast_topic_client, _transaction_converter: transaction_converter }
30+
Self { broadcast_topic_client, transaction_converter }
2831
}
2932
}
3033

@@ -38,6 +41,19 @@ impl ComponentRequestHandler<MempoolP2pPropagatorRequest, MempoolP2pPropagatorRe
3841
) -> MempoolP2pPropagatorResponse {
3942
match request {
4043
MempoolP2pPropagatorRequest::AddTransaction(transaction) => {
44+
let transaction = match self
45+
.transaction_converter
46+
.convert_internal_rpc_tx_to_rpc_tx(transaction)
47+
.await
48+
{
49+
Ok(transaction) => transaction,
50+
Err(err) => {
51+
return MempoolP2pPropagatorResponse::AddTransaction(Err(
52+
MempoolP2pPropagatorError::TransactionConversionError(err.to_string()),
53+
));
54+
}
55+
};
56+
4157
let result = self
4258
.broadcast_topic_client
4359
.broadcast_message(RpcTransactionWrapper(transaction))

crates/starknet_mempool_p2p_types/src/errors.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,6 @@ use thiserror::Error;
55
pub enum MempoolP2pPropagatorError {
66
#[error("Sender request error")]
77
NetworkSendError,
8+
#[error("Transaction conversion error: {0}")]
9+
TransactionConversionError(String),
810
}

0 commit comments

Comments
 (0)