|
1 | 1 | use std::collections::HashMap;
|
2 | 2 |
|
3 | 3 | use blockifier::execution::syscalls::SyscallSelector;
|
| 4 | +use blockifier::transaction::transaction_types::TransactionType; |
4 | 5 | use cairo_vm::vm::runners::cairo_runner::ExecutionResources;
|
| 6 | +use starknet_api::transaction::TransactionHash; |
5 | 7 |
|
6 | 8 | #[derive(Debug, thiserror::Error)]
|
7 | 9 | pub enum OsLoggerError {
|
@@ -86,3 +88,44 @@ impl TryFrom<SyscallTrace> for String {
|
86 | 88 | ))
|
87 | 89 | }
|
88 | 90 | }
|
| 91 | + |
| 92 | +pub struct OsTransactionTrace { |
| 93 | + tx_type: TransactionType, |
| 94 | + tx_hash: TransactionHash, |
| 95 | + #[allow(dead_code)] |
| 96 | + syscalls: Vec<SyscallTrace>, |
| 97 | + resources: Option<ExecutionResources>, |
| 98 | +} |
| 99 | + |
| 100 | +impl OsTransactionTrace { |
| 101 | + pub fn new(tx_type: TransactionType, tx_hash: TransactionHash) -> Self { |
| 102 | + Self { tx_type, tx_hash, syscalls: Vec::new(), resources: None } |
| 103 | + } |
| 104 | +} |
| 105 | + |
| 106 | +impl ResourceFinalizer for OsTransactionTrace { |
| 107 | + fn get_optional_resources(&self) -> Option<&ExecutionResources> { |
| 108 | + self.resources.as_ref() |
| 109 | + } |
| 110 | + |
| 111 | + fn set_resources(&mut self, resources: ExecutionResources) { |
| 112 | + self.resources = Some(resources); |
| 113 | + } |
| 114 | +} |
| 115 | + |
| 116 | +impl TryFrom<OsTransactionTrace> for String { |
| 117 | + type Error = OsLoggerError; |
| 118 | + |
| 119 | + fn try_from(trace: OsTransactionTrace) -> OsLoggerResult<Self> { |
| 120 | + let resources = trace.get_resources()?; |
| 121 | + let builtins = if !resources.builtin_instance_counter.is_empty() { |
| 122 | + format!("\n\tBuiltins: {:?}", resources.builtin_instance_counter) |
| 123 | + } else { |
| 124 | + "".to_string() |
| 125 | + }; |
| 126 | + Ok(format!( |
| 127 | + "Transaction: {:?}\n\tHash: {}\n\tSteps: {}{builtins}", |
| 128 | + trace.tx_type, trace.tx_hash, resources.n_steps |
| 129 | + )) |
| 130 | + } |
| 131 | +} |
0 commit comments