cfx_execute_helper/phantom_tx/
mod.rs1mod 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}