Skip to content

Commit 9789065

Browse files
committed
extract gateway receipt execution resources correctly
1 parent bbce8c4 commit 9789065

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
@@ -253,21 +253,54 @@ impl From<katana_primitives::receipt::Receipt> for ReceiptBody {
253253
Some(ExecutionStatus::Succeeded)
254254
};
255255

256-
let execution_resources = Some(ExecutionResources {
257-
vm_resources: receipt.resources_used().computation_resources.clone(),
258-
data_availability: Some(receipt.resources_used().da_resources.clone()),
259-
total_gas_consumed: Some(receipt.resources_used().gas.clone()),
260-
});
256+
match receipt {
257+
katana_primitives::receipt::Receipt::Invoke(receipt) => {
258+
Self {
259+
execution_resources: Some(receipt.execution_resources.into()),
260+
// This would need to be populated from transaction context
261+
l1_to_l2_consumed_message: None,
262+
l2_to_l1_messages: receipt.messages_sent,
263+
events: receipt.events,
264+
actual_fee: receipt.fee.overall_fee.into(),
265+
execution_status,
266+
revert_error: receipt.revert_error,
267+
}
268+
}
261269

262-
Self {
263-
execution_resources,
264-
l1_to_l2_consumed_message: None, /* This would need to be populated from transaction
265-
* context */
266-
l2_to_l1_messages: receipt.messages_sent().to_vec(),
267-
events: receipt.events().to_vec(),
268-
actual_fee: receipt.fee().overall_fee.into(),
269-
execution_status,
270-
revert_error: receipt.revert_reason().map(|s| s.to_string()),
270+
katana_primitives::receipt::Receipt::Declare(receipt) => Self {
271+
execution_resources: Some(receipt.execution_resources.into()),
272+
// This would need to be populated from transaction context
273+
l1_to_l2_consumed_message: None,
274+
l2_to_l1_messages: receipt.messages_sent,
275+
events: receipt.events,
276+
actual_fee: receipt.fee.overall_fee.into(),
277+
execution_status,
278+
revert_error: receipt.revert_error,
279+
},
280+
281+
katana_primitives::receipt::Receipt::DeployAccount(receipt) => {
282+
Self {
283+
execution_resources: Some(receipt.execution_resources.into()),
284+
// This would need to be populated from transaction context
285+
l1_to_l2_consumed_message: None,
286+
l2_to_l1_messages: receipt.messages_sent,
287+
events: receipt.events,
288+
actual_fee: receipt.fee.overall_fee.into(),
289+
execution_status,
290+
revert_error: receipt.revert_error,
291+
}
292+
}
293+
294+
katana_primitives::receipt::Receipt::L1Handler(receipt) => Self {
295+
execution_resources: Some(receipt.execution_resources.into()),
296+
// This would need to be populated from transaction context
297+
l1_to_l2_consumed_message: None,
298+
l2_to_l1_messages: receipt.messages_sent,
299+
events: receipt.events,
300+
actual_fee: receipt.fee.overall_fee.into(),
301+
execution_status,
302+
revert_error: receipt.revert_error,
303+
},
271304
}
272305
}
273306
}
@@ -322,6 +355,26 @@ impl From<StateDiff> for katana_primitives::state::StateUpdates {
322355
}
323356
}
324357

358+
impl From<katana_primitives::receipt::ExecutionResources> for ExecutionResources {
359+
fn from(value: katana_primitives::receipt::ExecutionResources) -> Self {
360+
Self {
361+
vm_resources: value.vm_resources,
362+
data_availability: Some(value.data_availability),
363+
total_gas_consumed: Some(value.total_gas_consumed),
364+
}
365+
}
366+
}
367+
368+
impl From<ExecutionResources> for katana_primitives::receipt::ExecutionResources {
369+
fn from(value: ExecutionResources) -> Self {
370+
Self {
371+
vm_resources: value.vm_resources,
372+
data_availability: value.data_availability.unwrap_or_default(),
373+
total_gas_consumed: value.total_gas_consumed.unwrap_or_default(),
374+
}
375+
}
376+
}
377+
325378
#[cfg(test)]
326379
mod from_primitives_test {
327380
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)