-
Notifications
You must be signed in to change notification settings - Fork 37.7k
cli: add -generate option #17700
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
cli: add -generate option #17700
Conversation
Concept ACK, seems useful for testing |
Mind adding some test to test/functional/interface_bitcoin_cli.py? |
Yes, I spoke about it in the original posting, but I am not sure how to do it the correct way. But I'll look into it. |
@brakmic something like call |
I've added tests in test/functional/rpc_generate.py The current test checks for:
|
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.
ACK
Co-Authored-By: MarcoFalke <falke.marco@gmail.com>
Co-Authored-By: MarcoFalke <falke.marco@gmail.com>
Nice. |
I'm definitely opposed to adding more mining functionality back server-side. But I guess in the longer term we could have a new library that's shared between the GUI console and cli, for these kind of features. I think GUI is out of scope here though. |
Concept ACK. I did a little playing around with this and had two main pieces of feedback:
I think returning a blockhash string similar to |
I've changed the structure of JSON result and it now looks like this: ./src/bitcoin-cli -regtest -generate 3
{
"address": "bcrt1qxwysj6war3v4jf6kcderstxsecq534umcalefc",
"blocks": [
"6f78253c94c0e5b180ae7002c366811a9f70a32b70fc17a81e42fd69d351ecf9",
"46f1b2790fe2e973fe67531c1acb7f29298005a5107b80cd56d510050599316b",
"34d3c018be1455fcfd40a07ba5e55f245af9515e9e9f50116f4948399378ff59"
]
} |
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.
Concept ACK
Concept NACK |
Please, check the original discussion which this PR is based on: #16000 |
@brakmic I flew over the old discussion but I saw that the old point wasn't pointed out somewhere. |
Old point? Not sure what you mean with it. All in all, the reason for "resurrecting" this retired API call is to create something that behaves similarly to -getinfo. As we all know, In the past getinfo was one of the RPC calls that later got removed (and subsequently reintroduced as a CLI-only -getinfo option). Now, the same should happen with -generate which is not an RPC call but a purely CLI-thing. In a way, it already functions like a shell script would do (and could also itself be reused in other shell scripts too, in my opinion). I hope my explanation helps you further. |
The following sections might be updated with supplementary metadata relevant to reviewers and maintainers. ConflictsReviewers, this pull request conflicts with the following ones:
If you consider this pull request important, please also help to review the conflicting pull requests. Ideally, start with the one that should be merged first. |
Hi @brakmic, would you have any objection if I relaunch and update this, building on some of your commits? |
No problem. Take anything that could be of use to you. |
22cb303 rpc: add missing space in JSON parsing error message, update test (Jon Atack) bf53ebe test: add multiwallet tests for bitcoin-cli -generate (Jon Atack) 4b859cf cli: add multiwallet capability to GetNewAddress and -generate (Jon Atack) 18f9354 test: add tests for bitcoin-cli -generate (Jon Atack) 4818124 cli: create bitcoin-cli -generate command (Jon Atack) ff41a36 cli: extract ParseResult() and ParseError() (Jon Atack) f4185b2 cli: create GenerateToAddressRequestHandler class (Harris) f7c65a3 cli: create GetNewAddress() (Jon Atack) 9be7fd3 rpc: make generatetoaddress locals const (Jon Atack) cb00510 rpc: create rpc/mining.h, hoist default max tries values to constant (Jon Atack) Pull request description: This PR continues and completes the work begun in #17700 working on issue #16000 to create a client-side version of RPC `generate`. Basically, `bitcoin-cli -generate` wraps calling `generatenewaddress` followed by `generatetoaddress [nblocks] [maxtries]` and prints the following: ``` $ bitcoin-cli -generate { "address": "bcrt1qn4aszr2y2xvpa70y675a76wsu70wlkwvdyyln6" "blocks": [ "01d2ebcddf663da90b28da7f6805115e2ba7818f16fe747258836646a43a0bb5", ] } $ bitcoin-cli -rpcwallet=wallet-name -generate 3 100 { "address": "bcrt1q4cunfw0gnsj7g7e6mk0v0uuvvau9mwr09dj45l", "blocks": [ "7a6650ca5e0c614992ee64fb148a7e5e022af842e4b6003f81abd8baf1e75136", "01d2ebcddf663da90b28da7f6805115e2ba7818f16fe747258836646a43a0bb5", "3f8795ec40b1ad812b818c177680841be319a3f6753d4e32dc7dfb5bafe5d00e" ] } ``` Help doc: ``` $ bitcoin-cli -h | grep -A5 "\-generate" -generate Generate blocks immediately, equivalent to RPC generatenewaddress followed by RPC generatetoaddress. Optional positional arguments are number of blocks to generate (default: 1) and maximum iterations to try (default: 1000000), equivalent to RPC generatetoaddress nblocks and maxtries arguments. Example: bitcoin-cli -generate 4 1000 ``` Quite a bit of test coverage turned out to be needed to cover the change and the different cases (arguments, multiwallet mode) and error-handling. This PR also improves some things that working on these changes brought to light. Credit to Harris Brakmić for the initial work in #17700. ACKs for top commit: adamjonas: utACK 22cb303 meshcollider: utACK 22cb303 Tree-SHA512: 94f67f632fe093d076f614e0ecff09ce7342ac6e424579200d5211a6615260e438d857861767fb788950ec6da0b26ef56dc8268c430012a3b3d4822b24ca6fbf
22cb303 rpc: add missing space in JSON parsing error message, update test (Jon Atack) bf53ebe test: add multiwallet tests for bitcoin-cli -generate (Jon Atack) 4b859cf cli: add multiwallet capability to GetNewAddress and -generate (Jon Atack) 18f9354 test: add tests for bitcoin-cli -generate (Jon Atack) 4818124 cli: create bitcoin-cli -generate command (Jon Atack) ff41a36 cli: extract ParseResult() and ParseError() (Jon Atack) f4185b2 cli: create GenerateToAddressRequestHandler class (Harris) f7c65a3 cli: create GetNewAddress() (Jon Atack) 9be7fd3 rpc: make generatetoaddress locals const (Jon Atack) cb00510 rpc: create rpc/mining.h, hoist default max tries values to constant (Jon Atack) Pull request description: This PR continues and completes the work begun in bitcoin#17700 working on issue bitcoin#16000 to create a client-side version of RPC `generate`. Basically, `bitcoin-cli -generate` wraps calling `generatenewaddress` followed by `generatetoaddress [nblocks] [maxtries]` and prints the following: ``` $ bitcoin-cli -generate { "address": "bcrt1qn4aszr2y2xvpa70y675a76wsu70wlkwvdyyln6" "blocks": [ "01d2ebcddf663da90b28da7f6805115e2ba7818f16fe747258836646a43a0bb5", ] } $ bitcoin-cli -rpcwallet=wallet-name -generate 3 100 { "address": "bcrt1q4cunfw0gnsj7g7e6mk0v0uuvvau9mwr09dj45l", "blocks": [ "7a6650ca5e0c614992ee64fb148a7e5e022af842e4b6003f81abd8baf1e75136", "01d2ebcddf663da90b28da7f6805115e2ba7818f16fe747258836646a43a0bb5", "3f8795ec40b1ad812b818c177680841be319a3f6753d4e32dc7dfb5bafe5d00e" ] } ``` Help doc: ``` $ bitcoin-cli -h | grep -A5 "\-generate" -generate Generate blocks immediately, equivalent to RPC generatenewaddress followed by RPC generatetoaddress. Optional positional arguments are number of blocks to generate (default: 1) and maximum iterations to try (default: 1000000), equivalent to RPC generatetoaddress nblocks and maxtries arguments. Example: bitcoin-cli -generate 4 1000 ``` Quite a bit of test coverage turned out to be needed to cover the change and the different cases (arguments, multiwallet mode) and error-handling. This PR also improves some things that working on these changes brought to light. Credit to Harris Brakmić for the initial work in bitcoin#17700. ACKs for top commit: adamjonas: utACK 22cb303 meshcollider: utACK 22cb303 Tree-SHA512: 94f67f632fe093d076f614e0ecff09ce7342ac6e424579200d5211a6615260e438d857861767fb788950ec6da0b26ef56dc8268c430012a3b3d4822b24ca6fbf
f0aa8ae test: add rpc_generate functional test (Jon Atack) 92d94ff rpc: print useful help and error message for generate (Jon Atack) 8d32d20 test: consider generate covered in _get_uncovered_rpc_commands() (Jon Atack) Pull request description: This was a requested follow-up to #19133 and #17700 to alleviate confusion and head-scratching by people following tutorials that use `generate`. See #19455 (comment) below, #19133 (comment) and #17700 (comment). before ``` $ bitcoin-cli help generate help: unknown command: generate $ bitcoin-cli generate error code: -32601 error message: Method not found ``` after ``` $ bitcoin-cli help generate generate ( nblocks maxtries ) has been replaced by the -generate cli option. Refer to -help for more information. $ bitcoin-cli generate error code: -32601 error message: generate ( nblocks maxtries ) has been replaced by the -generate cli option. Refer to -help for more information. ``` In the general help it remains hidden, as requested by laanwj. ``` $ bitcoin-cli help == Generating == generateblock "output" ["rawtx/txid",...] generatetoaddress nblocks "address" ( maxtries ) generatetodescriptor num_blocks "descriptor" ( maxtries ) ``` ACKs for top commit: adamjonas: utACK f0aa8ae pinheadmz: ACK f0aa8ae Tree-SHA512: d083652589ad3e8228c733455245001db22397559c3946e7e573cf9bd01c46e9e88b72d934728ec7f4361436ae4c74adb8f579670b09f479011924357e729af5
f0aa8ae test: add rpc_generate functional test (Jon Atack) 92d94ff rpc: print useful help and error message for generate (Jon Atack) 8d32d20 test: consider generate covered in _get_uncovered_rpc_commands() (Jon Atack) Pull request description: This was a requested follow-up to bitcoin#19133 and bitcoin#17700 to alleviate confusion and head-scratching by people following tutorials that use `generate`. See bitcoin#19455 (comment) below, bitcoin#19133 (comment) and bitcoin#17700 (comment). before ``` $ bitcoin-cli help generate help: unknown command: generate $ bitcoin-cli generate error code: -32601 error message: Method not found ``` after ``` $ bitcoin-cli help generate generate ( nblocks maxtries ) has been replaced by the -generate cli option. Refer to -help for more information. $ bitcoin-cli generate error code: -32601 error message: generate ( nblocks maxtries ) has been replaced by the -generate cli option. Refer to -help for more information. ``` In the general help it remains hidden, as requested by laanwj. ``` $ bitcoin-cli help == Generating == generateblock "output" ["rawtx/txid",...] generatetoaddress nblocks "address" ( maxtries ) generatetodescriptor num_blocks "descriptor" ( maxtries ) ``` ACKs for top commit: adamjonas: utACK f0aa8ae pinheadmz: ACK f0aa8ae Tree-SHA512: d083652589ad3e8228c733455245001db22397559c3946e7e573cf9bd01c46e9e88b72d934728ec7f4361436ae4c74adb8f579670b09f479011924357e729af5
This PR is related to #16000 and should "bring back" the generate call.
bitcoin-cli would get a new option -generate that mimics the original API.
The allowed (optional) parameters are nblocks and maxtries.
For example:
bitcoin-cli -generate
bitcoin-cli -generate 2
bitcoin-cli -generate 3 10000