forge_script_sequence/
transaction.rs
1use alloy_primitives::{Address, Bytes, B256};
2use foundry_common::TransactionMaybeSigned;
3use revm_inspectors::tracing::types::CallKind;
4use serde::{Deserialize, Serialize};
5
6#[derive(Clone, Debug, Default, Serialize, Deserialize)]
7#[serde(rename_all = "camelCase")]
8pub struct AdditionalContract {
9 #[serde(rename = "transactionType")]
10 pub opcode: CallKind,
11 pub address: Address,
12 pub init_code: Bytes,
13}
14
15#[derive(Clone, Debug, Serialize, Deserialize)]
16#[serde(rename_all = "camelCase")]
17pub struct TransactionWithMetadata {
18 pub hash: Option<B256>,
19 #[serde(rename = "transactionType")]
20 pub opcode: CallKind,
21 #[serde(default = "default_string")]
22 pub contract_name: Option<String>,
23 #[serde(default = "default_address")]
24 pub contract_address: Option<Address>,
25 #[serde(default = "default_string")]
26 pub function: Option<String>,
27 #[serde(default = "default_vec_of_strings")]
28 pub arguments: Option<Vec<String>>,
29 #[serde(skip)]
30 pub rpc: String,
31 pub transaction: TransactionMaybeSigned,
32 pub additional_contracts: Vec<AdditionalContract>,
33 pub is_fixed_gas_limit: bool,
34}
35
36fn default_string() -> Option<String> {
37 Some(String::new())
38}
39
40fn default_address() -> Option<Address> {
41 Some(Address::ZERO)
42}
43
44fn default_vec_of_strings() -> Option<Vec<String>> {
45 Some(vec![])
46}
47
48impl TransactionWithMetadata {
49 pub fn from_tx_request(transaction: TransactionMaybeSigned) -> Self {
50 Self {
51 transaction,
52 hash: Default::default(),
53 opcode: Default::default(),
54 contract_name: Default::default(),
55 contract_address: Default::default(),
56 function: Default::default(),
57 arguments: Default::default(),
58 is_fixed_gas_limit: Default::default(),
59 additional_contracts: Default::default(),
60 rpc: Default::default(),
61 }
62 }
63
64 pub fn tx(&self) -> &TransactionMaybeSigned {
65 &self.transaction
66 }
67
68 pub fn tx_mut(&mut self) -> &mut TransactionMaybeSigned {
69 &mut self.transaction
70 }
71
72 pub fn is_create2(&self) -> bool {
73 self.opcode == CallKind::Create2
74 }
75}