Changeset View
Changeset View
Standalone View
Standalone View
src/rpc/misc.cpp
Show All 34 Lines | static UniValue validateaddress(const Config &config, | ||||
RPCHelpMan{ | RPCHelpMan{ | ||||
"validateaddress", | "validateaddress", | ||||
"Return information about the given bitcoin address.\n", | "Return information about the given bitcoin address.\n", | ||||
{ | { | ||||
{"address", RPCArg::Type::STR, RPCArg::Optional::NO, | {"address", RPCArg::Type::STR, RPCArg::Optional::NO, | ||||
"The bitcoin address to validate"}, | "The bitcoin address to validate"}, | ||||
}, | }, | ||||
RPCResult{ | RPCResult{ | ||||
"{\n" | RPCResult::Type::OBJ, | ||||
" \"isvalid\" : true|false, (boolean) If the address is " | "", | ||||
"valid or not. If not, this is the only property returned.\n" | "", | ||||
" \"address\" : \"address\", (string) The bitcoin address " | { | ||||
"validated\n" | {RPCResult::Type::BOOL, "isvalid", | ||||
" \"scriptPubKey\" : \"hex\", (string) The hex-encoded " | "If the address is valid or not. If not, this is the only " | ||||
"scriptPubKey generated by the address\n" | "property returned."}, | ||||
" \"isscript\" : true|false, (boolean) If the key is a " | {RPCResult::Type::STR, "address", | ||||
"script\n" | "The bitcoin address validated"}, | ||||
"}\n"}, | {RPCResult::Type::STR_HEX, "scriptPubKey", | ||||
"The hex-encoded scriptPubKey generated by the address"}, | |||||
{RPCResult::Type::BOOL, "isscript", "If the key is a script"}, | |||||
}}, | |||||
RPCExamples{HelpExampleCli("validateaddress", EXAMPLE_ADDRESS) + | RPCExamples{HelpExampleCli("validateaddress", EXAMPLE_ADDRESS) + | ||||
HelpExampleRpc("validateaddress", EXAMPLE_ADDRESS)}, | HelpExampleRpc("validateaddress", EXAMPLE_ADDRESS)}, | ||||
} | } | ||||
.Check(request); | .Check(request); | ||||
CTxDestination dest = | CTxDestination dest = | ||||
DecodeDestination(request.params[0].get_str(), config.GetChainParams()); | DecodeDestination(request.params[0].get_str(), config.GetChainParams()); | ||||
bool isValid = IsValidDestination(dest); | bool isValid = IsValidDestination(dest); | ||||
Show All 31 Lines | RPCHelpMan{ | ||||
RPCArg::Type::ARR, | RPCArg::Type::ARR, | ||||
RPCArg::Optional::NO, | RPCArg::Optional::NO, | ||||
"A json array of hex-encoded public keys.", | "A json array of hex-encoded public keys.", | ||||
{ | { | ||||
{"key", RPCArg::Type::STR_HEX, RPCArg::Optional::OMITTED, | {"key", RPCArg::Type::STR_HEX, RPCArg::Optional::OMITTED, | ||||
"The hex-encoded public key"}, | "The hex-encoded public key"}, | ||||
}}, | }}, | ||||
}, | }, | ||||
RPCResult{"{\n" | RPCResult{ | ||||
" \"address\":\"multisigaddress\", (string) The value of " | RPCResult::Type::OBJ, | ||||
"the new multisig address.\n" | "", | ||||
" \"redeemScript\":\"script\" (string) The string " | "", | ||||
"value of the hex-encoded redemption script.\n" | { | ||||
" \"descriptor\":\"descriptor\" (string) The descriptor " | {RPCResult::Type::STR, "address", | ||||
"for this multisig\n" | "The value of the new multisig address."}, | ||||
"}\n"}, | {RPCResult::Type::STR_HEX, "redeemScript", | ||||
"The string value of the hex-encoded redemption script."}, | |||||
{RPCResult::Type::STR, "descriptor", | |||||
"The descriptor for this multisig"}, | |||||
}}, | |||||
RPCExamples{ | RPCExamples{ | ||||
"\nCreate a multisig address from 2 public keys\n" + | "\nCreate a multisig address from 2 public keys\n" + | ||||
HelpExampleCli("createmultisig", | HelpExampleCli("createmultisig", | ||||
"2 " | "2 " | ||||
"\"[" | "\"[" | ||||
"\\\"03789ed0bb717d88f7d321a368d905e7430207ebbd82bd3" | "\\\"03789ed0bb717d88f7d321a368d905e7430207ebbd82bd3" | ||||
"42cf11ae157a7ace5fd\\\"," | "42cf11ae157a7ace5fd\\\"," | ||||
"\\\"03dbc6764b8884a92e871274b87583e6d5c2a58819473e1" | "\\\"03dbc6764b8884a92e871274b87583e6d5c2a58819473e1" | ||||
▲ Show 20 Lines • Show All 51 Lines • ▼ Show 20 Lines | UniValue getdescriptorinfo(const Config &config, | ||||
const JSONRPCRequest &request) { | const JSONRPCRequest &request) { | ||||
RPCHelpMan{ | RPCHelpMan{ | ||||
"getdescriptorinfo", | "getdescriptorinfo", | ||||
{"Analyses a descriptor.\n"}, | {"Analyses a descriptor.\n"}, | ||||
{ | { | ||||
{"descriptor", RPCArg::Type::STR, RPCArg::Optional::NO, | {"descriptor", RPCArg::Type::STR, RPCArg::Optional::NO, | ||||
"The descriptor."}, | "The descriptor."}, | ||||
}, | }, | ||||
RPCResult{"{\n" | RPCResult{ | ||||
" \"descriptor\" : \"desc\", (string) The " | RPCResult::Type::OBJ, | ||||
"descriptor in canonical form, without private keys\n" | "", | ||||
" \"checksum\" : \"chksum\", (string) The checksum " | "", | ||||
"for the input descriptor\n" | { | ||||
" \"isrange\" : true|false, (boolean) Whether the " | {RPCResult::Type::STR, "descriptor", | ||||
"descriptor is ranged\n" | "The descriptor in canonical form, without private keys"}, | ||||
" \"issolvable\" : true|false, (boolean) Whether the " | {RPCResult::Type::STR, "checksum", | ||||
"descriptor is solvable\n" | "The checksum for the input descriptor"}, | ||||
" \"hasprivatekeys\" : true|false, (boolean) Whether the " | {RPCResult::Type::BOOL, "isrange", | ||||
"input descriptor contained at least one private key\n" | "Whether the descriptor is ranged"}, | ||||
"}\n"}, | {RPCResult::Type::BOOL, "issolvable", | ||||
"Whether the descriptor is solvable"}, | |||||
{RPCResult::Type::BOOL, "hasprivatekeys", | |||||
"Whether the input descriptor contained at least one private " | |||||
"key"}, | |||||
}}, | |||||
RPCExamples{"Analyse a descriptor\n" + | RPCExamples{"Analyse a descriptor\n" + | ||||
HelpExampleCli("getdescriptorinfo", | HelpExampleCli("getdescriptorinfo", | ||||
"\"pkh([d34db33f/84h/0h/" | "\"pkh([d34db33f/84h/0h/" | ||||
"0h]" | "0h]" | ||||
"0279be667ef9dcbbac55a06295Ce870b07029Bfcdb2" | "0279be667ef9dcbbac55a06295Ce870b07029Bfcdb2" | ||||
"dce28d959f2815b16f81798)\"")}} | "dce28d959f2815b16f81798)\"")}} | ||||
.Check(request); | .Check(request); | ||||
Show All 36 Lines | RPCHelpMan{ | ||||
"the doc/descriptors.md file.\n"}, | "the doc/descriptors.md file.\n"}, | ||||
{ | { | ||||
{"descriptor", RPCArg::Type::STR, RPCArg::Optional::NO, | {"descriptor", RPCArg::Type::STR, RPCArg::Optional::NO, | ||||
"The descriptor."}, | "The descriptor."}, | ||||
{"range", RPCArg::Type::RANGE, RPCArg::Optional::OMITTED_NAMED_ARG, | {"range", RPCArg::Type::RANGE, RPCArg::Optional::OMITTED_NAMED_ARG, | ||||
"If a ranged descriptor is used, this specifies the end or the " | "If a ranged descriptor is used, this specifies the end or the " | ||||
"range (in [begin,end] notation) to derive."}, | "range (in [begin,end] notation) to derive."}, | ||||
}, | }, | ||||
RPCResult{"[ address ] (array) the derived addresses\n"}, | RPCResult{ | ||||
RPCResult::Type::ARR, | |||||
"", | |||||
"", | |||||
{ | |||||
{RPCResult::Type::STR, "address", "the derived addresses"}, | |||||
}}, | |||||
RPCExamples{"First three pkh receive addresses\n" + | RPCExamples{"First three pkh receive addresses\n" + | ||||
HelpExampleCli( | HelpExampleCli( | ||||
"deriveaddresses", | "deriveaddresses", | ||||
"\"pkh([d34db33f/84h/0h/0h]" | "\"pkh([d34db33f/84h/0h/0h]" | ||||
"xpub6DJ2dNUysrn5Vt36jH2KLBT2i1auw1tTSSomg8P" | "xpub6DJ2dNUysrn5Vt36jH2KLBT2i1auw1tTSSomg8P" | ||||
"hqNiUtx8QX2SvC9nrHu81fT41fvDUnhMjEzQgXnQjKE" | "hqNiUtx8QX2SvC9nrHu81fT41fvDUnhMjEzQgXnQjKE" | ||||
"u3oaqMSzhSrHMxyyoEAmUHQbY/0/*)#3vhfv5h5\" \"[0,2]\"")}} | "u3oaqMSzhSrHMxyyoEAmUHQbY/0/*)#3vhfv5h5\" \"[0,2]\"")}} | ||||
.Check(request); | .Check(request); | ||||
▲ Show 20 Lines • Show All 70 Lines • ▼ Show 20 Lines | RPCHelpMan{ | ||||
{"address", RPCArg::Type::STR, RPCArg::Optional::NO, | {"address", RPCArg::Type::STR, RPCArg::Optional::NO, | ||||
"The bitcoin address to use for the signature."}, | "The bitcoin address to use for the signature."}, | ||||
{"signature", RPCArg::Type::STR, RPCArg::Optional::NO, | {"signature", RPCArg::Type::STR, RPCArg::Optional::NO, | ||||
"The signature provided by the signer in base 64 encoding (see " | "The signature provided by the signer in base 64 encoding (see " | ||||
"signmessage)."}, | "signmessage)."}, | ||||
{"message", RPCArg::Type::STR, RPCArg::Optional::NO, | {"message", RPCArg::Type::STR, RPCArg::Optional::NO, | ||||
"The message that was signed."}, | "The message that was signed."}, | ||||
}, | }, | ||||
RPCResult{"true|false (boolean) If the signature is verified or " | RPCResult{RPCResult::Type::BOOL, "", | ||||
"not.\n"}, | "If the signature is verified or not."}, | ||||
RPCExamples{ | RPCExamples{ | ||||
"\nUnlock the wallet for 30 seconds\n" + | "\nUnlock the wallet for 30 seconds\n" + | ||||
HelpExampleCli("walletpassphrase", "\"mypassphrase\" 30") + | HelpExampleCli("walletpassphrase", "\"mypassphrase\" 30") + | ||||
"\nCreate the signature\n" + | "\nCreate the signature\n" + | ||||
HelpExampleCli( | HelpExampleCli( | ||||
"signmessage", | "signmessage", | ||||
"\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX\" \"my message\"") + | "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX\" \"my message\"") + | ||||
"\nVerify the signature\n" + | "\nVerify the signature\n" + | ||||
Show All 38 Lines | RPCHelpMan{ | ||||
"signmessagewithprivkey", | "signmessagewithprivkey", | ||||
"Sign a message with the private key of an address\n", | "Sign a message with the private key of an address\n", | ||||
{ | { | ||||
{"privkey", RPCArg::Type::STR, RPCArg::Optional::NO, | {"privkey", RPCArg::Type::STR, RPCArg::Optional::NO, | ||||
"The private key to sign the message with."}, | "The private key to sign the message with."}, | ||||
{"message", RPCArg::Type::STR, RPCArg::Optional::NO, | {"message", RPCArg::Type::STR, RPCArg::Optional::NO, | ||||
"The message to create a signature of."}, | "The message to create a signature of."}, | ||||
}, | }, | ||||
RPCResult{"\"signature\" (string) The signature of the " | RPCResult{RPCResult::Type::STR, "signature", | ||||
"message encoded in base 64\n"}, | "The signature of the message encoded in base 64"}, | ||||
RPCExamples{"\nCreate the signature\n" + | RPCExamples{"\nCreate the signature\n" + | ||||
HelpExampleCli("signmessagewithprivkey", | HelpExampleCli("signmessagewithprivkey", | ||||
"\"privkey\" \"my message\"") + | "\"privkey\" \"my message\"") + | ||||
"\nVerify the signature\n" + | "\nVerify the signature\n" + | ||||
HelpExampleCli("verifymessage", | HelpExampleCli("verifymessage", | ||||
"\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX\" " | "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX\" " | ||||
"\"signature\" \"my message\"") + | "\"signature\" \"my message\"") + | ||||
"\nAs a JSON-RPC call\n" + | "\nAs a JSON-RPC call\n" + | ||||
▲ Show 20 Lines • Show All 144 Lines • ▼ Show 20 Lines | RPCHelpMan{ | ||||
" - \"stats\" returns general statistics about memory usage in " | " - \"stats\" returns general statistics about memory usage in " | ||||
"the daemon.\n" | "the daemon.\n" | ||||
" - \"mallocinfo\" returns an XML string describing low-level " | " - \"mallocinfo\" returns an XML string describing low-level " | ||||
"heap state (only available if compiled with glibc 2.10+)."}, | "heap state (only available if compiled with glibc 2.10+)."}, | ||||
}, | }, | ||||
{ | { | ||||
RPCResult{ | RPCResult{ | ||||
"mode \"stats\"", | "mode \"stats\"", | ||||
"{\n" | RPCResult::Type::OBJ, | ||||
" \"locked\": { (json object) Information about " | "", | ||||
"locked memory manager\n" | "", | ||||
" \"used\": xxxxx, (numeric) Number of bytes used\n" | { | ||||
" \"free\": xxxxx, (numeric) Number of bytes " | {RPCResult::Type::OBJ, | ||||
"available in current arenas\n" | "locked", | ||||
" \"total\": xxxxxxx, (numeric) Total number of bytes " | "Information about locked memory manager", | ||||
"managed\n" | { | ||||
" \"locked\": xxxxxx, (numeric) Amount of bytes that " | {RPCResult::Type::NUM, "used", "Number of bytes used"}, | ||||
"succeeded locking. If this number is smaller than total, " | {RPCResult::Type::NUM, "free", | ||||
"locking pages failed at some point and key data could be " | "Number of bytes available in current arenas"}, | ||||
"swapped to disk.\n" | {RPCResult::Type::NUM, "total", | ||||
" \"chunks_used\": xxxxx, (numeric) Number allocated " | "Total number of bytes managed"}, | ||||
"chunks\n" | {RPCResult::Type::NUM, "locked", | ||||
" \"chunks_free\": xxxxx, (numeric) Number unused chunks\n" | "Amount of bytes that succeeded locking. If this " | ||||
" }\n" | "number is smaller than total, locking pages failed " | ||||
"}\n"}, | "at some point and key data could be swapped to " | ||||
RPCResult{"mode \"mallocinfo\"", "\"<malloc version=\"1\">...\"\n"}, | "disk."}, | ||||
{RPCResult::Type::NUM, "chunks_used", | |||||
"Number allocated chunks"}, | |||||
{RPCResult::Type::NUM, "chunks_free", | |||||
"Number unused chunks"}, | |||||
}}, | |||||
}}, | |||||
RPCResult{"mode \"mallocinfo\"", RPCResult::Type::STR, "", | |||||
"\"<malloc version=\"1\">...\""}, | |||||
}, | }, | ||||
RPCExamples{HelpExampleCli("getmemoryinfo", "") + | RPCExamples{HelpExampleCli("getmemoryinfo", "") + | ||||
HelpExampleRpc("getmemoryinfo", "")}, | HelpExampleRpc("getmemoryinfo", "")}, | ||||
} | } | ||||
.Check(request); | .Check(request); | ||||
std::string mode = | std::string mode = | ||||
request.params[0].isNull() ? "stats" : request.params[0].get_str(); | request.params[0].isNull() ? "stats" : request.params[0].get_str(); | ||||
▲ Show 20 Lines • Show All 65 Lines • ▼ Show 20 Lines | RPCHelpMan{ | ||||
RPCArg::Type::ARR, | RPCArg::Type::ARR, | ||||
RPCArg::Optional::OMITTED_NAMED_ARG, | RPCArg::Optional::OMITTED_NAMED_ARG, | ||||
"A json array of categories to remove debug logging", | "A json array of categories to remove debug logging", | ||||
{ | { | ||||
{"exclude_category", RPCArg::Type::STR, | {"exclude_category", RPCArg::Type::STR, | ||||
RPCArg::Optional::OMITTED, "the valid logging category"}, | RPCArg::Optional::OMITTED, "the valid logging category"}, | ||||
}}, | }}, | ||||
}, | }, | ||||
RPCResult{"{ (json object where keys are the logging " | RPCResult{ | ||||
"categories, and values indicates its status\n" | RPCResult::Type::OBJ_DYN, | ||||
" \"category\": true|false, (bool) if being debug logged " | "", | ||||
"or not. false:inactive, true:active\n" | "keys are the logging categories, and values indicates its status", | ||||
" ...\n" | { | ||||
"}\n"}, | {RPCResult::Type::BOOL, "category", | ||||
"if being debug logged or not. false:inactive, true:active"}, | |||||
}}, | |||||
RPCExamples{ | RPCExamples{ | ||||
HelpExampleCli("logging", "\"[\\\"all\\\"]\" \"[\\\"http\\\"]\"") + | HelpExampleCli("logging", "\"[\\\"all\\\"]\" \"[\\\"http\\\"]\"") + | ||||
HelpExampleRpc("logging", "[\"all\"], [\"libevent\"]")}, | HelpExampleRpc("logging", "[\"all\"], [\"libevent\"]")}, | ||||
} | } | ||||
.Check(request); | .Check(request); | ||||
uint32_t original_log_categories = LogInstance().GetCategoryMask(); | uint32_t original_log_categories = LogInstance().GetCategoryMask(); | ||||
if (request.params[0].isArray()) { | if (request.params[0].isArray()) { | ||||
▲ Show 20 Lines • Show All 86 Lines • Show Last 20 Lines |