Skip to content
This repository has been archived by the owner on Nov 6, 2020. It is now read-only.

Handle removed logs in filter changes and add geth compatibility field #8796

Merged
merged 11 commits into from
Jun 13, 2018
Prev Previous commit
Next Next commit
Add field block hash in PollFilter
sorpaas committed Jun 7, 2018
commit 0c029f1f7c09f9b8c94b7d2c8d891b02fa97d741
1 change: 1 addition & 0 deletions rpc/Cargo.toml
Original file line number Diff line number Diff line change
@@ -65,6 +65,7 @@ stats = { path = "../util/stats" }
vm = { path = "../ethcore/vm" }

[dev-dependencies]
ethcore = { path = "../ethcore", features = ["test-helpers"] }
ethcore-network = { path = "../util/network" }
fake-fetch = { path = "../util/fake-fetch" }
kvdb-memorydb = { path = "../util/kvdb-memorydb" }
2 changes: 1 addition & 1 deletion rpc/src/v1/helpers/poll_filter.rs
Original file line number Diff line number Diff line change
@@ -30,7 +30,7 @@ pub enum PollFilter {
/// Hashes of all transactions which client was notified about.
PendingTransaction(Vec<H256>),
/// Number of From block number, pending logs and log filter itself.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you add documentation for this new parameter: "last seen block hash"?

Logs(BlockNumber, HashSet<Log>, Filter)
Logs(BlockNumber, Option<H256>, HashSet<Log>, Filter)
}

/// Returns only last `n` logs
6 changes: 3 additions & 3 deletions rpc/src/v1/impls/eth_filter.rs
Original file line number Diff line number Diff line change
@@ -106,7 +106,7 @@ impl<T: Filterable + Send + Sync + 'static> EthFilter for T {
fn new_filter(&self, filter: Filter) -> Result<RpcU256> {
let mut polls = self.polls().lock();
let block_number = self.best_block_number();
let id = polls.create_poll(PollFilter::Logs(block_number, Default::default(), filter));
let id = polls.create_poll(PollFilter::Logs(block_number, None, Default::default(), filter));
Ok(id.into())
}

@@ -164,7 +164,7 @@ impl<T: Filterable + Send + Sync + 'static> EthFilter for T {
// return new hashes
Either::A(future::ok(FilterChanges::Hashes(new_hashes)))
},
PollFilter::Logs(ref mut block_number, ref mut previous_logs, ref filter) => {
PollFilter::Logs(ref mut block_number, ref mut block_hash, ref mut previous_logs, ref filter) => {
// retrive the current block number
let current_number = self.best_block_number();

@@ -214,7 +214,7 @@ impl<T: Filterable + Send + Sync + 'static> EthFilter for T {
let mut polls = self.polls().lock();

match polls.poll(&index.value()) {
Some(&PollFilter::Logs(ref _block_number, ref _previous_log, ref filter)) => filter.clone(),
Some(&PollFilter::Logs(ref _block_number, ref _block_hash, ref _previous_log, ref filter)) => filter.clone(),
// just empty array
Some(_) => return Box::new(future::ok(Vec::new())),
None => return Box::new(future::err(errors::filter_not_found())),