Skip to content

Commit

Permalink
Undo
Browse files Browse the repository at this point in the history
  • Loading branch information
shamardy committed Jun 24, 2018
1 parent 7444916 commit 23bfa78
Show file tree
Hide file tree
Showing 10 changed files with 40 additions and 11 deletions.
13 changes: 9 additions & 4 deletions ethcore/src/client/client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1227,6 +1227,7 @@ impl Client {
env_info: &EnvInfo,
machine: &::machine::EthereumMachine,
state_diff: bool,
hash_trace: bool,
transaction: &SignedTransaction,
options: TransactOptions<T, V>,
) -> Result<Executed<T::Output, V::Output>, CallError> where
Expand All @@ -1240,6 +1241,8 @@ impl Client {

let mut ret = Executive::new(state, env_info, machine).transact_virtual(transaction, options)?;

ret.transaction_hash = if hash_trace { Some(transaction.hash()) } else { None };

if let Some(original) = original_state {
ret.state_diff = Some(state.diff_from(original).map_err(ExecutionError::from)?);
}
Expand All @@ -1248,11 +1251,13 @@ impl Client {

let state_diff = analytics.state_diffing;

let hash_trace = analytics.hash_tracing;

match (analytics.transaction_tracing, analytics.vm_tracing) {
(true, true) => call(state, env_info, machine, state_diff, t, TransactOptions::with_tracing_and_vm_tracing()),
(true, false) => call(state, env_info, machine, state_diff, t, TransactOptions::with_tracing()),
(false, true) => call(state, env_info, machine, state_diff, t, TransactOptions::with_vm_tracing()),
(false, false) => call(state, env_info, machine, state_diff, t, TransactOptions::with_no_tracing()),
(true, true) => call(state, env_info, machine, state_diff, hash_trace, t, TransactOptions::with_tracing_and_vm_tracing()),
(true, false) => call(state, env_info, machine, state_diff, hash_trace, t, TransactOptions::with_tracing()),
(false, true) => call(state, env_info, machine, state_diff, hash_trace, t, TransactOptions::with_vm_tracing()),
(false, false) => call(state, env_info, machine, state_diff, hash_trace, t, TransactOptions::with_no_tracing()),
}
}

Expand Down
4 changes: 3 additions & 1 deletion ethcore/src/executed.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

//! Transaction execution format module.
use ethereum_types::{U256, U512, Address};
use ethereum_types::{U256, U512, Address, H256};
use bytes::Bytes;
use trie;
use vm;
Expand Down Expand Up @@ -67,6 +67,8 @@ pub struct Executed<T = FlatTrace, V = VMTrace> {
pub vm_trace: Option<V>,
/// The state diff, if we traced it.
pub state_diff: Option<StateDiff>,
/// The transaction hash, if we traced it.
pub transaction_hash: Option<H256>,
}

/// Result of executing the transaction.
Expand Down
2 changes: 2 additions & 0 deletions ethcore/src/executive.rs
Original file line number Diff line number Diff line change
Expand Up @@ -658,6 +658,7 @@ impl<'a, B: 'a + StateBackend> Executive<'a, B> {
trace: trace,
vm_trace: vm_trace,
state_diff: None,
transaction_hash: None,
})
},
Ok(r) => {
Expand All @@ -673,6 +674,7 @@ impl<'a, B: 'a + StateBackend> Executive<'a, B> {
trace: trace,
vm_trace: vm_trace,
state_diff: None,
transaction_hash: None,
})
},
}
Expand Down
5 changes: 5 additions & 0 deletions ethcore/transaction/src/transaction.rs
Original file line number Diff line number Diff line change
Expand Up @@ -492,6 +492,11 @@ impl SignedTransaction {
self.transaction.is_unsigned()
}

/// Returns Transaction Hash
pub fn hash(&self) -> H256 {
self.transaction.hash()
}

/// Deconstructs this transaction back into `UnverifiedTransaction`
pub fn deconstruct(self) -> (UnverifiedTransaction, Address, Option<Public>) {
(self.transaction, self.sender, self.public)
Expand Down
2 changes: 2 additions & 0 deletions ethcore/types/src/call_analytics.rs
Original file line number Diff line number Diff line change
Expand Up @@ -25,4 +25,6 @@ pub struct CallAnalytics {
pub vm_tracing: bool,
/// Make a diff.
pub state_diffing: bool,
/// Make a transaction hash trace.
pub hash_tracing: bool,
}
1 change: 1 addition & 0 deletions rpc/src/v1/impls/traces.rs
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ fn to_call_analytics(flags: TraceOptions) -> CallAnalytics {
transaction_tracing: flags.contains(&("trace".to_owned())),
vm_tracing: flags.contains(&("vmTrace".to_owned())),
state_diffing: flags.contains(&("stateDiff".to_owned())),
hash_tracing: flags.contains(&("transactionHash".to_owned())),
}
}

Expand Down
5 changes: 5 additions & 0 deletions rpc/src/v1/tests/mocked/eth.rs
Original file line number Diff line number Diff line change
Expand Up @@ -637,6 +637,7 @@ fn rpc_eth_call_latest() {
trace: vec![],
vm_trace: None,
state_diff: None,
transaction_hash: None,
}));

let request = r#"{
Expand Down Expand Up @@ -673,6 +674,7 @@ fn rpc_eth_call() {
trace: vec![],
vm_trace: None,
state_diff: None,
transaction_hash: None,
}));

let request = r#"{
Expand Down Expand Up @@ -709,6 +711,7 @@ fn rpc_eth_call_default_block() {
trace: vec![],
vm_trace: None,
state_diff: None,
transaction_hash: None,
}));

let request = r#"{
Expand Down Expand Up @@ -744,6 +747,7 @@ fn rpc_eth_estimate_gas() {
trace: vec![],
vm_trace: None,
state_diff: None,
transaction_hash: None,
}));

let request = r#"{
Expand Down Expand Up @@ -780,6 +784,7 @@ fn rpc_eth_estimate_gas_default_block() {
trace: vec![],
vm_trace: None,
state_diff: None,
transaction_hash: None,
}));

let request = r#"{
Expand Down
1 change: 1 addition & 0 deletions rpc/src/v1/tests/mocked/parity.rs
Original file line number Diff line number Diff line change
Expand Up @@ -554,6 +554,7 @@ fn rpc_parity_call() {
trace: vec![],
vm_trace: None,
state_diff: None,
transaction_hash: None,
}));
let io = deps.default_client();

Expand Down
11 changes: 6 additions & 5 deletions rpc/src/v1/tests/mocked/traces.rs
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ fn io() -> Tester {
trace: vec![],
vm_trace: None,
state_diff: None,
transaction_hash: None,
}));
let miner = Arc::new(TestMinerService::default());
let traces = TracesClient::new(&client);
Expand Down Expand Up @@ -165,7 +166,7 @@ fn rpc_trace_call() {
let tester = io();

let request = r#"{"jsonrpc":"2.0","method":"trace_call","params":[{}, ["stateDiff", "vmTrace", "trace"]],"id":1}"#;
let response = r#"{"jsonrpc":"2.0","result":{"output":"0x010203","stateDiff":null,"trace":[],"vmTrace":null},"id":1}"#;
let response = r#"{"jsonrpc":"2.0","result":{"output":"0x010203","stateDiff":null,"trace":[],"transactionHash":null,"vmTrace":null},"id":1}"#;

assert_eq!(tester.io.handle_request_sync(request), Some(response.to_owned()));
}
Expand All @@ -175,7 +176,7 @@ fn rpc_trace_multi_call() {
let tester = io();

let request = r#"{"jsonrpc":"2.0","method":"trace_callMany","params":[[[{}, ["stateDiff", "vmTrace", "trace"]]]],"id":1}"#;
let response = r#"{"jsonrpc":"2.0","result":[{"output":"0x010203","stateDiff":null,"trace":[],"vmTrace":null}],"id":1}"#;
let response = r#"{"jsonrpc":"2.0","result":[{"output":"0x010203","stateDiff":null,"trace":[],"transactionHash":null,"vmTrace":null}],"id":1}"#;

assert_eq!(tester.io.handle_request_sync(request), Some(response.to_owned()));
}
Expand All @@ -196,7 +197,7 @@ fn rpc_trace_raw_transaction() {
let tester = io();

let request = r#"{"jsonrpc":"2.0","method":"trace_rawTransaction","params":["0xf869018609184e72a0008276c094d46e8dd67c5d32be8058bb8eb970870f07244567849184e72a801ba0617f39c1a107b63302449c476d96a6cb17a5842fc98ff0c5bcf4d5c4d8166b95a009fdb6097c6196b9bbafc3a59f02f38d91baeef23d0c60a8e4f23c7714cea3a9", ["stateDiff", "vmTrace", "trace"]],"id":1}"#;
let response = r#"{"jsonrpc":"2.0","result":{"output":"0x010203","stateDiff":null,"trace":[],"vmTrace":null},"id":1}"#;
let response = r#"{"jsonrpc":"2.0","result":{"output":"0x010203","stateDiff":null,"trace":[],"transactionHash":null,"vmTrace":null},"id":1}"#;

assert_eq!(tester.io.handle_request_sync(request), Some(response.to_owned()));
}
Expand All @@ -217,7 +218,7 @@ fn rpc_trace_replay_transaction() {
let tester = io();

let request = r#"{"jsonrpc":"2.0","method":"trace_replayTransaction","params":["0x0000000000000000000000000000000000000000000000000000000000000005", ["trace", "stateDiff", "vmTrace"]],"id":1}"#;
let response = r#"{"jsonrpc":"2.0","result":{"output":"0x010203","stateDiff":null,"trace":[],"vmTrace":null},"id":1}"#;
let response = r#"{"jsonrpc":"2.0","result":{"output":"0x010203","stateDiff":null,"trace":[],"transactionHash":null,"vmTrace":null},"id":1}"#;

assert_eq!(tester.io.handle_request_sync(request), Some(response.to_owned()));
}
Expand All @@ -238,7 +239,7 @@ fn rpc_trace_replay_block_transactions() {
let tester = io();

let request = r#"{"jsonrpc":"2.0","method":"trace_replayBlockTransactions","params":["0x10", ["trace", "stateDiff", "vmTrace"]],"id":1}"#;
let response = r#"{"jsonrpc":"2.0","result":[{"output":"0x010203","stateDiff":null,"trace":[],"vmTrace":null}],"id":1}"#;
let response = r#"{"jsonrpc":"2.0","result":[{"output":"0x010203","stateDiff":null,"trace":[],"transactionHash":null,"vmTrace":null}],"id":1}"#;

assert_eq!(tester.io.handle_request_sync(request), Some(response.to_owned()));
}
7 changes: 6 additions & 1 deletion rpc/src/v1/types/trace.rs
Original file line number Diff line number Diff line change
Expand Up @@ -618,6 +618,9 @@ pub struct TraceResults {
/// The transaction trace.
#[serde(rename="stateDiff")]
pub state_diff: Option<StateDiff>,
/// The transaction trace.
#[serde(rename="transactionHash")]
pub transaction_hash: Option<H256>,
}

impl From<Executed> for TraceResults {
Expand All @@ -627,6 +630,7 @@ impl From<Executed> for TraceResults {
trace: t.trace.into_iter().map(Into::into).collect(),
vm_trace: t.vm_trace.map(Into::into),
state_diff: t.state_diff.map(Into::into),
transaction_hash: t.transaction_hash.map(Into::into),
}
}
}
Expand All @@ -646,9 +650,10 @@ mod tests {
trace: vec![],
vm_trace: None,
state_diff: None,
transaction_hash: None,
};
let serialized = serde_json::to_string(&r).unwrap();
assert_eq!(serialized, r#"{"output":"0x60","trace":[],"vmTrace":null,"stateDiff":null}"#);
assert_eq!(serialized, r#"{"output":"0x60","trace":[],"vmTrace":null,"stateDiff":null,"transactionHash":null}"#);
}

#[test]
Expand Down

0 comments on commit 23bfa78

Please sign in to comment.