New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[RPC] Transaction details in getblock #8704
Conversation
concept NACK, is two RPC requests really so bad? edit: weak concept NACK |
@dcousens yes, two RPC calls is really bad, especially when you want the details of all the transactions in a block. Then you end up running getrawtransaction thousands of times. Also, AFAICT, this doesn't require the txindex in order to get the transactions, unlike getrawtransaction. |
Why? In a batched RPC call, the overhead is literally just 1RTT more.
Perhaps edit: In fact, adding that option would be significantly more useful than this RTT optimisation IMHO. |
How?
Well the functionality to this was already in the code. The BlockToJson method took a parameter for txDetails which was by default false. This just lets you set that to true. |
http://www.jsonrpc.org/specification#batch What language are you using? Your RPC library should be able to handle this quite easily. |
Huh. Didn't know that. I've been using bash with either curl or bitcoin-cli and python. |
Saving roundtrip time is not a valid reason to add a RPC API (see discussion in #8457).
This is the only important fact here: you cannot get this information any other way. getrawtransaction won't get you transactions in blocks, at least without tx index. The only way to get this information right now is to getblock raw then parse the block locally. So concept ACK because of that. |
@laanwj would it maybe be better to add functionality via getrawtransaction w/ a block id? (perhaps in addition to this) |
Well yes a "gather transaction [X,...] from prespecified block Y" RPC call could be useful in some rare cases. But on the other hand it'll still have to read the entire block from disk and deserialize it. It's terribly inefficient already. |
@laanwj indeed! Forgot about the resulting deserialization. |
Concept ACK for all the reasons @laanwj already discussed. |
src/rpc/blockchain.cpp
Outdated
throw runtime_error( | ||
"getblock \"hash\" ( verbose )\n" | ||
"getblock \"hash\" ( verbose ) ( extraVerbose )\n" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Double boolean here seems ugly. Maybe allow verbose to be boolean or a number 0-2 (with 2 being extraVerbose)?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It is ugly, but overloading on type in JSON which is essentially dynamically typed is also ugly.
Named parameters as implemented in #8811 would make this more bearable.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I do agree that for a new interface, a scale for verbosity would have made more sense instead of a boolean.
Maybe that's a better choice I'm just not sure. Changing the meaning of existing arguments is always annoying and means extra testing for backwards compatibility.
I'm starting to realize that @luke-jr's idea to accept 0-2 isn't such a bad idea after all. Just rename the argument 'verbosityLevel'. It is easier to use and understand from a user perspective than two booleans (we regularly get confused there in the tests ourselves). Also it'd remove having to deal with the redundant and nonsensical combo It should still accept Also: needs rebase. |
How should it document in the help message that the old behavior is still accepted? |
0115d18
to
ad8fc81
Compare
Rebased and made verbose an int from 0-2 |
@achow101 The old behaviour should be considered deprecated, and therefore not documented. |
src/rpc/blockchain.cpp
Outdated
"\nArguments:\n" | ||
"1. \"hash\" (string, required) The block hash\n" | ||
"2. verbose (boolean, optional, default=true) true for a json object, false for the hex encoded data\n" | ||
"\nResult (for verbose = true):\n" | ||
"2. verbose (boolean, optional, default=1) 0 for hex encoded data, 1 for a json object, and 2 for json object with transaction data\n" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should be renamed to verbosity.
ad8fc81
to
82a491f
Compare
@luke-jr done |
Instead of having verbose and extraVerbose, verbose is just changed to an int. This can have values from 0-2 for each level of verbosity. Github-Pull: bitcoin#8704 Rebased-From: 82a491f446a52953c856e930217f381d3724d20c
merge please? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
utACK
(Needs rebase) |
82a491f
to
9ada7f0
Compare
rebased |
Verbose is changed to an int. This can have values from 0-2 for each level of verbosity. Verbosity level 2 has transaction details displayed in the results.
b779f30
to
e3c9f2d
Compare
@paveljanik I made the change. |
Tested ACK e3c9f2d |
Github-Pull: bitcoin#8704 Rebased-From: e3c9f2d
240189b add testcases for getrawtransaction (John Newbery) ce2bb23 getrawtransaction should take a bool for verbose (jnewbery) (cherry picked from commit 4d8558a2871ec70b9d09028c49fa39e4911435f5) RPC: Allow multiple names for parameters Use a verbosity instead of two verbose parameters Verbose is changed to an int. This can have values from 0-2 for each level of verbosity. Verbosity level 2 has transaction details displayed in the results. (cherry picked from commit e3c9f2ddb1e49f719cc1f3f7cc2a98626bee4364) bitcoin/bitcoin#8704
…ock_v2bitcartel, r=str4d Add improvements to getblock RPC output Includes and supercedes #3095. Includes code cherry-picked from bitcoin/bitcoin#8704.
Add missing versionHex field (dashpay/dash@e7d9ffa) Change to use verbosity syntax (dashpay/dash#2506 and bitcoin/bitcoin#8704)
* Content - RPC - Update quick reference * RPC - Update getblockchaininfo to show BIP-9 progress Related to dashpay/dash#2435 * RPC - Update gobject prepare with new params Use-IS (dashpay/dash#2452) Use specific UTXO for fee (dashpay/dash#2482) * RPC - Update mode name * RPC - Update protx default mode dashpay/dash#2513 * Content - Add spork 17 * Content - Special transactions Add info for Quorum commitment Remove messages not in 13.0 (SubTx) * P2P - Add new txlvote fields masternodeProTxHash (dashpay/dash#2484) quorumModifierHash (dashpay/dash#2505) * RPC - Update protx list Make all options follow the same parameter format (dashpay/dash#2559) * Content - version bump 0.13.0.0 bumped to 70213 (dashpay/dash#2557) * Guide - PrivateSend dstx message limit Up to 5 simultaneous dstxs per MN allowed (dashpay/dash#2552) * RPC - Update getblock Add missing versionHex field (dashpay/dash@e7d9ffa) Change to use verbosity syntax (dashpay/dash#2506 and bitcoin/bitcoin#8704) * P2P - Add qfcommit message (no hexdump example) DIP6 quorum final commitment (dashpay/dash#2477) * P2P - qfcommit typo Change description of llmqType field * P2P - Special tx payload size clarification * Guide - Update MN payment description Related to dashpay/dash#2258 * Guide - fix broken link * Guide - Update some example txs Change to hashes on the chain following the 12.3.4 reset * P2P - Add QcTx hexdump * P2P - DIP4 message updates Add SML entry Update hexdump to include new fields Add getmnlistd and mnlistdiff to cross ref * P2P - minor DIP3-related comments
979bc0c Improve "help-console" message (Hennadii Stepanov) Pull request description: Added a note that results can be queried in the parenthesized syntax as it does not work in the standard syntax. Deprecated (since #8704) boolean `verbose` replaced with numerical `verbosity` in `getblock` examples. Current master (acec9e4): ![screenshot from 2019-01-16 13-40-10](https://user-images.githubusercontent.com/32963518/51248127-d96bfd80-1997-11e9-83d3-47cf157e2f8d.png) Master + this PR: ![screenshot from 2019-01-16 14-00-39](https://user-images.githubusercontent.com/32963518/51248137-e852b000-1997-11e9-94dc-e9c949690beb.png) Tree-SHA512: 663e359ed117306f789fdefcae298194fdd6f5477c87912740e1683323974a333dcca13f17bb2c0aa66639ab7658bd53e535ae8fe671ea5fc557a3db4b192908
979bc0c Improve "help-console" message (Hennadii Stepanov) Pull request description: Added a note that results can be queried in the parenthesized syntax as it does not work in the standard syntax. Deprecated (since bitcoin#8704) boolean `verbose` replaced with numerical `verbosity` in `getblock` examples. Current master (acec9e4): ![screenshot from 2019-01-16 13-40-10](https://user-images.githubusercontent.com/32963518/51248127-d96bfd80-1997-11e9-83d3-47cf157e2f8d.png) Master + this PR: ![screenshot from 2019-01-16 14-00-39](https://user-images.githubusercontent.com/32963518/51248137-e852b000-1997-11e9-94dc-e9c949690beb.png) Tree-SHA512: 663e359ed117306f789fdefcae298194fdd6f5477c87912740e1683323974a333dcca13f17bb2c0aa66639ab7658bd53e535ae8fe671ea5fc557a3db4b192908
979bc0c Improve "help-console" message (Hennadii Stepanov) Pull request description: Added a note that results can be queried in the parenthesized syntax as it does not work in the standard syntax. Deprecated (since bitcoin#8704) boolean `verbose` replaced with numerical `verbosity` in `getblock` examples. Current master (acec9e4): ![screenshot from 2019-01-16 13-40-10](https://user-images.githubusercontent.com/32963518/51248127-d96bfd80-1997-11e9-83d3-47cf157e2f8d.png) Master + this PR: ![screenshot from 2019-01-16 14-00-39](https://user-images.githubusercontent.com/32963518/51248137-e852b000-1997-11e9-94dc-e9c949690beb.png) Tree-SHA512: 663e359ed117306f789fdefcae298194fdd6f5477c87912740e1683323974a333dcca13f17bb2c0aa66639ab7658bd53e535ae8fe671ea5fc557a3db4b192908
979bc0c Improve "help-console" message (Hennadii Stepanov) Pull request description: Added a note that results can be queried in the parenthesized syntax as it does not work in the standard syntax. Deprecated (since bitcoin#8704) boolean `verbose` replaced with numerical `verbosity` in `getblock` examples. Current master (acec9e4): ![screenshot from 2019-01-16 13-40-10](https://user-images.githubusercontent.com/32963518/51248127-d96bfd80-1997-11e9-83d3-47cf157e2f8d.png) Master + this PR: ![screenshot from 2019-01-16 14-00-39](https://user-images.githubusercontent.com/32963518/51248137-e852b000-1997-11e9-94dc-e9c949690beb.png) Tree-SHA512: 663e359ed117306f789fdefcae298194fdd6f5477c87912740e1683323974a333dcca13f17bb2c0aa66639ab7658bd53e535ae8fe671ea5fc557a3db4b192908
979bc0c Improve "help-console" message (Hennadii Stepanov) Pull request description: Added a note that results can be queried in the parenthesized syntax as it does not work in the standard syntax. Deprecated (since bitcoin#8704) boolean `verbose` replaced with numerical `verbosity` in `getblock` examples. Current master (acec9e4): ![screenshot from 2019-01-16 13-40-10](https://user-images.githubusercontent.com/32963518/51248127-d96bfd80-1997-11e9-83d3-47cf157e2f8d.png) Master + this PR: ![screenshot from 2019-01-16 14-00-39](https://user-images.githubusercontent.com/32963518/51248137-e852b000-1997-11e9-94dc-e9c949690beb.png) Tree-SHA512: 663e359ed117306f789fdefcae298194fdd6f5477c87912740e1683323974a333dcca13f17bb2c0aa66639ab7658bd53e535ae8fe671ea5fc557a3db4b192908
Adds an optional parameter extraVerbose to getblock to have transaction details displayed in a getblock call.