Implement EIP234 block_hash for eth_getLogs (#9256)

* Implement EIP234

* Make filter conversion returns error if both blockHash and from/toBlock is found

This also changes PollFilter to store the EthFilter type, instead of the jsonrpc one, saving repeated conversion.

* Return error if block filtering target is not found in eth_getLogs

Use the old behavior (unwrap_or_default) for anywhere else.

* fix test: secret_store

* Fix weird indentation

* Make client log filter return error in case a block cannot be found

* Return blockId error in rpc

* test_client: allow return error on logs

* Add a mocked test for eth_getLogs error

* fix: should return error if from_block/to_block greater than best block number

* Add notes on pending

* Add comment for UNSUPPORTED_REQUEST

* Address grumbles

* Return err if from > to
This commit is contained in:
Wei Tang
2018-08-13 15:47:10 +08:00
committed by GitHub
parent 4eab8672b8
commit a6df452841
15 changed files with 222 additions and 111 deletions

View File

@@ -502,8 +502,11 @@ impl<T: LightChainClient + 'static> Eth for EthClient<T> {
fn logs(&self, filter: Filter) -> BoxFuture<Vec<Log>> {
let limit = filter.limit;
Box::new(Filterable::logs(self, filter.into())
.map(move|logs| limit_logs(logs, limit)))
Box::new(
Filterable::logs(self, match filter.try_into() {
Ok(value) => value,
Err(err) => return Box::new(future::err(err)),
}).map(move |logs| limit_logs(logs, limit)))
}
fn work(&self, _timeout: Trailing<u64>) -> Result<Work> {