Merge #15616: rpc: Clarify decodescript RPCResult doc
fa926ec24f
rpc: Mention all output types in decodescript doc (MarcoFalke)fa3caa1666
rpc: decodescript use IsValidNumArgs over hardcoded check (MarcoFalke)faad33ff15
rpc: Clarify decodescript RPCResult doc (MarcoFalke) Pull request description: * Remove `"hex"` from the decodescript RPCResult doc * Add `"segwit`" to the doc Follow up toa6099ef319
and4f933b3d23
ACKs for commit fa926e: ryanofsky: utACKfa926ec24f
. Only change since last review is listing possible output types in the help string using a new `GetAllOutputTypes` function Tree-SHA512: e6ecc563d04769942567118d50188467bf64ceb276ba6268928d469e8f06621f2ca1ae1e555d3daa6ec22a615ee259bb31c4141c19818d0f53fb6c529b18381b
This commit is contained in:
commit
9e7dc682e0
1 changed files with 34 additions and 13 deletions
|
@ -615,11 +615,19 @@ static UniValue decoderawtransaction(const JSONRPCRequest& request)
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static std::string GetAllOutputTypes()
|
||||||
|
{
|
||||||
|
std::string ret;
|
||||||
|
for (int i = TX_NONSTANDARD; i <= TX_WITNESS_UNKNOWN; ++i) {
|
||||||
|
if (i != TX_NONSTANDARD) ret += ", ";
|
||||||
|
ret += GetTxnOutputType(static_cast<txnouttype>(i));
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
static UniValue decodescript(const JSONRPCRequest& request)
|
static UniValue decodescript(const JSONRPCRequest& request)
|
||||||
{
|
{
|
||||||
if (request.fHelp || request.params.size() != 1)
|
const RPCHelpMan help{"decodescript",
|
||||||
throw std::runtime_error(
|
|
||||||
RPCHelpMan{"decodescript",
|
|
||||||
"\nDecode a hex-encoded script.\n",
|
"\nDecode a hex-encoded script.\n",
|
||||||
{
|
{
|
||||||
{"hexstring", RPCArg::Type::STR_HEX, RPCArg::Optional::NO, "the hex-encoded script"},
|
{"hexstring", RPCArg::Type::STR_HEX, RPCArg::Optional::NO, "the hex-encoded script"},
|
||||||
|
@ -627,21 +635,34 @@ static UniValue decodescript(const JSONRPCRequest& request)
|
||||||
RPCResult{
|
RPCResult{
|
||||||
"{\n"
|
"{\n"
|
||||||
" \"asm\":\"asm\", (string) Script public key\n"
|
" \"asm\":\"asm\", (string) Script public key\n"
|
||||||
" \"hex\":\"hex\", (string) hex-encoded public key\n"
|
" \"type\":\"type\", (string) The output type (e.g. "+GetAllOutputTypes()+")\n"
|
||||||
" \"type\":\"type\", (string) The output type\n"
|
|
||||||
" \"reqSigs\": n, (numeric) The required signatures\n"
|
" \"reqSigs\": n, (numeric) The required signatures\n"
|
||||||
" \"addresses\": [ (json array of string)\n"
|
" \"addresses\": [ (json array of string)\n"
|
||||||
" \"address\" (string) bitcoin address\n"
|
" \"address\" (string) bitcoin address\n"
|
||||||
" ,...\n"
|
" ,...\n"
|
||||||
" ],\n"
|
" ],\n"
|
||||||
" \"p2sh\",\"address\" (string) address of P2SH script wrapping this redeem script (not returned if the script is already a P2SH).\n"
|
" \"p2sh\":\"str\" (string) address of P2SH script wrapping this redeem script (not returned if the script is already a P2SH).\n"
|
||||||
|
" \"segwit\": { (json object) Result of a witness script public key wrapping this redeem script (not returned if the script is a P2SH or witness).\n"
|
||||||
|
" \"asm\":\"str\", (string) String representation of the script public key\n"
|
||||||
|
" \"hex\":\"hexstr\", (string) Hex string of the script public key\n"
|
||||||
|
" \"type\":\"str\", (string) The type of the script public key (e.g. witness_v0_keyhash or witness_v0_scripthash)\n"
|
||||||
|
" \"reqSigs\": n, (numeric) The required signatures (always 1)\n"
|
||||||
|
" \"addresses\": [ (json array of string) (always length 1)\n"
|
||||||
|
" \"address\" (string) segwit address\n"
|
||||||
|
" ,...\n"
|
||||||
|
" ],\n"
|
||||||
|
" \"p2sh-segwit\":\"str\" (string) address of the P2SH script wrapping this witness redeem script.\n"
|
||||||
"}\n"
|
"}\n"
|
||||||
},
|
},
|
||||||
RPCExamples{
|
RPCExamples{
|
||||||
HelpExampleCli("decodescript", "\"hexstring\"")
|
HelpExampleCli("decodescript", "\"hexstring\"")
|
||||||
+ HelpExampleRpc("decodescript", "\"hexstring\"")
|
+ HelpExampleRpc("decodescript", "\"hexstring\"")
|
||||||
},
|
},
|
||||||
}.ToString());
|
};
|
||||||
|
|
||||||
|
if (request.fHelp || !help.IsValidNumArgs(request.params.size())) {
|
||||||
|
throw std::runtime_error(help.ToString());
|
||||||
|
}
|
||||||
|
|
||||||
RPCTypeCheck(request.params, {UniValue::VSTR});
|
RPCTypeCheck(request.params, {UniValue::VSTR});
|
||||||
|
|
||||||
|
@ -653,7 +674,7 @@ static UniValue decodescript(const JSONRPCRequest& request)
|
||||||
} else {
|
} else {
|
||||||
// Empty scripts are valid
|
// Empty scripts are valid
|
||||||
}
|
}
|
||||||
ScriptPubKeyToUniv(script, r, false);
|
ScriptPubKeyToUniv(script, r, /* fIncludeHex */ false);
|
||||||
|
|
||||||
UniValue type;
|
UniValue type;
|
||||||
type = find_value(r, "type");
|
type = find_value(r, "type");
|
||||||
|
@ -687,7 +708,7 @@ static UniValue decodescript(const JSONRPCRequest& request)
|
||||||
// Newer segwit program versions should be considered when then become available.
|
// Newer segwit program versions should be considered when then become available.
|
||||||
segwitScr = GetScriptForDestination(WitnessV0ScriptHash(script));
|
segwitScr = GetScriptForDestination(WitnessV0ScriptHash(script));
|
||||||
}
|
}
|
||||||
ScriptPubKeyToUniv(segwitScr, sr, true);
|
ScriptPubKeyToUniv(segwitScr, sr, /* fIncludeHex */ true);
|
||||||
sr.pushKV("p2sh-segwit", EncodeDestination(CScriptID(segwitScr)));
|
sr.pushKV("p2sh-segwit", EncodeDestination(CScriptID(segwitScr)));
|
||||||
r.pushKV("segwit", sr);
|
r.pushKV("segwit", sr);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue