cfx_execute_helper/phantom_tx/
mod.rs

1mod recover;
2
3use cfx_types::{Address, AddressSpaceUtil, Bloom, Space, U256};
4use primitives::{
5    transaction::eth_transaction::Eip155Transaction, Action, LogEntry, Receipt,
6    SignedTransaction, TransactionStatus,
7};
8
9pub use recover::{build_bloom_and_recover_phantom, recover_phantom};
10
11#[derive(Clone, Debug, Default)]
12pub struct PhantomTransaction {
13    pub from: Address,
14    pub nonce: U256,
15    pub action: Action,
16    pub value: U256,
17    pub data: Vec<u8>,
18
19    pub log_bloom: Bloom,
20    pub logs: Vec<LogEntry>,
21    pub outcome_status: TransactionStatus,
22}
23
24impl PhantomTransaction {
25    fn simple_transfer(
26        from: Address, to: Address, nonce: U256, value: U256, data: Vec<u8>,
27    ) -> PhantomTransaction {
28        PhantomTransaction {
29            from,
30            nonce,
31            action: Action::Call(to),
32            value,
33            data,
34            outcome_status: TransactionStatus::Success,
35            ..Default::default()
36        }
37    }
38}
39
40impl PhantomTransaction {
41    pub fn into_eip155(self, chain_id: u32) -> SignedTransaction {
42        let tx = Eip155Transaction {
43            action: self.action,
44            chain_id: Some(chain_id),
45            data: self.data,
46            gas_price: 0.into(),
47            gas: 0.into(),
48            nonce: self.nonce,
49            value: self.value,
50        };
51
52        tx.fake_sign_phantom(self.from.with_space(Space::Ethereum))
53    }
54
55    pub fn into_receipt(self, accumulated_gas_used: U256) -> Receipt {
56        Receipt {
57            accumulated_gas_used,
58            gas_fee: 0.into(),
59            gas_sponsor_paid: false,
60            log_bloom: self.log_bloom,
61            logs: self.logs,
62            outcome_status: self.outcome_status,
63            storage_collateralized: vec![],
64            storage_released: vec![],
65            storage_sponsor_paid: false,
66            burnt_gas_fee: None,
67        }
68    }
69}