currently trace_filter can't return failed contract creation transaction
but trace_block can query the failed contract creation transaction.it
because the logic of parity-ethereum/ethcore/src/trace/types/filter.rs
Line 109 in 9982eba
```
_ => false
```
this patch correct the logic:
```
_ => self.to_address.matches_all()
```
Signed-off-by: Deshi Xiao <xiaods@gmail.com>
This commit is contained in:
parent
3687df8da2
commit
1ac1224cd3
@ -106,7 +106,7 @@ impl Filter {
|
||||
|
||||
let to_matches = match trace.result {
|
||||
Res::Create(ref create_result) => self.to_address.matches(&create_result.address),
|
||||
_ => false
|
||||
_ => self.to_address.matches_all(),
|
||||
};
|
||||
|
||||
from_matches && to_matches
|
||||
@ -385,4 +385,44 @@ mod tests {
|
||||
assert!(f1.matches(&trace));
|
||||
assert!(f2.matches(&trace));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn filter_match_failed_contract_creation_fix_9822() {
|
||||
|
||||
let f0 = Filter {
|
||||
range: (0..0),
|
||||
from_address: vec![1.into()].into(),
|
||||
to_address: vec![].into(),
|
||||
};
|
||||
|
||||
let f1 = Filter {
|
||||
range: (0..0),
|
||||
from_address: vec![].into(),
|
||||
to_address: vec![].into(),
|
||||
};
|
||||
|
||||
let f2 = Filter {
|
||||
range: (0..0),
|
||||
from_address: vec![].into(),
|
||||
to_address: vec![2.into()].into(),
|
||||
};
|
||||
|
||||
let trace = FlatTrace {
|
||||
action: Action::Create(Create {
|
||||
from: 1.into(),
|
||||
gas: 4.into(),
|
||||
init: vec![0x5],
|
||||
value: 3.into(),
|
||||
}),
|
||||
result: Res::FailedCall(TraceError::BadInstruction),
|
||||
trace_address: vec![].into_iter().collect(),
|
||||
subtraces: 0
|
||||
};
|
||||
|
||||
assert!(f0.matches(&trace));
|
||||
assert!(f1.matches(&trace));
|
||||
assert!(!f2.matches(&trace));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user