Skip to content

Commit 071b268

Browse files
authored
fix(stage): extract execution resources from gateway type (#381)
1 parent d3a91a8 commit 071b268

File tree

9 files changed

+105
-42
lines changed

9 files changed

+105
-42
lines changed

crates/executor/src/implementation/blockifier/mod.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -258,9 +258,10 @@ impl<'a> BlockExecutor<'a> for StarknetVMProcessor<'a> {
258258
Ok(exec_result) => {
259259
match &exec_result {
260260
ExecutionResult::Success { receipt, trace } => {
261-
self.stats.l1_gas_used += receipt.resources_used().gas.l1_gas as u128;
261+
self.stats.l1_gas_used +=
262+
receipt.resources_used().total_gas_consumed.l1_gas as u128;
262263
self.stats.cairo_steps_used +=
263-
receipt.resources_used().computation_resources.n_steps as u128;
264+
receipt.resources_used().vm_resources.n_steps as u128;
264265

265266
if let Some(reason) = receipt.revert_reason() {
266267
info!(target: LOG_TARGET, hash = format!("{hash:#x}"), %reason, "Transaction reverted.");

crates/executor/src/utils.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,11 @@ fn get_receipt_resources(receipt: &TransactionReceipt) -> receipt::ExecutionReso
8787
l1_data_gas: receipt.da_gas.l1_data_gas.0,
8888
};
8989

90-
receipt::ExecutionResources { da_resources, computation_resources, gas }
90+
receipt::ExecutionResources {
91+
data_availability: da_resources,
92+
vm_resources: computation_resources,
93+
total_gas_consumed: gas,
94+
}
9195
}
9296

9397
fn events_from_exec_info(info: &TransactionExecutionInfo) -> Vec<Event> {

crates/executor/tests/executor.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -273,10 +273,10 @@ fn test_executor_with_valid_blocks_impl(
273273
.map(|(tx, res)| {
274274
if let Some(receipt) = res.receipt() {
275275
let resources = receipt.resources_used();
276-
actual_total_gas += resources.gas.l1_gas as u128;
276+
actual_total_gas += resources.total_gas_consumed.l1_gas as u128;
277277
}
278278
if let Some(rec) = res.receipt() {
279-
actual_total_steps += rec.resources_used().computation_resources.n_steps as u128;
279+
actual_total_steps += rec.resources_used().vm_resources.n_steps as u128;
280280
}
281281
tx.clone()
282282
})

crates/gateway/gateway-types/src/conversion.rs

Lines changed: 67 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -264,21 +264,54 @@ impl From<katana_primitives::receipt::Receipt> for ReceiptBody {
264264
Some(ExecutionStatus::Succeeded)
265265
};
266266

267-
let execution_resources = Some(ExecutionResources {
268-
vm_resources: receipt.resources_used().computation_resources.clone(),
269-
data_availability: Some(receipt.resources_used().da_resources.clone()),
270-
total_gas_consumed: Some(receipt.resources_used().gas.clone()),
271-
});
267+
match receipt {
268+
katana_primitives::receipt::Receipt::Invoke(receipt) => {
269+
Self {
270+
execution_resources: Some(receipt.execution_resources.into()),
271+
// This would need to be populated from transaction context
272+
l1_to_l2_consumed_message: None,
273+
l2_to_l1_messages: receipt.messages_sent,
274+
events: receipt.events,
275+
actual_fee: receipt.fee.overall_fee.into(),
276+
execution_status,
277+
revert_error: receipt.revert_error,
278+
}
279+
}
272280

273-
Self {
274-
execution_resources,
275-
l1_to_l2_consumed_message: None, /* This would need to be populated from transaction
276-
* context */
277-
l2_to_l1_messages: receipt.messages_sent().to_vec(),
278-
events: receipt.events().to_vec(),
279-
actual_fee: receipt.fee().overall_fee.into(),
280-
execution_status,
281-
revert_error: receipt.revert_reason().map(|s| s.to_string()),
281+
katana_primitives::receipt::Receipt::Declare(receipt) => Self {
282+
execution_resources: Some(receipt.execution_resources.into()),
283+
// This would need to be populated from transaction context
284+
l1_to_l2_consumed_message: None,
285+
l2_to_l1_messages: receipt.messages_sent,
286+
events: receipt.events,
287+
actual_fee: receipt.fee.overall_fee.into(),
288+
execution_status,
289+
revert_error: receipt.revert_error,
290+
},
291+
292+
katana_primitives::receipt::Receipt::DeployAccount(receipt) => {
293+
Self {
294+
execution_resources: Some(receipt.execution_resources.into()),
295+
// This would need to be populated from transaction context
296+
l1_to_l2_consumed_message: None,
297+
l2_to_l1_messages: receipt.messages_sent,
298+
events: receipt.events,
299+
actual_fee: receipt.fee.overall_fee.into(),
300+
execution_status,
301+
revert_error: receipt.revert_error,
302+
}
303+
}
304+
305+
katana_primitives::receipt::Receipt::L1Handler(receipt) => Self {
306+
execution_resources: Some(receipt.execution_resources.into()),
307+
// This would need to be populated from transaction context
308+
l1_to_l2_consumed_message: None,
309+
l2_to_l1_messages: receipt.messages_sent,
310+
events: receipt.events,
311+
actual_fee: receipt.fee.overall_fee.into(),
312+
execution_status,
313+
revert_error: receipt.revert_error,
314+
},
282315
}
283316
}
284317
}
@@ -340,6 +373,26 @@ impl From<StateDiff> for katana_primitives::state::StateUpdates {
340373
}
341374
}
342375

376+
impl From<katana_primitives::receipt::ExecutionResources> for ExecutionResources {
377+
fn from(value: katana_primitives::receipt::ExecutionResources) -> Self {
378+
Self {
379+
vm_resources: value.vm_resources,
380+
data_availability: Some(value.data_availability),
381+
total_gas_consumed: Some(value.total_gas_consumed),
382+
}
383+
}
384+
}
385+
386+
impl From<ExecutionResources> for katana_primitives::receipt::ExecutionResources {
387+
fn from(value: ExecutionResources) -> Self {
388+
Self {
389+
vm_resources: value.vm_resources,
390+
data_availability: value.data_availability.unwrap_or_default(),
391+
total_gas_consumed: value.total_gas_consumed.unwrap_or_default(),
392+
}
393+
}
394+
}
395+
343396
#[cfg(test)]
344397
mod from_primitives_test {
345398
use katana_primitives::transaction::TxWithHash;

crates/primitives/src/receipt.rs

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -224,9 +224,9 @@ impl ReceiptWithTxHash {
224224
pub fn compute_hash(&self) -> Felt {
225225
let resources_used = self.resources_used();
226226
let gas_uasge = hash::Poseidon::hash_array(&[
227-
resources_used.gas.l2_gas.into(),
228-
resources_used.gas.l1_gas.into(),
229-
resources_used.gas.l1_data_gas.into(),
227+
resources_used.total_gas_consumed.l2_gas.into(),
228+
resources_used.total_gas_consumed.l1_gas.into(),
229+
resources_used.total_gas_consumed.l1_data_gas.into(),
230230
]);
231231

232232
let messages_hash = self.compute_messages_to_l1_hash();
@@ -277,10 +277,10 @@ impl ReceiptWithTxHash {
277277
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
278278
pub struct ExecutionResources {
279279
/// The total gas used by the transaction execution.
280-
pub gas: GasUsed,
280+
pub total_gas_consumed: GasUsed,
281281
/// Computation resources if the transaction is executed on the CairoVM.
282-
pub computation_resources: VmResources,
283-
pub da_resources: DataAvailabilityResources,
282+
pub vm_resources: VmResources,
283+
pub data_availability: DataAvailabilityResources,
284284
}
285285

286286
#[derive(Debug, Default, Clone, PartialEq, Eq)]
@@ -325,6 +325,10 @@ impl<'a> arbitrary::Arbitrary<'a> for ExecutionResources {
325325
let gas = u.arbitrary::<GasUsed>()?;
326326
let da_resources = u.arbitrary::<DataAvailabilityResources>()?;
327327

328-
Ok(Self { da_resources, computation_resources, gas })
328+
Ok(Self {
329+
data_availability: da_resources,
330+
vm_resources: computation_resources,
331+
total_gas_consumed: gas,
332+
})
329333
}
330334
}

crates/rpc/rpc-server/src/starknet/blockifier.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,10 +90,10 @@ pub fn estimate_fees(
9090
overall_fee: fee.overall_fee,
9191
l2_gas_price: fee.l2_gas_price,
9292
l1_gas_price: fee.l1_gas_price,
93-
l2_gas_consumed: resources.gas.l2_gas,
94-
l1_gas_consumed: resources.gas.l1_gas,
93+
l2_gas_consumed: resources.total_gas_consumed.l2_gas,
94+
l1_gas_consumed: resources.total_gas_consumed.l1_gas,
9595
l1_data_gas_price: fee.l1_data_gas_price,
96-
l1_data_gas_consumed: resources.gas.l1_data_gas,
96+
l1_data_gas_consumed: resources.total_gas_consumed.l1_data_gas,
9797
});
9898
}
9999
}

crates/rpc/rpc-types/src/receipt.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -360,9 +360,9 @@ pub struct ExecutionResources {
360360
impl From<receipt::ExecutionResources> for ExecutionResources {
361361
fn from(resources: receipt::ExecutionResources) -> Self {
362362
ExecutionResources {
363-
l2_gas: resources.gas.l2_gas,
364-
l1_gas: resources.gas.l1_gas,
365-
l1_data_gas: resources.gas.l1_data_gas,
363+
l2_gas: resources.total_gas_consumed.l2_gas,
364+
l1_gas: resources.total_gas_consumed.l1_gas,
365+
l1_data_gas: resources.total_gas_consumed.l1_data_gas,
366366
}
367367
}
368368
}
@@ -398,18 +398,18 @@ impl From<ExecutionResources> for receipt::ExecutionResources {
398398
use std::collections::HashMap;
399399

400400
receipt::ExecutionResources {
401-
gas: receipt::GasUsed {
401+
total_gas_consumed: receipt::GasUsed {
402402
l2_gas: resources.l2_gas,
403403
l1_gas: resources.l1_gas,
404404
l1_data_gas: resources.l1_data_gas,
405405
},
406406
// VM resources are not available in RPC types, use defaults
407-
computation_resources: VmResources {
407+
vm_resources: VmResources {
408408
n_steps: 0,
409409
n_memory_holes: 0,
410410
builtin_instance_counter: HashMap::new(),
411411
},
412-
da_resources: receipt::DataAvailabilityResources {
412+
data_availability: receipt::DataAvailabilityResources {
413413
l1_gas: resources.l1_gas,
414414
l1_data_gas: resources.l1_data_gas,
415415
},

crates/rpc/rpc-types/src/trace.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -330,9 +330,9 @@ pub fn to_rpc_fee_estimate(resources: &receipt::ExecutionResources, fee: &FeeInf
330330
l2_gas_price: fee.l2_gas_price,
331331
l1_gas_price: fee.l1_gas_price,
332332
l1_data_gas_price: fee.l1_data_gas_price,
333-
l1_gas_consumed: resources.gas.l1_gas,
334-
l2_gas_consumed: resources.gas.l2_gas,
335-
l1_data_gas_consumed: resources.gas.l1_data_gas,
333+
l1_gas_consumed: resources.total_gas_consumed.l1_gas,
334+
l2_gas_consumed: resources.total_gas_consumed.l2_gas,
335+
l1_data_gas_consumed: resources.total_gas_consumed.l1_data_gas,
336336
}
337337
}
338338

crates/sync/stage/src/blocks/mod.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,7 @@ fn extract_block_data(
198198
let revert_error = receipt.body.revert_error;
199199
let messages_sent = receipt.body.l2_to_l1_messages;
200200
let overall_fee = receipt.body.actual_fee.to_u128().expect("valid u128");
201+
let execution_resources = receipt.body.execution_resources.unwrap_or_default();
201202

202203
let unit = if tx.transaction.version() >= Felt::THREE {
203204
PriceUnit::Fri
@@ -213,30 +214,30 @@ fn extract_block_data(
213214
events,
214215
revert_error,
215216
messages_sent,
216-
execution_resources: Default::default(),
217+
execution_resources: execution_resources.into(),
217218
}),
218219
Tx::Declare(_) => Receipt::Declare(DeclareTxReceipt {
219220
fee,
220221
events,
221222
revert_error,
222223
messages_sent,
223-
execution_resources: Default::default(),
224+
execution_resources: execution_resources.into(),
224225
}),
225226
Tx::L1Handler(_) => Receipt::L1Handler(L1HandlerTxReceipt {
226227
fee,
227228
events,
228229
messages_sent,
229230
revert_error,
230231
message_hash: Default::default(),
231-
execution_resources: Default::default(),
232+
execution_resources: execution_resources.into(),
232233
}),
233234
Tx::DeployAccount(_) => Receipt::DeployAccount(DeployAccountTxReceipt {
234235
fee,
235236
events,
236237
revert_error,
237238
messages_sent,
238239
contract_address: Default::default(),
239-
execution_resources: Default::default(),
240+
execution_resources: execution_resources.into(),
240241
}),
241242
Tx::Deploy(_) => unreachable!("Deploy transactions are not supported"),
242243
}

0 commit comments

Comments
 (0)