Fix #9822: trace_filter does not return failed contract creation (#10140)

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:
Tomasz Drwięga 2019-01-11 18:08:58 +01:00 committed by Wei Tang
parent 3687df8da2
commit 1ac1224cd3

View File

@ -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));
}
}