2017-08-24 09:42:19 -07:00
|
|
|
use web3::types::{H256, Address, FilterBuilder};
|
|
|
|
use ethabi;
|
|
|
|
|
|
|
|
fn web3_topic(topic: ethabi::Topic<ethabi::Hash>) -> Option<Vec<H256>> {
|
|
|
|
let t: Vec<ethabi::Hash> = topic.into();
|
2017-10-01 10:16:44 -07:00
|
|
|
// parity does not conform to an ethereum spec
|
|
|
|
if t.is_empty() {
|
|
|
|
None
|
|
|
|
} else {
|
2018-02-07 05:58:50 -08:00
|
|
|
Some(t)
|
2017-10-01 10:16:44 -07:00
|
|
|
}
|
2017-08-24 09:42:19 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
pub fn web3_filter(filter: ethabi::TopicFilter, address: Address) -> FilterBuilder {
|
|
|
|
let t0 = web3_topic(filter.topic0);
|
|
|
|
let t1 = web3_topic(filter.topic1);
|
|
|
|
let t2 = web3_topic(filter.topic2);
|
|
|
|
let t3 = web3_topic(filter.topic3);
|
|
|
|
FilterBuilder::default()
|
|
|
|
.address(vec![address])
|
|
|
|
.topics(t0, t1, t2, t3)
|
|
|
|
}
|