Changeset View
Changeset View
Standalone View
Standalone View
src/rpc/mining.cpp
Show First 20 Lines • Show All 99 Lines • ▼ Show 20 Lines | RPCHelpMan{ | ||||
"certain block was found.\n", | "certain block was found.\n", | ||||
{ | { | ||||
{"nblocks", RPCArg::Type::NUM, /* default */ "120", | {"nblocks", RPCArg::Type::NUM, /* default */ "120", | ||||
"The number of blocks, or -1 for blocks since last difficulty " | "The number of blocks, or -1 for blocks since last difficulty " | ||||
"change."}, | "change."}, | ||||
{"height", RPCArg::Type::NUM, /* default */ "-1", | {"height", RPCArg::Type::NUM, /* default */ "-1", | ||||
"To estimate at the time of the given height."}, | "To estimate at the time of the given height."}, | ||||
}, | }, | ||||
RPCResult{"x (numeric) Hashes per second estimated\n"}, | RPCResult{RPCResult::Type::NUM, "", "Hashes per second estimated"}, | ||||
RPCExamples{HelpExampleCli("getnetworkhashps", "") + | RPCExamples{HelpExampleCli("getnetworkhashps", "") + | ||||
HelpExampleRpc("getnetworkhashps", "")}, | HelpExampleRpc("getnetworkhashps", "")}, | ||||
} | } | ||||
.Check(request); | .Check(request); | ||||
LOCK(cs_main); | LOCK(cs_main); | ||||
return GetNetworkHashPS( | return GetNetworkHashPS( | ||||
!request.params[0].isNull() ? request.params[0].get_int() : 120, | !request.params[0].isNull() ? request.params[0].get_int() : 120, | ||||
▲ Show 20 Lines • Show All 72 Lines • ▼ Show 20 Lines | RPCHelpMan{ | ||||
{ | { | ||||
{"num_blocks", RPCArg::Type::NUM, RPCArg::Optional::NO, | {"num_blocks", RPCArg::Type::NUM, RPCArg::Optional::NO, | ||||
"How many blocks are generated immediately."}, | "How many blocks are generated immediately."}, | ||||
{"descriptor", RPCArg::Type::STR, RPCArg::Optional::NO, | {"descriptor", RPCArg::Type::STR, RPCArg::Optional::NO, | ||||
"The descriptor to send the newly generated bitcoin to."}, | "The descriptor to send the newly generated bitcoin to."}, | ||||
{"maxtries", RPCArg::Type::NUM, /* default */ "1000000", | {"maxtries", RPCArg::Type::NUM, /* default */ "1000000", | ||||
"How many iterations to try."}, | "How many iterations to try."}, | ||||
}, | }, | ||||
RPCResult{"[ blockhashes ] (array) hashes of blocks generated\n"}, | RPCResult{RPCResult::Type::ARR, | ||||
"", | |||||
"hashes of blocks generated", | |||||
{ | |||||
{RPCResult::Type::STR_HEX, "", "blockhash"}, | |||||
}}, | |||||
RPCExamples{"\nGenerate 11 blocks to mydesc\n" + | RPCExamples{"\nGenerate 11 blocks to mydesc\n" + | ||||
HelpExampleCli("generatetodescriptor", "11 \"mydesc\"")}, | HelpExampleCli("generatetodescriptor", "11 \"mydesc\"")}, | ||||
} | } | ||||
.Check(request); | .Check(request); | ||||
const int num_blocks{request.params[0].get_int()}; | const int num_blocks{request.params[0].get_int()}; | ||||
const int64_t max_tries{ | const int64_t max_tries{ | ||||
request.params[2].isNull() ? 1000000 : request.params[2].get_int()}; | request.params[2].isNull() ? 1000000 : request.params[2].get_int()}; | ||||
Show All 36 Lines | RPCHelpMan{ | ||||
{ | { | ||||
{"nblocks", RPCArg::Type::NUM, RPCArg::Optional::NO, | {"nblocks", RPCArg::Type::NUM, RPCArg::Optional::NO, | ||||
"How many blocks are generated immediately."}, | "How many blocks are generated immediately."}, | ||||
{"address", RPCArg::Type::STR, RPCArg::Optional::NO, | {"address", RPCArg::Type::STR, RPCArg::Optional::NO, | ||||
"The address to send the newly generated bitcoin to."}, | "The address to send the newly generated bitcoin to."}, | ||||
{"maxtries", RPCArg::Type::NUM, /* default */ "1000000", | {"maxtries", RPCArg::Type::NUM, /* default */ "1000000", | ||||
"How many iterations to try."}, | "How many iterations to try."}, | ||||
}, | }, | ||||
RPCResult{"[ blockhashes ] (array) hashes of blocks generated\n"}, | RPCResult{RPCResult::Type::ARR, | ||||
"", | |||||
"hashes of blocks generated", | |||||
{ | |||||
{RPCResult::Type::STR_HEX, "", "blockhash"}, | |||||
}}, | |||||
RPCExamples{ | RPCExamples{ | ||||
"\nGenerate 11 blocks to myaddress\n" + | "\nGenerate 11 blocks to myaddress\n" + | ||||
HelpExampleCli("generatetoaddress", "11 \"myaddress\"") + | HelpExampleCli("generatetoaddress", "11 \"myaddress\"") + | ||||
"If you are running the Bitcoin ABC wallet, you can get a new " | "If you are running the Bitcoin ABC wallet, you can get a new " | ||||
"address to send the newly generated bitcoin to with:\n" + | "address to send the newly generated bitcoin to with:\n" + | ||||
HelpExampleCli("getnewaddress", "")}, | HelpExampleCli("getnewaddress", "")}, | ||||
} | } | ||||
.Check(request); | .Check(request); | ||||
Show All 22 Lines | |||||
static UniValue getmininginfo(const Config &config, | static UniValue getmininginfo(const Config &config, | ||||
const JSONRPCRequest &request) { | const JSONRPCRequest &request) { | ||||
RPCHelpMan{ | RPCHelpMan{ | ||||
"getmininginfo", | "getmininginfo", | ||||
"Returns a json object containing mining-related " | "Returns a json object containing mining-related " | ||||
"information.", | "information.", | ||||
{}, | {}, | ||||
RPCResult{ | RPCResult{ | ||||
"{\n" | RPCResult::Type::OBJ, | ||||
" \"blocks\": nnn, (numeric) The current block\n" | "", | ||||
" \"currentblocksize\": nnn, (numeric, optional) The block size " | "", | ||||
"of the last assembled block (only present if a block was ever " | { | ||||
"assembled)\n" | {RPCResult::Type::NUM, "blocks", "The current block"}, | ||||
" \"currentblocktx\": nnn, (numeric, optional) The number of " | {RPCResult::Type::NUM, "currentblocksize", /* optional */ true, | ||||
"block transactions of the last assembled block (only present if a " | "The block size of the last assembled block (only present if " | ||||
"block was ever assembled)\n" | "a block was ever assembled)"}, | ||||
" \"difficulty\": xxx.xxxxx (numeric) The current difficulty\n" | {RPCResult::Type::NUM, "currentblocktx", /* optional */ true, | ||||
" \"networkhashps\": nnn, (numeric) The network hashes per " | "The number of block transactions of the last assembled block " | ||||
"second\n" | "(only present if a block was ever assembled)"}, | ||||
" \"pooledtx\": n (numeric) The size of the mempool\n" | {RPCResult::Type::NUM, "difficulty", "The current difficulty"}, | ||||
" \"chain\": \"xxxx\", (string) current network name as " | {RPCResult::Type::NUM, "networkhashps", | ||||
"defined in BIP70 (main, test, regtest)\n" | "The network hashes per second"}, | ||||
" \"warnings\": \"...\" (string) any network and " | {RPCResult::Type::NUM, "pooledtx", "The size of the mempool"}, | ||||
"blockchain warnings\n" | {RPCResult::Type::STR, "chain", | ||||
"}\n"}, | "current network name (main, test, regtest)"}, | ||||
{RPCResult::Type::STR, "warnings", | |||||
"any network and blockchain warnings"}, | |||||
}}, | |||||
RPCExamples{HelpExampleCli("getmininginfo", "") + | RPCExamples{HelpExampleCli("getmininginfo", "") + | ||||
HelpExampleRpc("getmininginfo", "")}, | HelpExampleRpc("getmininginfo", "")}, | ||||
} | } | ||||
.Check(request); | .Check(request); | ||||
LOCK(cs_main); | LOCK(cs_main); | ||||
const CTxMemPool &mempool = EnsureMemPool(request.context); | const CTxMemPool &mempool = EnsureMemPool(request.context); | ||||
Show All 31 Lines | RPCHelpMan{ | ||||
"use named arguments and omit this parameter."}, | "use named arguments and omit this parameter."}, | ||||
{"fee_delta", RPCArg::Type::NUM, RPCArg::Optional::NO, | {"fee_delta", RPCArg::Type::NUM, RPCArg::Optional::NO, | ||||
"The fee value (in satoshis) to add (or subtract, if negative).\n" | "The fee value (in satoshis) to add (or subtract, if negative).\n" | ||||
" The fee is not actually paid, only the " | " The fee is not actually paid, only the " | ||||
"algorithm for selecting transactions into a block\n" | "algorithm for selecting transactions into a block\n" | ||||
" considers the transaction as it would " | " considers the transaction as it would " | ||||
"have paid a higher (or lower) fee."}, | "have paid a higher (or lower) fee."}, | ||||
}, | }, | ||||
RPCResult{"true (boolean) Returns true\n"}, | RPCResult{RPCResult::Type::BOOL, "", "Returns true"}, | ||||
RPCExamples{ | RPCExamples{ | ||||
HelpExampleCli("prioritisetransaction", "\"txid\" 0.0 10000") + | HelpExampleCli("prioritisetransaction", "\"txid\" 0.0 10000") + | ||||
HelpExampleRpc("prioritisetransaction", "\"txid\", 0.0, 10000")}, | HelpExampleRpc("prioritisetransaction", "\"txid\", 0.0, 10000")}, | ||||
} | } | ||||
.Check(request); | .Check(request); | ||||
LOCK(cs_main); | LOCK(cs_main); | ||||
▲ Show 20 Lines • Show All 76 Lines • ▼ Show 20 Lines | RPCHelpMan{ | ||||
"'coinbasetxn', 'coinbasevalue', 'proposal', " | "'coinbasetxn', 'coinbasevalue', 'proposal', " | ||||
"'serverlist', 'workid'"}, | "'serverlist', 'workid'"}, | ||||
}, | }, | ||||
}, | }, | ||||
}, | }, | ||||
"\"template_request\""}, | "\"template_request\""}, | ||||
}, | }, | ||||
RPCResult{ | RPCResult{ | ||||
"{\n" | RPCResult::Type::OBJ, | ||||
" \"version\" : n, (numeric) The preferred " | "", | ||||
"block version\n" | "", | ||||
" \"previousblockhash\" : \"xxxx\", (string) The hash of " | { | ||||
"current highest block\n" | {RPCResult::Type::NUM, "version", | ||||
" \"transactions\" : [ (array) contents of " | "The preferred block version"}, | ||||
"non-coinbase transactions that should be included in the next " | {RPCResult::Type::STR, "previousblockhash", | ||||
"block\n" | "The hash of current highest block"}, | ||||
" {\n" | {RPCResult::Type::ARR, | ||||
" \"data\" : \"xxxx\", (string) transaction " | "transactions", | ||||
"data encoded in hexadecimal (byte-for-byte)\n" | "contents of non-coinbase transactions that should be " | ||||
" \"txid\" : \"xxxx\", (string) transaction id " | "included in the next block", | ||||
"encoded in little-endian hexadecimal\n" | { | ||||
" \"hash\" : \"xxxx\", (string) hash encoded " | {RPCResult::Type::OBJ, | ||||
"in little-endian hexadecimal\n" | "", | ||||
" \"depends\" : [ (array) array of numbers " | "", | ||||
"\n" | { | ||||
" n (numeric) transactions " | {RPCResult::Type::STR_HEX, "data", | ||||
"before this one (by 1-based index in 'transactions' list) that " | "transaction data encoded in hexadecimal " | ||||
"must be present in the final block if this one is\n" | "(byte-for-byte)"}, | ||||
" ,...\n" | {RPCResult::Type::STR_HEX, "txid", | ||||
" ],\n" | "transaction id encoded in little-endian " | ||||
" \"fee\": n, (numeric) difference in " | "hexadecimal"}, | ||||
"value between transaction inputs and outputs (in satoshis); for " | {RPCResult::Type::STR_HEX, "hash", | ||||
"coinbase transactions, this is a negative number of the total " | "hash encoded in little-endian hexadecimal " | ||||
"collected block fees (ie, not including the block subsidy); if " | "(including witness data)"}, | ||||
Fabien: Revert | |||||
"key is not present, fee is unknown and clients MUST NOT assume " | {RPCResult::Type::ARR, | ||||
"there isn't one\n" | "depends", | ||||
" \"sigops\" : n, (numeric) total SigOps " | "array of numbers", | ||||
"count, as counted for purposes of block limits; if key is not " | { | ||||
"present, sigop count is unknown and clients MUST NOT assume it is " | {RPCResult::Type::NUM, "", | ||||
"zero\n" | "transactions before this one (by 1-based " | ||||
" }\n" | "index in 'transactions' list) that must be " | ||||
" ,...\n" | "present in the final block if this one is"}, | ||||
" ],\n" | }}, | ||||
" \"coinbaseaux\" : { (json object) data that " | {RPCResult::Type::NUM, "fee", | ||||
"should be included in the coinbase's scriptSig content\n" | "difference in value between transaction inputs and " | ||||
" \"flags\" : \"xx\" (string) key name is to " | "outputs (in satoshis); for coinbase transactions, " | ||||
"be ignored, and value included in scriptSig\n" | "this is a negative Number of the total collected " | ||||
" },\n" | "block fees (ie, not including the block subsidy); " | ||||
" \"coinbasevalue\" : n, (numeric) maximum allowable " | "if key is not present, fee is unknown and clients " | ||||
"input to coinbase transaction, including the generation award and " | "MUST NOT assume there isn't one"}, | ||||
"transaction fees (in satoshis)\n" | {RPCResult::Type::NUM, "sigops", | ||||
" \"coinbasetxn\" : { (json object) information " | "total SigOps cost, as counted for purposes of " | ||||
"for coinbase transaction\n" | "block limits; if key is not present, sigop cost is " | ||||
" \"minerfund\" : { (json object) information " | "unknown and clients MUST NOT assume it is zero"}, | ||||
"related to the coinbase miner fund\n" | }}, | ||||
" \"addresses\" : [ ... ], (array) List of valid " | }}, | ||||
"addresses for the miner fund output\n" | {RPCResult::Type::OBJ, | ||||
" \"minimumvalue\" : n, (numeric) The minimum " | "coinbaseaux", | ||||
"value the miner fund output must pay\n" | "data that should be included in the coinbase's scriptSig " | ||||
" },\n" | "content", | ||||
" },\n" | { | ||||
" \"target\" : \"xxxx\", (string) The hash target\n" | {RPCResult::Type::ELISION, "", ""}, | ||||
" \"mintime\" : xxx, (numeric) The minimum " | }}, | ||||
"timestamp appropriate for the next block time, expressed in " + | {RPCResult::Type::NUM, "coinbasevalue", | ||||
UNIX_EPOCH_TIME + | "maximum allowable input to coinbase transaction, including " | ||||
"\n" | "the generation award and transaction fees (in satoshis)"}, | ||||
" \"mutable\" : [ (array of string) list of " | {RPCResult::Type::OBJ, | ||||
"ways the block template may be changed \n" | "coinbasetxn", | ||||
" \"value\" (string) A way the block " | "information for coinbase transaction", | ||||
"template may be changed, e.g. 'time', 'transactions', " | { | ||||
"'prevblock'\n" | {RPCResult::Type::OBJ, | ||||
" ,...\n" | "minerfund", | ||||
" ],\n" | "information related to the coinbase miner fund", | ||||
" \"noncerange\" : \"00000000ffffffff\",(string) A range of valid " | { | ||||
"nonces\n" | |||||
" \"sigoplimit\" : n, (numeric) limit of sigops " | {RPCResult::Type::ARR, | ||||
"in blocks\n" | "addresses", | ||||
" \"sizelimit\" : n, (numeric) limit of block " | "List of valid addresses for the miner fund output", | ||||
"size\n" | { | ||||
" \"curtime\" : ttt, (numeric) current timestamp " | {RPCResult::Type::ELISION, "", ""}, | ||||
"in seconds since " + | }}, | ||||
UNIX_EPOCH_TIME + | |||||
"\n" | {RPCResult::Type::STR_AMOUNT, "minimumvalue", | ||||
" \"bits\" : \"xxxxxxxx\", (string) compressed " | "The minimum value the miner fund output must pay"}, | ||||
"target of next block\n" | |||||
" \"height\" : n (numeric) The height of the " | }}, | ||||
"next block\n" | {RPCResult::Type::ELISION, "", ""}, | ||||
"}\n"}, | }}, | ||||
{RPCResult::Type::STR, "target", "The hash target"}, | |||||
{RPCResult::Type::NUM_TIME, "mintime", | |||||
"The minimum timestamp appropriate for the next block time, " | |||||
"expressed in " + | |||||
UNIX_EPOCH_TIME}, | |||||
{RPCResult::Type::ARR, | |||||
"mutable", | |||||
"list of ways the block template may be changed", | |||||
{ | |||||
{RPCResult::Type::STR, "value", | |||||
"A way the block template may be changed, e.g. 'time', " | |||||
"'transactions', 'prevblock'"}, | |||||
}}, | |||||
{RPCResult::Type::STR_HEX, "noncerange", | |||||
"A range of valid nonces"}, | |||||
{RPCResult::Type::NUM, "sigoplimit", | |||||
"limit of sigops in blocks"}, | |||||
{RPCResult::Type::NUM, "sizelimit", "limit of block size"}, | |||||
{RPCResult::Type::NUM_TIME, "curtime", | |||||
"current timestamp in " + UNIX_EPOCH_TIME}, | |||||
{RPCResult::Type::STR, "bits", | |||||
"compressed target of next block"}, | |||||
{RPCResult::Type::NUM, "height", | |||||
"The height of the next block"}, | |||||
}}, | |||||
RPCExamples{HelpExampleCli("getblocktemplate", "") + | RPCExamples{HelpExampleCli("getblocktemplate", "") + | ||||
HelpExampleRpc("getblocktemplate", "")}, | HelpExampleRpc("getblocktemplate", "")}, | ||||
} | } | ||||
.Check(request); | .Check(request); | ||||
LOCK(cs_main); | LOCK(cs_main); | ||||
const CChainParams &chainparams = config.GetChainParams(); | const CChainParams &chainparams = config.GetChainParams(); | ||||
▲ Show 20 Lines • Show All 348 Lines • ▼ Show 20 Lines | RPCHelpMan{ | ||||
"submitheader", | "submitheader", | ||||
"Decode the given hexdata as a header and submit it as a candidate " | "Decode the given hexdata as a header and submit it as a candidate " | ||||
"chain tip if valid." | "chain tip if valid." | ||||
"\nThrows when the header is invalid.\n", | "\nThrows when the header is invalid.\n", | ||||
{ | { | ||||
{"hexdata", RPCArg::Type::STR_HEX, RPCArg::Optional::NO, | {"hexdata", RPCArg::Type::STR_HEX, RPCArg::Optional::NO, | ||||
"the hex-encoded block header data"}, | "the hex-encoded block header data"}, | ||||
}, | }, | ||||
RPCResult{"None"}, | RPCResult{RPCResult::Type::NONE, "", "None"}, | ||||
RPCExamples{HelpExampleCli("submitheader", "\"aabbcc\"") + | RPCExamples{HelpExampleCli("submitheader", "\"aabbcc\"") + | ||||
HelpExampleRpc("submitheader", "\"aabbcc\"")}, | HelpExampleRpc("submitheader", "\"aabbcc\"")}, | ||||
} | } | ||||
.Check(request); | .Check(request); | ||||
CBlockHeader h; | CBlockHeader h; | ||||
if (!DecodeHexBlockHeader(h, request.params[0].get_str())) { | if (!DecodeHexBlockHeader(h, request.params[0].get_str())) { | ||||
throw JSONRPCError(RPC_DESERIALIZATION_ERROR, | throw JSONRPCError(RPC_DESERIALIZATION_ERROR, | ||||
Show All 21 Lines | |||||
static UniValue estimatefee(const Config &config, | static UniValue estimatefee(const Config &config, | ||||
const JSONRPCRequest &request) { | const JSONRPCRequest &request) { | ||||
RPCHelpMan{ | RPCHelpMan{ | ||||
"estimatefee", | "estimatefee", | ||||
"Estimates the approximate fee per kilobyte needed for a " | "Estimates the approximate fee per kilobyte needed for a " | ||||
"transaction\n", | "transaction\n", | ||||
{}, | {}, | ||||
RPCResult{"n (numeric) estimated fee-per-kilobyte\n"}, | RPCResult{RPCResult::Type::NUM, "", "estimated fee-per-kilobyte"}, | ||||
RPCExamples{HelpExampleCli("estimatefee", "")}, | RPCExamples{HelpExampleCli("estimatefee", "")}, | ||||
} | } | ||||
.Check(request); | .Check(request); | ||||
const CTxMemPool &mempool = EnsureMemPool(request.context); | const CTxMemPool &mempool = EnsureMemPool(request.context); | ||||
return ValueFromAmount(mempool.estimateFee().GetFeePerK()); | return ValueFromAmount(mempool.estimateFee().GetFeePerK()); | ||||
} | } | ||||
Show All 23 Lines |
Revert