Transaction ids made optional in order to reflect not transactional traces
This commit is contained in:
@@ -215,7 +215,20 @@ impl<T> TraceDB<T> where T: DatabaseExtras {
|
||||
block_number: BlockNumber,
|
||||
tx_number: usize
|
||||
) -> Vec<LocalizedTrace> {
|
||||
let tx_hash = self.extras.transaction_hash(block_number, tx_number);
|
||||
let trace_tx_number;
|
||||
let trace_tx_hash;
|
||||
|
||||
match self.extras.transaction_hash(block_number, tx_number) {
|
||||
Some(hash) => {
|
||||
trace_tx_hash = Some(hash.clone());
|
||||
trace_tx_number = Some(tx_number);
|
||||
},
|
||||
None => {
|
||||
//None means trace without transaction (reward)
|
||||
trace_tx_hash = None;
|
||||
trace_tx_number = None;
|
||||
}
|
||||
}
|
||||
|
||||
let flat_traces: Vec<FlatTrace> = traces.into();
|
||||
flat_traces.into_iter()
|
||||
@@ -226,12 +239,8 @@ impl<T> TraceDB<T> where T: DatabaseExtras {
|
||||
result: trace.result,
|
||||
subtraces: trace.subtraces,
|
||||
trace_address: trace.trace_address.into_iter().collect(),
|
||||
transaction_number: tx_number,
|
||||
transaction_hash: match tx_hash {
|
||||
Some(hash) => hash.clone(),
|
||||
/// None tx hash means non transaction's trace
|
||||
None => 0.into(),
|
||||
},
|
||||
transaction_number: trace_tx_number,
|
||||
transaction_hash: trace_tx_hash,
|
||||
block_number: block_number,
|
||||
block_hash: block_hash
|
||||
}),
|
||||
@@ -324,8 +333,8 @@ impl<T> TraceDatabase for TraceDB<T> where T: DatabaseExtras {
|
||||
result: trace.result,
|
||||
subtraces: trace.subtraces,
|
||||
trace_address: trace.trace_address.into_iter().collect(),
|
||||
transaction_number: tx_position,
|
||||
transaction_hash: tx_hash,
|
||||
transaction_number: Some(tx_position),
|
||||
transaction_hash: Some(tx_hash),
|
||||
block_number: block_number,
|
||||
block_hash: block_hash,
|
||||
}
|
||||
@@ -348,8 +357,8 @@ impl<T> TraceDatabase for TraceDB<T> where T: DatabaseExtras {
|
||||
result: trace.result,
|
||||
subtraces: trace.subtraces,
|
||||
trace_address: trace.trace_address.into_iter().collect(),
|
||||
transaction_number: tx_position,
|
||||
transaction_hash: tx_hash.clone(),
|
||||
transaction_number: Some(tx_position),
|
||||
transaction_hash: Some(tx_hash.clone()),
|
||||
block_number: block_number,
|
||||
block_hash: block_hash
|
||||
})
|
||||
@@ -366,8 +375,20 @@ impl<T> TraceDatabase for TraceDB<T> where T: DatabaseExtras {
|
||||
.map(Into::<Vec<FlatTrace>>::into)
|
||||
.enumerate()
|
||||
.flat_map(|(tx_position, traces)| {
|
||||
let tx_hash = self.extras.transaction_hash(block_number, tx_position)
|
||||
.expect("Expected to find transaction hash. Database is probably corrupted");
|
||||
let trace_tx_number;
|
||||
let trace_tx_hash;
|
||||
|
||||
match self.extras.transaction_hash(block_number, tx_position) {
|
||||
Some(hash) => {
|
||||
trace_tx_hash = Some(hash.clone());
|
||||
trace_tx_number = Some(tx_position);
|
||||
},
|
||||
None => {
|
||||
//None means trace without transaction (reward)
|
||||
trace_tx_hash = None;
|
||||
trace_tx_number = None;
|
||||
}
|
||||
}
|
||||
|
||||
traces.into_iter()
|
||||
.map(|trace| LocalizedTrace {
|
||||
@@ -375,8 +396,8 @@ impl<T> TraceDatabase for TraceDB<T> where T: DatabaseExtras {
|
||||
result: trace.result,
|
||||
subtraces: trace.subtraces,
|
||||
trace_address: trace.trace_address.into_iter().collect(),
|
||||
transaction_number: tx_position,
|
||||
transaction_hash: tx_hash.clone(),
|
||||
transaction_number: trace_tx_number,
|
||||
transaction_hash: trace_tx_hash,
|
||||
block_number: block_number,
|
||||
block_hash: block_hash,
|
||||
})
|
||||
@@ -546,8 +567,8 @@ mod tests {
|
||||
result: Res::FailedCall(TraceError::OutOfGas),
|
||||
trace_address: vec![],
|
||||
subtraces: 0,
|
||||
transaction_number: 0,
|
||||
transaction_hash: tx_hash,
|
||||
transaction_number: Some(0),
|
||||
transaction_hash: Some(tx_hash),
|
||||
block_number: block_number,
|
||||
block_hash: block_hash,
|
||||
}
|
||||
|
||||
@@ -34,9 +34,9 @@ pub struct LocalizedTrace {
|
||||
/// [index in root, index in first CALL, index in second CALL, ...]
|
||||
pub trace_address: Vec<usize>,
|
||||
/// Transaction number within the block.
|
||||
pub transaction_number: usize,
|
||||
pub transaction_number: Option<usize>,
|
||||
/// Signed transaction hash.
|
||||
pub transaction_hash: H256,
|
||||
pub transaction_hash: Option<H256>,
|
||||
/// Block number.
|
||||
pub block_number: BlockNumber,
|
||||
/// Block hash.
|
||||
|
||||
Reference in New Issue
Block a user