Fill transaction hash on ethGetLog of light client.#9938
Conversation
but we keep align with spec.
|
It looks like @cheme signed our Contributor License Agreement. 👍 Many thanks, Parity Technologies CLA Bot |
| .and_then(move |matches| { | ||
| let mut blocks = BTreeMap::new(); | ||
| let mut result: Vec<Log> = matches.into_iter().map(|(_, v)| { | ||
| { |
There was a problem hiding this comment.
indentation is off here
| // future get blocks (unordered it) | ||
| stream::futures_unordered(blocks.into_iter().map(|(_,v)|v)).collect().map(move |blocks| { | ||
| let mut tr_per_bl = BTreeMap::new(); | ||
| for enc_bl in blocks.iter() { |
There was a problem hiding this comment.
I don't understand the name enc_block can you rephrase?
niklasad1
left a comment
There was a problem hiding this comment.
Looks generally, mostly some formatting and naming questions to address
sorpaas
left a comment
There was a problem hiding this comment.
Mostly LGTM. A few additional grumbles.
Maybe good to add a flag that enables/disables this, but I think this extra cost is fine (we added one more request for all involved logs block, and normal light client will not try to fetch large amount of logs). So enabling it on default might not hurt anyway.
| v | ||
| }).collect(); | ||
| // future get blocks (unordered it) | ||
| stream::futures_unordered(blocks.into_iter().map(|(_,v)|v)).collect().map(move |blocks| { |
There was a problem hiding this comment.
nit: missing whitespace: .map(|(_, v)| v)
| let mut result: Vec<Log> = matches.into_iter().map(|(_, v)| { | ||
| { | ||
| let block_hash = v.block_hash.as_ref().expect("Previously initialized with value; qed"); | ||
| blocks.entry(block_hash.clone()).or_insert_with(|| { |
There was a problem hiding this comment.
block_hash is copy, so we don't need clone.
There was a problem hiding this comment.
Actually, I think this is rpc::v1::types::hash which is not Copy but we should refactor that to be consistent in the codebase!
|
Yeah, could be good to provide the old behavior too but I don't think a flag for |
|
At first I wanted to do it, but then I got lazy :) The truth is that I started wondering if it would not be an additional unused rpc or flag. |
|
My 2cts
If it's available, it should be documented, no matter if it's used or not by the outside world, if we developed it (for Fether) it means it can be valuable for others, be it transparently in |
Fix indent. Co-Authored-By: cheme <emericchevalier.pro@gmail.com>
|
So the method with old behavior can be call by switching : to (new name is 'parity_getLogsLight'). I think I did address grumbles, please point out the remaining ones if any. |
| }) | ||
|
|
||
| } | ||
|
|
| /// Get transaction logs | ||
| pub fn logs(&self, filter: EthcoreFilter) -> impl Future<Item = Vec<Log>, Error = Error> + Send { | ||
| use std::collections::BTreeMap; | ||
| fn logs_common(&self, filter: EthcoreFilter) -> impl Future<Item = BTreeMap<(u64,usize),Log>, Error = Error> + Send { |
There was a problem hiding this comment.
missing spaces
| fn logs_common(&self, filter: EthcoreFilter) -> impl Future<Item = BTreeMap<(u64,usize),Log>, Error = Error> + Send { | |
| fn logs_common(&self, filter: EthcoreFilter) -> impl Future<Item = BTreeMap<(u64, usize), Log>, Error = Error> + Send { |
| _ => panic!(WRONG_RESPONSE_AMOUNT_TYPE_PROOF), | ||
| })) | ||
|
|
||
|
|
| self.logs_common(filter) | ||
| // retrieve transaction hash. | ||
| .and_then(move |matches| { | ||
| let mut blocks = BTreeMap::new(); |
| v | ||
| }).collect(); | ||
| // future get blocks (unordered it) | ||
| stream::futures_unordered(blocks.into_iter().map(|(_,v)|v)).collect().map(move |blocks| { |
There was a problem hiding this comment.
| stream::futures_unordered(blocks.into_iter().map(|(_,v)|v)).collect().map(move |blocks| { | |
| stream::futures_unordered(blocks.into_iter().map(|(_, v)| v)).collect().map(move |blocks| { |
|
|
||
| /// Returns logs matching given filter object. | ||
| /// Skip filling transaction hash for faster query. | ||
| #[rpc(name = "parity_getLogsLight")] |
There was a problem hiding this comment.
I have no strong opinions on the naming but getLogsLight is not self-explanatory as long the documentation explains this I'm satisfied.
Otherwise, I propose parity_getLogsNoTransactionHash
Fix indent and extra white lines.
|
@niklasad1 I did switch rpc naming as suggested. |
* Fill transaction hash on ethGetLog of light client. This is enifficient but we keep align with spec. * Using better variables names. * Expose old fast light get log as `parity_getLogsLight`. * Update rpc/src/v1/helpers/light_fetch.rs Fix indent. Co-Authored-By: cheme <emericchevalier.pro@gmail.com> * Factor common code between light_logs and logs. * Remove useless check * Rename parity light logs to 'parity_getLogsNoTransactionHash'. Fix indent and extra white lines. * Use vec instead of tree map to avoid inner function. * better loop
* version: bump beta to v2.2.6 * Update pwasm-utils to 0.6.1 (#10134) * version: mark upgrade critical on kovan * Identity fix (#10128) * fix #10125 fix service transaction version detection if --identity is enabled, change test to match how --identity actually works * fix wrong var * get the index of v, not / * idx, not idx.len() * Update ethcore/sync/src/chain/propagator.rs Co-Authored-By: joshua-mir <43032097+joshua-mir@users.noreply.github.com> * Update ethcore/sync/src/chain/propagator.rs Co-Authored-By: joshua-mir <43032097+joshua-mir@users.noreply.github.com> * change version prefix to a const * space Co-Authored-By: joshua-mir <43032097+joshua-mir@users.noreply.github.com> * [Hit return to continue] * ethcore: update hardcoded headers for foundation * ethcore: update hardcoded headers for ropsten * ethcore: update hardcoded headers for kovan * ethcore: use consistant formatting * ethcore: restore spaces after colon in chain spec * ethcore: fix bootnodes in chain specs * ethcore: fix bootnodes in chain specs * ethcore: enforce newline at the end of chainspecs * Follow-up to #10105 (#10107) * HF in POA Sokol (2019-01-04) (#10077) * HF in POA Sokol (2019-01-04) poanetwork/poa-chain-spec#91 * Update POA Core bootnodes * Autogen docs for the "Configuring Parity Ethereum" wiki page. (#10067) * publish docs changes for autogen config docs * Update publish-docs.sh adding an environment variable so js knows not to download git master and just grab the local repo * Update publish-docs.sh made some changes making this unnecessary * fix env variable env variable passes to node properly now * use yarn * test pipeline, revert me * fix test pipeline, revert me * change runner tag * change runner tag 2 * change runner tag * global git config * supress upload_files output * Update .gitlab-ci.yml reverting testing changes * Replace tag if exists Very unlikely to be important/useful * Autogen docs for the "Configuring Parity Ethereum" wiki page. (#10067) * publish docs changes for autogen config docs * Update publish-docs.sh adding an environment variable so js knows not to download git master and just grab the local repo * Update publish-docs.sh made some changes making this unnecessary * fix env variable env variable passes to node properly now * use yarn * test pipeline, revert me * fix test pipeline, revert me * change runner tag * change runner tag 2 * change runner tag * global git config * supress upload_files output * Update .gitlab-ci.yml reverting testing changes * Replace tag if exists Very unlikely to be important/useful * finality: dont require chain head to be in the chain (#10054) * Fill transaction hash on ethGetLog of light client. (#9938) * Fill transaction hash on ethGetLog of light client. This is enifficient but we keep align with spec. * Using better variables names. * Expose old fast light get log as `parity_getLogsLight`. * Update rpc/src/v1/helpers/light_fetch.rs Fix indent. Co-Authored-By: cheme <emericchevalier.pro@gmail.com> * Factor common code between light_logs and logs. * Remove useless check * Rename parity light logs to 'parity_getLogsNoTransactionHash'. Fix indent and extra white lines. * Use vec instead of tree map to avoid inner function. * better loop * fix pubsub new_blocks notifications to include all blocks (#9987) Fix: new blocks notifications sometimes missing in pubsub RPC Implement new struct to pass to `new_blocks()` with extra parameter - `has_more_blocks_to_import`, which was previously used to determine whether the notification should be sent. Now it's up to each implementation to decide what to do. Updated all implementations to behave as before, except `eth_pubsub`, which will send notification even when the queue is not empty. Update tests. * Revert part of 70a6db7 * HF in POA Core (2019-01-18) - Constantinople (#10155) poanetwork/poa-chain-spec#100 * ci: re-enable snap publishing (#10142) * ci: enable snap publishing~ * ci: add publish snap script * ci: add snapcraft skeleton * ci: group export statements * ci: enable snaps on pr branch * ci: enable snaps on pr branch * ci: set default BUILD_ARCH * ci: enable snaps on pr branch * ci: enable snaps on pr branch * ci: add libdb to snap * ci: reinitiate gitlabci * ci: reinitiate publish-snap script * ci: fix yaml syntax * cargo/gitlab env vars * debug, revert me * version? * debug vars * vars * vars fix * vars fix * revert * Update scripts/gitlab/publish-snap.sh Co-Authored-By: 5chdn <5chdn@users.noreply.github.com> * ci: read track from cargo toml * Make sure parent block is not in importing queue when importing ancient blocks (#10138) * Make sure parent block is not in importing queue when importing ancient blocks * Clear queue when an ancient import fails * Lock only once in clear * Add comments why queued check is needed * Should push the value back to the queue * Directly check in chain.read() * Remove extra empty line * Revert unused verification change
This is highly inefficient, yet required to respect standard eth rpc.
Closes #9929 .
It exposes a new rpc method to keep old behavior :
parity_getLogsNoTransactionHash