Add RPC call decodescript
This commit is contained in:
parent
463c9710f5
commit
be066fad7d
@ -280,6 +280,7 @@ static const CRPCCommand vRPCCommands[] =
|
|||||||
{ "getrawtransaction", &getrawtransaction, false, false },
|
{ "getrawtransaction", &getrawtransaction, false, false },
|
||||||
{ "createrawtransaction", &createrawtransaction, false, false },
|
{ "createrawtransaction", &createrawtransaction, false, false },
|
||||||
{ "decoderawtransaction", &decoderawtransaction, false, false },
|
{ "decoderawtransaction", &decoderawtransaction, false, false },
|
||||||
|
{ "decodescript", &decodescript, false, false },
|
||||||
{ "signrawtransaction", &signrawtransaction, false, false },
|
{ "signrawtransaction", &signrawtransaction, false, false },
|
||||||
{ "sendrawtransaction", &sendrawtransaction, false, false },
|
{ "sendrawtransaction", &sendrawtransaction, false, false },
|
||||||
{ "gettxoutsetinfo", &gettxoutsetinfo, true, false },
|
{ "gettxoutsetinfo", &gettxoutsetinfo, true, false },
|
||||||
|
@ -207,6 +207,7 @@ extern json_spirit::Value lockunspent(const json_spirit::Array& params, bool fHe
|
|||||||
extern json_spirit::Value listlockunspent(const json_spirit::Array& params, bool fHelp);
|
extern json_spirit::Value listlockunspent(const json_spirit::Array& params, bool fHelp);
|
||||||
extern json_spirit::Value createrawtransaction(const json_spirit::Array& params, bool fHelp);
|
extern json_spirit::Value createrawtransaction(const json_spirit::Array& params, bool fHelp);
|
||||||
extern json_spirit::Value decoderawtransaction(const json_spirit::Array& params, bool fHelp);
|
extern json_spirit::Value decoderawtransaction(const json_spirit::Array& params, bool fHelp);
|
||||||
|
extern json_spirit::Value decodescript(const json_spirit::Array& params, bool fHelp);
|
||||||
extern json_spirit::Value signrawtransaction(const json_spirit::Array& params, bool fHelp);
|
extern json_spirit::Value signrawtransaction(const json_spirit::Array& params, bool fHelp);
|
||||||
extern json_spirit::Value sendrawtransaction(const json_spirit::Array& params, bool fHelp);
|
extern json_spirit::Value sendrawtransaction(const json_spirit::Array& params, bool fHelp);
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
using namespace json_spirit;
|
using namespace json_spirit;
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
void ScriptPubKeyToJSON(const CScript& scriptPubKey, Object& out);
|
void ScriptPubKeyToJSON(const CScript& scriptPubKey, Object& out, bool fIncludeHex);
|
||||||
|
|
||||||
double GetDifficulty(const CBlockIndex* blockindex)
|
double GetDifficulty(const CBlockIndex* blockindex)
|
||||||
{
|
{
|
||||||
@ -245,7 +245,7 @@ Value gettxout(const Array& params, bool fHelp)
|
|||||||
ret.push_back(Pair("confirmations", pcoinsTip->GetBestBlock()->nHeight - coins.nHeight + 1));
|
ret.push_back(Pair("confirmations", pcoinsTip->GetBestBlock()->nHeight - coins.nHeight + 1));
|
||||||
ret.push_back(Pair("value", ValueFromAmount(coins.vout[n].nValue)));
|
ret.push_back(Pair("value", ValueFromAmount(coins.vout[n].nValue)));
|
||||||
Object o;
|
Object o;
|
||||||
ScriptPubKeyToJSON(coins.vout[n].scriptPubKey, o);
|
ScriptPubKeyToJSON(coins.vout[n].scriptPubKey, o, true);
|
||||||
ret.push_back(Pair("scriptPubKey", o));
|
ret.push_back(Pair("scriptPubKey", o));
|
||||||
ret.push_back(Pair("version", coins.nVersion));
|
ret.push_back(Pair("version", coins.nVersion));
|
||||||
ret.push_back(Pair("coinbase", coins.fCoinBase));
|
ret.push_back(Pair("coinbase", coins.fCoinBase));
|
||||||
|
@ -17,14 +17,15 @@ using namespace boost;
|
|||||||
using namespace boost::assign;
|
using namespace boost::assign;
|
||||||
using namespace json_spirit;
|
using namespace json_spirit;
|
||||||
|
|
||||||
void ScriptPubKeyToJSON(const CScript& scriptPubKey, Object& out)
|
void ScriptPubKeyToJSON(const CScript& scriptPubKey, Object& out, bool fIncludeHex)
|
||||||
{
|
{
|
||||||
txnouttype type;
|
txnouttype type;
|
||||||
vector<CTxDestination> addresses;
|
vector<CTxDestination> addresses;
|
||||||
int nRequired;
|
int nRequired;
|
||||||
|
|
||||||
out.push_back(Pair("asm", scriptPubKey.ToString()));
|
out.push_back(Pair("asm", scriptPubKey.ToString()));
|
||||||
out.push_back(Pair("hex", HexStr(scriptPubKey.begin(), scriptPubKey.end())));
|
if (fIncludeHex)
|
||||||
|
out.push_back(Pair("hex", HexStr(scriptPubKey.begin(), scriptPubKey.end())));
|
||||||
|
|
||||||
if (!ExtractDestinations(scriptPubKey, type, addresses, nRequired))
|
if (!ExtractDestinations(scriptPubKey, type, addresses, nRequired))
|
||||||
{
|
{
|
||||||
@ -73,7 +74,7 @@ void TxToJSON(const CTransaction& tx, const uint256 hashBlock, Object& entry)
|
|||||||
out.push_back(Pair("value", ValueFromAmount(txout.nValue)));
|
out.push_back(Pair("value", ValueFromAmount(txout.nValue)));
|
||||||
out.push_back(Pair("n", (boost::int64_t)i));
|
out.push_back(Pair("n", (boost::int64_t)i));
|
||||||
Object o;
|
Object o;
|
||||||
ScriptPubKeyToJSON(txout.scriptPubKey, o);
|
ScriptPubKeyToJSON(txout.scriptPubKey, o, false);
|
||||||
out.push_back(Pair("scriptPubKey", o));
|
out.push_back(Pair("scriptPubKey", o));
|
||||||
vout.push_back(out);
|
vout.push_back(out);
|
||||||
}
|
}
|
||||||
@ -301,6 +302,29 @@ Value decoderawtransaction(const Array& params, bool fHelp)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Value decodescript(const Array& params, bool fHelp)
|
||||||
|
{
|
||||||
|
if (fHelp || params.size() != 1)
|
||||||
|
throw runtime_error(
|
||||||
|
"decodescript <hex string>\n"
|
||||||
|
"Decode a hex-encoded script.");
|
||||||
|
|
||||||
|
RPCTypeCheck(params, list_of(str_type));
|
||||||
|
|
||||||
|
Object r;
|
||||||
|
CScript script;
|
||||||
|
if (params[0].get_str().size() > 0){
|
||||||
|
vector<unsigned char> scriptData(ParseHexV(params[0], "argument"));
|
||||||
|
script = CScript(scriptData.begin(), scriptData.end());
|
||||||
|
} else {
|
||||||
|
// Empty scripts are valid
|
||||||
|
}
|
||||||
|
ScriptPubKeyToJSON(script, r, false);
|
||||||
|
|
||||||
|
r.push_back(Pair("p2sh", CBitcoinAddress(script.GetID()).ToString()));
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
Value signrawtransaction(const Array& params, bool fHelp)
|
Value signrawtransaction(const Array& params, bool fHelp)
|
||||||
{
|
{
|
||||||
if (fHelp || params.size() < 1 || params.size() > 4)
|
if (fHelp || params.size() < 1 || params.size() > 4)
|
||||||
|
Loading…
Reference in New Issue
Block a user