Skip to content

Commit 26ec928

Browse files
feat(starknet_gateway): get executable tx from class manager
1 parent 73c53e9 commit 26ec928

File tree

5 files changed

+25
-9
lines changed

5 files changed

+25
-9
lines changed

crates/starknet_class_manager_types/src/transaction_converter.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ pub trait TransactionConverterTrait {
4545
) -> TransactionConverterResult<AccountTransaction>;
4646
}
4747

48+
#[derive(Clone)]
4849
pub struct TransactionConverter {
4950
#[allow(dead_code)]
5051
class_manager_client: SharedClassManagerClient,

crates/starknet_gateway/src/compilation.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ pub struct GatewayCompiler {
2323
pub sierra_to_casm_compiler: Arc<dyn SierraToCasmCompiler>,
2424
}
2525

26+
#[allow(dead_code)]
2627
impl GatewayCompiler {
2728
pub fn new_command_line_compiler(config: SierraCompilationConfig) -> Self {
2829
Self { sierra_to_casm_compiler: Arc::new(CommandLineCompiler::new(config)) }

crates/starknet_gateway/src/gateway.rs

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,10 @@ use papyrus_network_types::network_types::BroadcastedMessageMetadata;
66
use starknet_api::executable_transaction::AccountTransaction;
77
use starknet_api::rpc_transaction::RpcTransaction;
88
use starknet_api::transaction::TransactionHash;
9-
use starknet_class_manager_types::transaction_converter::TransactionConverter;
9+
use starknet_class_manager_types::transaction_converter::{
10+
TransactionConverter,
11+
TransactionConverterTrait,
12+
};
1013
use starknet_class_manager_types::SharedClassManagerClient;
1114
use starknet_gateway_types::errors::GatewaySpecError;
1215
use starknet_mempool_types::communication::{AddTransactionArgsWrapper, SharedMempoolClient};
@@ -23,7 +26,6 @@ use crate::state_reader::StateReaderFactory;
2326
use crate::stateful_transaction_validator::StatefulTransactionValidator;
2427
use crate::stateless_transaction_validator::StatelessTransactionValidator;
2528
use crate::sync_state_reader::SyncStateReaderFactory;
26-
use crate::utils::compile_contract_and_build_executable_tx;
2729

2830
#[cfg(test)]
2931
#[path = "gateway_test.rs"]
@@ -80,7 +82,8 @@ impl Gateway {
8082
.map_err(|join_err| {
8183
error!("Failed to process tx: {}", join_err);
8284
GatewaySpecError::UnexpectedError { data: "Internal server error".to_owned() }
83-
})??;
85+
})?
86+
.await?;
8487

8588
let tx_hash = add_tx_args.tx.tx_hash();
8689

@@ -97,10 +100,13 @@ struct ProcessTxBlockingTask {
97100
stateless_tx_validator: Arc<StatelessTransactionValidator>,
98101
stateful_tx_validator: Arc<StatefulTransactionValidator>,
99102
state_reader_factory: Arc<dyn StateReaderFactory>,
103+
// TODO(noamsp): remove gatewayCompiler
104+
#[allow(dead_code)]
100105
gateway_compiler: Arc<GatewayCompiler>,
101106
mempool_client: SharedMempoolClient,
102107
chain_info: ChainInfo,
103108
tx: RpcTransaction,
109+
transaction_converter: TransactionConverter,
104110
}
105111

106112
impl ProcessTxBlockingTask {
@@ -113,20 +119,25 @@ impl ProcessTxBlockingTask {
113119
mempool_client: gateway.mempool_client.clone(),
114120
chain_info: gateway.chain_info.clone(),
115121
tx,
122+
transaction_converter: gateway.transaction_converter.clone(),
116123
}
117124
}
118125

119-
fn process_tx(self) -> GatewayResult<AddTransactionArgs> {
126+
async fn process_tx(self) -> GatewayResult<AddTransactionArgs> {
120127
// TODO(Arni, 1/5/2024): Perform congestion control.
121128

122129
// Perform stateless validations.
123130
self.stateless_tx_validator.validate(&self.tx)?;
124131

125-
let executable_tx = compile_contract_and_build_executable_tx(
126-
self.tx,
127-
self.gateway_compiler.as_ref(),
128-
&self.chain_info.chain_id,
129-
)?;
132+
// TODO(noamsp): Add error handling.
133+
let internal_tx =
134+
self.transaction_converter.convert_rpc_tx_to_internal_rpc_tx(self.tx).await.unwrap();
135+
136+
let executable_tx = self
137+
.transaction_converter
138+
.convert_internal_rpc_tx_to_executable_tx(internal_tx.clone())
139+
.await
140+
.unwrap();
130141

131142
// Perform post compilation validations.
132143
if let AccountTransaction::Declare(executable_declare_tx) = &executable_tx {
@@ -152,6 +163,7 @@ impl ProcessTxBlockingTask {
152163
)?;
153164

154165
// TODO(Arni): Add the Sierra and the Casm to the mempool input.
166+
// TODO(noamsp): put internal_tx instead of executable_tx
155167
Ok(AddTransactionArgs { tx: executable_tx, account_state: AccountState { address, nonce } })
156168
}
157169
}

crates/starknet_gateway/src/utils.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ use crate::errors::GatewayResult;
1515
/// Converts an RPC transaction to an executable transaction.
1616
/// Note, for declare transaction this step is heavy, as it requires compilation of Sierra to
1717
/// executable contract class.
18+
#[allow(dead_code)]
1819
pub fn compile_contract_and_build_executable_tx(
1920
rpc_tx: RpcTransaction,
2021
gateway_compiler: &GatewayCompiler,

crates/starknet_mempool_types/src/mempool_types.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ impl std::fmt::Display for AccountState {
2121
}
2222
}
2323

24+
// TODO(noamsp): Change tx to InternalRpcTransaction.
2425
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
2526
pub struct AddTransactionArgs {
2627
pub tx: AccountTransaction,

0 commit comments

Comments
 (0)