Auto merge of #3350 - str4d:rpc-reorg, r=bitcartel
RPC code refactor Cherry-picked from the following upstream PRs: - bitcoin/bitcoin#7307 - bitcoin/bitcoin#7348 - bitcoin/bitcoin#7766
This commit is contained in:
commit
cd0484e023
|
@ -4,7 +4,8 @@
|
||||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||||
|
|
||||||
#
|
#
|
||||||
# Test RPC calls related to blockchain state.
|
# Test RPC calls related to blockchain state. Tests correspond to code in
|
||||||
|
# rpc/blockchain.cpp.
|
||||||
#
|
#
|
||||||
|
|
||||||
import decimal
|
import decimal
|
||||||
|
|
|
@ -176,9 +176,10 @@ BITCOIN_CORE_H = \
|
||||||
pubkey.h \
|
pubkey.h \
|
||||||
random.h \
|
random.h \
|
||||||
reverselock.h \
|
reverselock.h \
|
||||||
rpcclient.h \
|
rpc/client.h \
|
||||||
rpcprotocol.h \
|
rpc/protocol.h \
|
||||||
rpcserver.h \
|
rpc/server.h \
|
||||||
|
rpc/register.h \
|
||||||
scheduler.h \
|
scheduler.h \
|
||||||
script/interpreter.h \
|
script/interpreter.h \
|
||||||
script/script.h \
|
script/script.h \
|
||||||
|
@ -215,6 +216,7 @@ BITCOIN_CORE_H = \
|
||||||
wallet/asyncrpcoperation_shieldcoinbase.h \
|
wallet/asyncrpcoperation_shieldcoinbase.h \
|
||||||
wallet/crypter.h \
|
wallet/crypter.h \
|
||||||
wallet/db.h \
|
wallet/db.h \
|
||||||
|
wallet/rpcwallet.h \
|
||||||
wallet/wallet.h \
|
wallet/wallet.h \
|
||||||
wallet/wallet_ismine.h \
|
wallet/wallet_ismine.h \
|
||||||
wallet/walletdb.h \
|
wallet/walletdb.h \
|
||||||
|
@ -259,12 +261,12 @@ libbitcoin_server_a_SOURCES = \
|
||||||
policy/fees.cpp \
|
policy/fees.cpp \
|
||||||
pow.cpp \
|
pow.cpp \
|
||||||
rest.cpp \
|
rest.cpp \
|
||||||
rpcblockchain.cpp \
|
rpc/blockchain.cpp \
|
||||||
rpcmining.cpp \
|
rpc/mining.cpp \
|
||||||
rpcmisc.cpp \
|
rpc/misc.cpp \
|
||||||
rpcnet.cpp \
|
rpc/net.cpp \
|
||||||
rpcrawtransaction.cpp \
|
rpc/rawtransaction.cpp \
|
||||||
rpcserver.cpp \
|
rpc/server.cpp \
|
||||||
script/sigcache.cpp \
|
script/sigcache.cpp \
|
||||||
timedata.cpp \
|
timedata.cpp \
|
||||||
torcontrol.cpp \
|
torcontrol.cpp \
|
||||||
|
@ -398,7 +400,7 @@ libbitcoin_util_a_SOURCES = \
|
||||||
compat/glibcxx_sanity.cpp \
|
compat/glibcxx_sanity.cpp \
|
||||||
compat/strnlen.cpp \
|
compat/strnlen.cpp \
|
||||||
random.cpp \
|
random.cpp \
|
||||||
rpcprotocol.cpp \
|
rpc/protocol.cpp \
|
||||||
support/cleanse.cpp \
|
support/cleanse.cpp \
|
||||||
sync.cpp \
|
sync.cpp \
|
||||||
uint256.cpp \
|
uint256.cpp \
|
||||||
|
@ -417,7 +419,7 @@ endif
|
||||||
libbitcoin_cli_a_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES)
|
libbitcoin_cli_a_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES)
|
||||||
libbitcoin_cli_a_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS)
|
libbitcoin_cli_a_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS)
|
||||||
libbitcoin_cli_a_SOURCES = \
|
libbitcoin_cli_a_SOURCES = \
|
||||||
rpcclient.cpp \
|
rpc/client.cpp \
|
||||||
$(BITCOIN_CORE_H) \
|
$(BITCOIN_CORE_H) \
|
||||||
$(LIBZCASH_H)
|
$(LIBZCASH_H)
|
||||||
|
|
||||||
|
|
|
@ -5,8 +5,8 @@
|
||||||
|
|
||||||
#include "chainparamsbase.h"
|
#include "chainparamsbase.h"
|
||||||
#include "clientversion.h"
|
#include "clientversion.h"
|
||||||
#include "rpcclient.h"
|
#include "rpc/client.h"
|
||||||
#include "rpcprotocol.h"
|
#include "rpc/protocol.h"
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "utilstrencodings.h"
|
#include "utilstrencodings.h"
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||||
|
|
||||||
#include "clientversion.h"
|
#include "clientversion.h"
|
||||||
#include "rpcserver.h"
|
#include "rpc/server.h"
|
||||||
#include "init.h"
|
#include "init.h"
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
#include "noui.h"
|
#include "noui.h"
|
||||||
|
@ -12,7 +12,6 @@
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "httpserver.h"
|
#include "httpserver.h"
|
||||||
#include "httprpc.h"
|
#include "httprpc.h"
|
||||||
#include "rpcserver.h"
|
|
||||||
|
|
||||||
#include <boost/algorithm/string/predicate.hpp>
|
#include <boost/algorithm/string/predicate.hpp>
|
||||||
#include <boost/filesystem.hpp>
|
#include <boost/filesystem.hpp>
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
#include "chainparams.h"
|
#include "chainparams.h"
|
||||||
#include "clientversion.h"
|
#include "clientversion.h"
|
||||||
#include "primitives/block.h"
|
#include "primitives/block.h"
|
||||||
#include "rpcserver.h"
|
#include "rpc/server.h"
|
||||||
#include "streams.h"
|
#include "streams.h"
|
||||||
#include "utilstrencodings.h"
|
#include "utilstrencodings.h"
|
||||||
|
|
||||||
|
|
|
@ -3,8 +3,8 @@
|
||||||
#include "chainparams.h"
|
#include "chainparams.h"
|
||||||
#include "httpserver.h"
|
#include "httpserver.h"
|
||||||
#include "key_io.h"
|
#include "key_io.h"
|
||||||
#include "rpcprotocol.h"
|
#include "rpc/protocol.h"
|
||||||
#include "rpcserver.h"
|
#include "rpc/server.h"
|
||||||
#include "random.h"
|
#include "random.h"
|
||||||
#include "sync.h"
|
#include "sync.h"
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
#include "compat.h"
|
#include "compat.h"
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "netbase.h"
|
#include "netbase.h"
|
||||||
#include "rpcprotocol.h" // For HTTP status codes
|
#include "rpc/protocol.h" // For HTTP status codes
|
||||||
#include "sync.h"
|
#include "sync.h"
|
||||||
#include "ui_interface.h"
|
#include "ui_interface.h"
|
||||||
|
|
||||||
|
|
|
@ -25,7 +25,8 @@
|
||||||
#include "metrics.h"
|
#include "metrics.h"
|
||||||
#include "miner.h"
|
#include "miner.h"
|
||||||
#include "net.h"
|
#include "net.h"
|
||||||
#include "rpcserver.h"
|
#include "rpc/server.h"
|
||||||
|
#include "rpc/register.h"
|
||||||
#include "script/standard.h"
|
#include "script/standard.h"
|
||||||
#include "scheduler.h"
|
#include "scheduler.h"
|
||||||
#include "txdb.h"
|
#include "txdb.h"
|
||||||
|
@ -997,8 +998,11 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler)
|
||||||
fPruneMode = true;
|
fPruneMode = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RegisterAllCoreRPCCommands(tableRPC);
|
||||||
#ifdef ENABLE_WALLET
|
#ifdef ENABLE_WALLET
|
||||||
bool fDisableWallet = GetBoolArg("-disablewallet", false);
|
bool fDisableWallet = GetBoolArg("-disablewallet", false);
|
||||||
|
if (!fDisableWallet)
|
||||||
|
RegisterWalletRPCCommands(tableRPC);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
nConnectTimeout = GetArg("-timeout", DEFAULT_CONNECT_TIMEOUT);
|
nConnectTimeout = GetArg("-timeout", DEFAULT_CONNECT_TIMEOUT);
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
#include "primitives/transaction.h"
|
#include "primitives/transaction.h"
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
#include "httpserver.h"
|
#include "httpserver.h"
|
||||||
#include "rpcserver.h"
|
#include "rpc/server.h"
|
||||||
#include "streams.h"
|
#include "streams.h"
|
||||||
#include "sync.h"
|
#include "sync.h"
|
||||||
#include "txmempool.h"
|
#include "txmempool.h"
|
||||||
|
@ -263,6 +263,9 @@ static bool rest_block_notxdetails(HTTPRequest* req, const std::string& strURIPa
|
||||||
return rest_block(req, strURIPart, false);
|
return rest_block(req, strURIPart, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// A bit of a hack - dependency on a function defined in rpc/blockchain.cpp
|
||||||
|
UniValue getblockchaininfo(const UniValue& params, bool fHelp);
|
||||||
|
|
||||||
static bool rest_chaininfo(HTTPRequest* req, const std::string& strURIPart)
|
static bool rest_chaininfo(HTTPRequest* req, const std::string& strURIPart)
|
||||||
{
|
{
|
||||||
if (!CheckWarmup(req))
|
if (!CheckWarmup(req))
|
||||||
|
|
|
@ -10,7 +10,8 @@
|
||||||
#include "consensus/validation.h"
|
#include "consensus/validation.h"
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
#include "primitives/transaction.h"
|
#include "primitives/transaction.h"
|
||||||
#include "rpcserver.h"
|
#include "rpc/server.h"
|
||||||
|
#include "streams.h"
|
||||||
#include "sync.h"
|
#include "sync.h"
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
|
|
||||||
|
@ -1024,3 +1025,31 @@ UniValue reconsiderblock(const UniValue& params, bool fHelp)
|
||||||
|
|
||||||
return NullUniValue;
|
return NullUniValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const CRPCCommand commands[] =
|
||||||
|
{ // category name actor (function) okSafeMode
|
||||||
|
// --------------------- ------------------------ ----------------------- ----------
|
||||||
|
{ "blockchain", "getblockchaininfo", &getblockchaininfo, true },
|
||||||
|
{ "blockchain", "getbestblockhash", &getbestblockhash, true },
|
||||||
|
{ "blockchain", "getblockcount", &getblockcount, true },
|
||||||
|
{ "blockchain", "getblock", &getblock, true },
|
||||||
|
{ "blockchain", "getblockhash", &getblockhash, true },
|
||||||
|
{ "blockchain", "getblockheader", &getblockheader, true },
|
||||||
|
{ "blockchain", "getchaintips", &getchaintips, true },
|
||||||
|
{ "blockchain", "getdifficulty", &getdifficulty, true },
|
||||||
|
{ "blockchain", "getmempoolinfo", &getmempoolinfo, true },
|
||||||
|
{ "blockchain", "getrawmempool", &getrawmempool, true },
|
||||||
|
{ "blockchain", "gettxout", &gettxout, true },
|
||||||
|
{ "blockchain", "gettxoutsetinfo", &gettxoutsetinfo, true },
|
||||||
|
{ "blockchain", "verifychain", &verifychain, true },
|
||||||
|
|
||||||
|
/* Not shown in help */
|
||||||
|
{ "hidden", "invalidateblock", &invalidateblock, true },
|
||||||
|
{ "hidden", "reconsiderblock", &reconsiderblock, true },
|
||||||
|
};
|
||||||
|
|
||||||
|
void RegisterBlockchainRPCCommands(CRPCTable &tableRPC)
|
||||||
|
{
|
||||||
|
for (unsigned int vcidx = 0; vcidx < ARRAYLEN(commands); vcidx++)
|
||||||
|
tableRPC.appendCommand(commands[vcidx].name, &commands[vcidx]);
|
||||||
|
}
|
|
@ -3,9 +3,8 @@
|
||||||
// Distributed under the MIT software license, see the accompanying
|
// Distributed under the MIT software license, see the accompanying
|
||||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||||
|
|
||||||
#include "rpcclient.h"
|
#include "rpc/client.h"
|
||||||
|
#include "rpc/protocol.h"
|
||||||
#include "rpcprotocol.h"
|
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
|
|
||||||
#include <set>
|
#include <set>
|
|
@ -17,7 +17,8 @@
|
||||||
#include "miner.h"
|
#include "miner.h"
|
||||||
#include "net.h"
|
#include "net.h"
|
||||||
#include "pow.h"
|
#include "pow.h"
|
||||||
#include "rpcserver.h"
|
#include "rpc/server.h"
|
||||||
|
#include "txmempool.h"
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "validationinterface.h"
|
#include "validationinterface.h"
|
||||||
#ifdef ENABLE_WALLET
|
#ifdef ENABLE_WALLET
|
||||||
|
@ -909,3 +910,31 @@ UniValue getblocksubsidy(const UniValue& params, bool fHelp)
|
||||||
result.push_back(Pair("founders", ValueFromAmount(nFoundersReward)));
|
result.push_back(Pair("founders", ValueFromAmount(nFoundersReward)));
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const CRPCCommand commands[] =
|
||||||
|
{ // category name actor (function) okSafeMode
|
||||||
|
// --------------------- ------------------------ ----------------------- ----------
|
||||||
|
{ "mining", "getlocalsolps", &getlocalsolps, true },
|
||||||
|
{ "mining", "getnetworksolps", &getnetworksolps, true },
|
||||||
|
{ "mining", "getnetworkhashps", &getnetworkhashps, true },
|
||||||
|
{ "mining", "getmininginfo", &getmininginfo, true },
|
||||||
|
{ "mining", "prioritisetransaction", &prioritisetransaction, true },
|
||||||
|
{ "mining", "getblocktemplate", &getblocktemplate, true },
|
||||||
|
{ "mining", "submitblock", &submitblock, true },
|
||||||
|
{ "mining", "getblocksubsidy", &getblocksubsidy, true },
|
||||||
|
|
||||||
|
#ifdef ENABLE_MINING
|
||||||
|
{ "generating", "getgenerate", &getgenerate, true },
|
||||||
|
{ "generating", "setgenerate", &setgenerate, true },
|
||||||
|
{ "generating", "generate", &generate, true },
|
||||||
|
#endif
|
||||||
|
|
||||||
|
{ "util", "estimatefee", &estimatefee, true },
|
||||||
|
{ "util", "estimatepriority", &estimatepriority, true },
|
||||||
|
};
|
||||||
|
|
||||||
|
void RegisterMiningRPCCommands(CRPCTable &tableRPC)
|
||||||
|
{
|
||||||
|
for (unsigned int vcidx = 0; vcidx < ARRAYLEN(commands); vcidx++)
|
||||||
|
tableRPC.appendCommand(commands[vcidx].name, &commands[vcidx]);
|
||||||
|
}
|
|
@ -9,7 +9,7 @@
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
#include "net.h"
|
#include "net.h"
|
||||||
#include "netbase.h"
|
#include "netbase.h"
|
||||||
#include "rpcserver.h"
|
#include "rpc/server.h"
|
||||||
#include "timedata.h"
|
#include "timedata.h"
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
#ifdef ENABLE_WALLET
|
#ifdef ENABLE_WALLET
|
||||||
|
@ -482,3 +482,22 @@ UniValue setmocktime(const UniValue& params, bool fHelp)
|
||||||
|
|
||||||
return NullUniValue;
|
return NullUniValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const CRPCCommand commands[] =
|
||||||
|
{ // category name actor (function) okSafeMode
|
||||||
|
// --------------------- ------------------------ ----------------------- ----------
|
||||||
|
{ "control", "getinfo", &getinfo, true }, /* uses wallet if enabled */
|
||||||
|
{ "util", "validateaddress", &validateaddress, true }, /* uses wallet if enabled */
|
||||||
|
{ "util", "z_validateaddress", &z_validateaddress, true }, /* uses wallet if enabled */
|
||||||
|
{ "util", "createmultisig", &createmultisig, true },
|
||||||
|
{ "util", "verifymessage", &verifymessage, true },
|
||||||
|
|
||||||
|
/* Not shown in help */
|
||||||
|
{ "hidden", "setmocktime", &setmocktime, true },
|
||||||
|
};
|
||||||
|
|
||||||
|
void RegisterMiscRPCCommands(CRPCTable &tableRPC)
|
||||||
|
{
|
||||||
|
for (unsigned int vcidx = 0; vcidx < ARRAYLEN(commands); vcidx++)
|
||||||
|
tableRPC.appendCommand(commands[vcidx].name, &commands[vcidx]);
|
||||||
|
}
|
|
@ -2,7 +2,7 @@
|
||||||
// Distributed under the MIT software license, see the accompanying
|
// Distributed under the MIT software license, see the accompanying
|
||||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||||
|
|
||||||
#include "rpcserver.h"
|
#include "rpc/server.h"
|
||||||
|
|
||||||
#include "clientversion.h"
|
#include "clientversion.h"
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
|
@ -598,3 +598,26 @@ UniValue clearbanned(const UniValue& params, bool fHelp)
|
||||||
|
|
||||||
return NullUniValue;
|
return NullUniValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const CRPCCommand commands[] =
|
||||||
|
{ // category name actor (function) okSafeMode
|
||||||
|
// --------------------- ------------------------ ----------------------- ----------
|
||||||
|
{ "network", "getconnectioncount", &getconnectioncount, true },
|
||||||
|
{ "network", "getdeprecationinfo", &getdeprecationinfo, true },
|
||||||
|
{ "network", "ping", &ping, true },
|
||||||
|
{ "network", "getpeerinfo", &getpeerinfo, true },
|
||||||
|
{ "network", "addnode", &addnode, true },
|
||||||
|
{ "network", "disconnectnode", &disconnectnode, true },
|
||||||
|
{ "network", "getaddednodeinfo", &getaddednodeinfo, true },
|
||||||
|
{ "network", "getnettotals", &getnettotals, true },
|
||||||
|
{ "network", "getnetworkinfo", &getnetworkinfo, true },
|
||||||
|
{ "network", "setban", &setban, true },
|
||||||
|
{ "network", "listbanned", &listbanned, true },
|
||||||
|
{ "network", "clearbanned", &clearbanned, true },
|
||||||
|
};
|
||||||
|
|
||||||
|
void RegisterNetRPCCommands(CRPCTable &tableRPC)
|
||||||
|
{
|
||||||
|
for (unsigned int vcidx = 0; vcidx < ARRAYLEN(commands); vcidx++)
|
||||||
|
tableRPC.appendCommand(commands[vcidx].name, &commands[vcidx]);
|
||||||
|
}
|
|
@ -3,7 +3,7 @@
|
||||||
// Distributed under the MIT software license, see the accompanying
|
// Distributed under the MIT software license, see the accompanying
|
||||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||||
|
|
||||||
#include "rpcprotocol.h"
|
#include "rpc/protocol.h"
|
||||||
|
|
||||||
#include "random.h"
|
#include "random.h"
|
||||||
#include "tinyformat.h"
|
#include "tinyformat.h"
|
|
@ -13,7 +13,7 @@
|
||||||
#include "merkleblock.h"
|
#include "merkleblock.h"
|
||||||
#include "net.h"
|
#include "net.h"
|
||||||
#include "primitives/transaction.h"
|
#include "primitives/transaction.h"
|
||||||
#include "rpcserver.h"
|
#include "rpc/server.h"
|
||||||
#include "script/script.h"
|
#include "script/script.h"
|
||||||
#include "script/script_error.h"
|
#include "script/script_error.h"
|
||||||
#include "script/sign.h"
|
#include "script/sign.h"
|
||||||
|
@ -976,3 +976,23 @@ UniValue sendrawtransaction(const UniValue& params, bool fHelp)
|
||||||
|
|
||||||
return hashTx.GetHex();
|
return hashTx.GetHex();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const CRPCCommand commands[] =
|
||||||
|
{ // category name actor (function) okSafeMode
|
||||||
|
// --------------------- ------------------------ ----------------------- ----------
|
||||||
|
{ "rawtransactions", "getrawtransaction", &getrawtransaction, true },
|
||||||
|
{ "rawtransactions", "createrawtransaction", &createrawtransaction, true },
|
||||||
|
{ "rawtransactions", "decoderawtransaction", &decoderawtransaction, true },
|
||||||
|
{ "rawtransactions", "decodescript", &decodescript, true },
|
||||||
|
{ "rawtransactions", "sendrawtransaction", &sendrawtransaction, false },
|
||||||
|
{ "rawtransactions", "signrawtransaction", &signrawtransaction, false }, /* uses wallet if enabled */
|
||||||
|
|
||||||
|
{ "blockchain", "gettxoutproof", &gettxoutproof, true },
|
||||||
|
{ "blockchain", "verifytxoutproof", &verifytxoutproof, true },
|
||||||
|
};
|
||||||
|
|
||||||
|
void RegisterRawTransactionRPCCommands(CRPCTable &tableRPC)
|
||||||
|
{
|
||||||
|
for (unsigned int vcidx = 0; vcidx < ARRAYLEN(commands); vcidx++)
|
||||||
|
tableRPC.appendCommand(commands[vcidx].name, &commands[vcidx]);
|
||||||
|
}
|
|
@ -0,0 +1,32 @@
|
||||||
|
// Copyright (c) 2009-2016 The Bitcoin Core developers
|
||||||
|
// Distributed under the MIT software license, see the accompanying
|
||||||
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||||
|
|
||||||
|
#ifndef BITCOIN_RPCREGISTER_H
|
||||||
|
#define BITCOIN_RPCREGISTER_H
|
||||||
|
|
||||||
|
/** These are in one header file to avoid creating tons of single-function
|
||||||
|
* headers for everything under src/rpc/ */
|
||||||
|
class CRPCTable;
|
||||||
|
|
||||||
|
/** Register block chain RPC commands */
|
||||||
|
void RegisterBlockchainRPCCommands(CRPCTable &tableRPC);
|
||||||
|
/** Register P2P networking RPC commands */
|
||||||
|
void RegisterNetRPCCommands(CRPCTable &tableRPC);
|
||||||
|
/** Register miscellaneous RPC commands */
|
||||||
|
void RegisterMiscRPCCommands(CRPCTable &tableRPC);
|
||||||
|
/** Register mining RPC commands */
|
||||||
|
void RegisterMiningRPCCommands(CRPCTable &tableRPC);
|
||||||
|
/** Register raw transaction RPC commands */
|
||||||
|
void RegisterRawTransactionRPCCommands(CRPCTable &tableRPC);
|
||||||
|
|
||||||
|
static inline void RegisterAllCoreRPCCommands(CRPCTable &tableRPC)
|
||||||
|
{
|
||||||
|
RegisterBlockchainRPCCommands(tableRPC);
|
||||||
|
RegisterNetRPCCommands(tableRPC);
|
||||||
|
RegisterMiscRPCCommands(tableRPC);
|
||||||
|
RegisterMiningRPCCommands(tableRPC);
|
||||||
|
RegisterRawTransactionRPCCommands(tableRPC);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
|
@ -3,7 +3,7 @@
|
||||||
// Distributed under the MIT software license, see the accompanying
|
// Distributed under the MIT software license, see the accompanying
|
||||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||||
|
|
||||||
#include "rpcserver.h"
|
#include "rpc/server.h"
|
||||||
|
|
||||||
#include "init.h"
|
#include "init.h"
|
||||||
#include "key_io.h"
|
#include "key_io.h"
|
||||||
|
@ -259,154 +259,8 @@ static const CRPCCommand vRPCCommands[] =
|
||||||
{ // category name actor (function) okSafeMode
|
{ // category name actor (function) okSafeMode
|
||||||
// --------------------- ------------------------ ----------------------- ----------
|
// --------------------- ------------------------ ----------------------- ----------
|
||||||
/* Overall control/query calls */
|
/* Overall control/query calls */
|
||||||
{ "control", "getinfo", &getinfo, true }, /* uses wallet if enabled */
|
|
||||||
{ "control", "help", &help, true },
|
{ "control", "help", &help, true },
|
||||||
{ "control", "stop", &stop, true },
|
{ "control", "stop", &stop, true },
|
||||||
|
|
||||||
/* P2P networking */
|
|
||||||
{ "network", "getnetworkinfo", &getnetworkinfo, true },
|
|
||||||
{ "network", "getdeprecationinfo", &getdeprecationinfo, true },
|
|
||||||
{ "network", "addnode", &addnode, true },
|
|
||||||
{ "network", "disconnectnode", &disconnectnode, true },
|
|
||||||
{ "network", "getaddednodeinfo", &getaddednodeinfo, true },
|
|
||||||
{ "network", "getconnectioncount", &getconnectioncount, true },
|
|
||||||
{ "network", "getnettotals", &getnettotals, true },
|
|
||||||
{ "network", "getpeerinfo", &getpeerinfo, true },
|
|
||||||
{ "network", "ping", &ping, true },
|
|
||||||
{ "network", "setban", &setban, true },
|
|
||||||
{ "network", "listbanned", &listbanned, true },
|
|
||||||
{ "network", "clearbanned", &clearbanned, true },
|
|
||||||
|
|
||||||
/* Block chain and UTXO */
|
|
||||||
{ "blockchain", "getblockchaininfo", &getblockchaininfo, true },
|
|
||||||
{ "blockchain", "getbestblockhash", &getbestblockhash, true },
|
|
||||||
{ "blockchain", "getblockcount", &getblockcount, true },
|
|
||||||
{ "blockchain", "getblock", &getblock, true },
|
|
||||||
{ "blockchain", "getblockhash", &getblockhash, true },
|
|
||||||
{ "blockchain", "getblockheader", &getblockheader, true },
|
|
||||||
{ "blockchain", "getchaintips", &getchaintips, true },
|
|
||||||
{ "blockchain", "getdifficulty", &getdifficulty, true },
|
|
||||||
{ "blockchain", "getmempoolinfo", &getmempoolinfo, true },
|
|
||||||
{ "blockchain", "getrawmempool", &getrawmempool, true },
|
|
||||||
{ "blockchain", "gettxout", &gettxout, true },
|
|
||||||
{ "blockchain", "gettxoutproof", &gettxoutproof, true },
|
|
||||||
{ "blockchain", "verifytxoutproof", &verifytxoutproof, true },
|
|
||||||
{ "blockchain", "gettxoutsetinfo", &gettxoutsetinfo, true },
|
|
||||||
{ "blockchain", "verifychain", &verifychain, true },
|
|
||||||
|
|
||||||
/* Mining */
|
|
||||||
{ "mining", "getblocktemplate", &getblocktemplate, true },
|
|
||||||
{ "mining", "getmininginfo", &getmininginfo, true },
|
|
||||||
{ "mining", "getlocalsolps", &getlocalsolps, true },
|
|
||||||
{ "mining", "getnetworksolps", &getnetworksolps, true },
|
|
||||||
{ "mining", "getnetworkhashps", &getnetworkhashps, true },
|
|
||||||
{ "mining", "prioritisetransaction", &prioritisetransaction, true },
|
|
||||||
{ "mining", "submitblock", &submitblock, true },
|
|
||||||
{ "mining", "getblocksubsidy", &getblocksubsidy, true },
|
|
||||||
|
|
||||||
#ifdef ENABLE_MINING
|
|
||||||
/* Coin generation */
|
|
||||||
{ "generating", "getgenerate", &getgenerate, true },
|
|
||||||
{ "generating", "setgenerate", &setgenerate, true },
|
|
||||||
{ "generating", "generate", &generate, true },
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Raw transactions */
|
|
||||||
{ "rawtransactions", "createrawtransaction", &createrawtransaction, true },
|
|
||||||
{ "rawtransactions", "decoderawtransaction", &decoderawtransaction, true },
|
|
||||||
{ "rawtransactions", "decodescript", &decodescript, true },
|
|
||||||
{ "rawtransactions", "getrawtransaction", &getrawtransaction, true },
|
|
||||||
{ "rawtransactions", "sendrawtransaction", &sendrawtransaction, false },
|
|
||||||
{ "rawtransactions", "signrawtransaction", &signrawtransaction, false }, /* uses wallet if enabled */
|
|
||||||
#ifdef ENABLE_WALLET
|
|
||||||
{ "rawtransactions", "fundrawtransaction", &fundrawtransaction, false },
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Utility functions */
|
|
||||||
{ "util", "createmultisig", &createmultisig, true },
|
|
||||||
{ "util", "validateaddress", &validateaddress, true }, /* uses wallet if enabled */
|
|
||||||
{ "util", "verifymessage", &verifymessage, true },
|
|
||||||
{ "util", "estimatefee", &estimatefee, true },
|
|
||||||
{ "util", "estimatepriority", &estimatepriority, true },
|
|
||||||
{ "util", "z_validateaddress", &z_validateaddress, true }, /* uses wallet if enabled */
|
|
||||||
|
|
||||||
/* Not shown in help */
|
|
||||||
{ "hidden", "invalidateblock", &invalidateblock, true },
|
|
||||||
{ "hidden", "reconsiderblock", &reconsiderblock, true },
|
|
||||||
{ "hidden", "setmocktime", &setmocktime, true },
|
|
||||||
#ifdef ENABLE_WALLET
|
|
||||||
{ "hidden", "resendwallettransactions", &resendwallettransactions, true},
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef ENABLE_WALLET
|
|
||||||
/* Wallet */
|
|
||||||
{ "wallet", "addmultisigaddress", &addmultisigaddress, true },
|
|
||||||
{ "wallet", "backupwallet", &backupwallet, true },
|
|
||||||
{ "wallet", "dumpprivkey", &dumpprivkey, true },
|
|
||||||
{ "wallet", "dumpwallet", &dumpwallet, true },
|
|
||||||
{ "wallet", "encryptwallet", &encryptwallet, true },
|
|
||||||
{ "wallet", "getaccountaddress", &getaccountaddress, true },
|
|
||||||
{ "wallet", "getaccount", &getaccount, true },
|
|
||||||
{ "wallet", "getaddressesbyaccount", &getaddressesbyaccount, true },
|
|
||||||
{ "wallet", "getbalance", &getbalance, false },
|
|
||||||
{ "wallet", "getnewaddress", &getnewaddress, true },
|
|
||||||
{ "wallet", "getrawchangeaddress", &getrawchangeaddress, true },
|
|
||||||
{ "wallet", "getreceivedbyaccount", &getreceivedbyaccount, false },
|
|
||||||
{ "wallet", "getreceivedbyaddress", &getreceivedbyaddress, false },
|
|
||||||
{ "wallet", "gettransaction", &gettransaction, false },
|
|
||||||
{ "wallet", "getunconfirmedbalance", &getunconfirmedbalance, false },
|
|
||||||
{ "wallet", "getwalletinfo", &getwalletinfo, false },
|
|
||||||
{ "wallet", "importprivkey", &importprivkey, true },
|
|
||||||
{ "wallet", "importwallet", &importwallet, true },
|
|
||||||
{ "wallet", "importaddress", &importaddress, true },
|
|
||||||
{ "wallet", "keypoolrefill", &keypoolrefill, true },
|
|
||||||
{ "wallet", "listaccounts", &listaccounts, false },
|
|
||||||
{ "wallet", "listaddressgroupings", &listaddressgroupings, false },
|
|
||||||
{ "wallet", "listlockunspent", &listlockunspent, false },
|
|
||||||
{ "wallet", "listreceivedbyaccount", &listreceivedbyaccount, false },
|
|
||||||
{ "wallet", "listreceivedbyaddress", &listreceivedbyaddress, false },
|
|
||||||
{ "wallet", "listsinceblock", &listsinceblock, false },
|
|
||||||
{ "wallet", "listtransactions", &listtransactions, false },
|
|
||||||
{ "wallet", "listunspent", &listunspent, false },
|
|
||||||
{ "wallet", "lockunspent", &lockunspent, true },
|
|
||||||
{ "wallet", "move", &movecmd, false },
|
|
||||||
{ "wallet", "sendfrom", &sendfrom, false },
|
|
||||||
{ "wallet", "sendmany", &sendmany, false },
|
|
||||||
{ "wallet", "sendtoaddress", &sendtoaddress, false },
|
|
||||||
{ "wallet", "setaccount", &setaccount, true },
|
|
||||||
{ "wallet", "settxfee", &settxfee, true },
|
|
||||||
{ "wallet", "signmessage", &signmessage, true },
|
|
||||||
{ "wallet", "walletlock", &walletlock, true },
|
|
||||||
{ "wallet", "walletpassphrasechange", &walletpassphrasechange, true },
|
|
||||||
{ "wallet", "walletpassphrase", &walletpassphrase, true },
|
|
||||||
{ "wallet", "zcbenchmark", &zc_benchmark, true },
|
|
||||||
{ "wallet", "zcrawkeygen", &zc_raw_keygen, true },
|
|
||||||
{ "wallet", "zcrawjoinsplit", &zc_raw_joinsplit, true },
|
|
||||||
{ "wallet", "zcrawreceive", &zc_raw_receive, true },
|
|
||||||
{ "wallet", "zcsamplejoinsplit", &zc_sample_joinsplit, true },
|
|
||||||
{ "wallet", "z_listreceivedbyaddress",&z_listreceivedbyaddress,false },
|
|
||||||
{ "wallet", "z_listunspent", &z_listunspent, false },
|
|
||||||
{ "wallet", "z_getbalance", &z_getbalance, false },
|
|
||||||
{ "wallet", "z_gettotalbalance", &z_gettotalbalance, false },
|
|
||||||
{ "wallet", "z_mergetoaddress", &z_mergetoaddress, false },
|
|
||||||
{ "wallet", "z_sendmany", &z_sendmany, false },
|
|
||||||
{ "wallet", "z_shieldcoinbase", &z_shieldcoinbase, false },
|
|
||||||
{ "wallet", "z_getoperationstatus", &z_getoperationstatus, true },
|
|
||||||
{ "wallet", "z_getoperationresult", &z_getoperationresult, true },
|
|
||||||
{ "wallet", "z_listoperationids", &z_listoperationids, true },
|
|
||||||
{ "wallet", "z_getnewaddress", &z_getnewaddress, true },
|
|
||||||
{ "wallet", "z_listaddresses", &z_listaddresses, true },
|
|
||||||
{ "wallet", "z_exportkey", &z_exportkey, true },
|
|
||||||
{ "wallet", "z_importkey", &z_importkey, true },
|
|
||||||
{ "wallet", "z_exportviewingkey", &z_exportviewingkey, true },
|
|
||||||
{ "wallet", "z_importviewingkey", &z_importviewingkey, true },
|
|
||||||
{ "wallet", "z_exportwallet", &z_exportwallet, true },
|
|
||||||
{ "wallet", "z_importwallet", &z_importwallet, true },
|
|
||||||
|
|
||||||
// TODO: rearrange into another category
|
|
||||||
{ "disclosure", "z_getpaymentdisclosure", &z_getpaymentdisclosure, true },
|
|
||||||
{ "disclosure", "z_validatepaymentdisclosure", &z_validatepaymentdisclosure, true }
|
|
||||||
#endif // ENABLE_WALLET
|
|
||||||
};
|
};
|
||||||
|
|
||||||
CRPCTable::CRPCTable()
|
CRPCTable::CRPCTable()
|
||||||
|
@ -429,6 +283,20 @@ const CRPCCommand *CRPCTable::operator[](const std::string &name) const
|
||||||
return (*it).second;
|
return (*it).second;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CRPCTable::appendCommand(const std::string& name, const CRPCCommand* pcmd)
|
||||||
|
{
|
||||||
|
if (IsRPCRunning())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// don't allow overwriting for now
|
||||||
|
map<string, const CRPCCommand*>::const_iterator it = mapCommands.find(name);
|
||||||
|
if (it != mapCommands.end())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
mapCommands[name] = pcmd;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
bool StartRPC()
|
bool StartRPC()
|
||||||
{
|
{
|
||||||
LogPrint("rpc", "Starting RPC\n");
|
LogPrint("rpc", "Starting RPC\n");
|
||||||
|
@ -631,7 +499,7 @@ void RPCRunLater(const std::string& name, boost::function<void(void)> func, int6
|
||||||
deadlineTimers.insert(std::make_pair(name, boost::shared_ptr<RPCTimerBase>(timerInterface->NewTimer(func, nSeconds*1000))));
|
deadlineTimers.insert(std::make_pair(name, boost::shared_ptr<RPCTimerBase>(timerInterface->NewTimer(func, nSeconds*1000))));
|
||||||
}
|
}
|
||||||
|
|
||||||
const CRPCTable tableRPC;
|
CRPCTable tableRPC;
|
||||||
|
|
||||||
// Return async rpc queue
|
// Return async rpc queue
|
||||||
std::shared_ptr<AsyncRPCQueue> getAsyncRPCQueue()
|
std::shared_ptr<AsyncRPCQueue> getAsyncRPCQueue()
|
|
@ -0,0 +1,190 @@
|
||||||
|
// Copyright (c) 2010 Satoshi Nakamoto
|
||||||
|
// Copyright (c) 2009-2014 The Bitcoin Core developers
|
||||||
|
// Distributed under the MIT software license, see the accompanying
|
||||||
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||||
|
|
||||||
|
#ifndef BITCOIN_RPCSERVER_H
|
||||||
|
#define BITCOIN_RPCSERVER_H
|
||||||
|
|
||||||
|
#include "amount.h"
|
||||||
|
#include "rpc/protocol.h"
|
||||||
|
#include "uint256.h"
|
||||||
|
|
||||||
|
#include <list>
|
||||||
|
#include <map>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <string>
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
|
#include <boost/function.hpp>
|
||||||
|
|
||||||
|
#include <univalue.h>
|
||||||
|
|
||||||
|
class AsyncRPCQueue;
|
||||||
|
class CRPCCommand;
|
||||||
|
|
||||||
|
namespace RPCServer
|
||||||
|
{
|
||||||
|
void OnStarted(boost::function<void ()> slot);
|
||||||
|
void OnStopped(boost::function<void ()> slot);
|
||||||
|
void OnPreCommand(boost::function<void (const CRPCCommand&)> slot);
|
||||||
|
void OnPostCommand(boost::function<void (const CRPCCommand&)> slot);
|
||||||
|
}
|
||||||
|
|
||||||
|
class CBlockIndex;
|
||||||
|
class CNetAddr;
|
||||||
|
|
||||||
|
class JSONRequest
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
UniValue id;
|
||||||
|
std::string strMethod;
|
||||||
|
UniValue params;
|
||||||
|
|
||||||
|
JSONRequest() { id = NullUniValue; }
|
||||||
|
void parse(const UniValue& valRequest);
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Query whether RPC is running */
|
||||||
|
bool IsRPCRunning();
|
||||||
|
|
||||||
|
/** Get the async queue*/
|
||||||
|
std::shared_ptr<AsyncRPCQueue> getAsyncRPCQueue();
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the RPC warmup status. When this is done, all RPC calls will error out
|
||||||
|
* immediately with RPC_IN_WARMUP.
|
||||||
|
*/
|
||||||
|
void SetRPCWarmupStatus(const std::string& newStatus);
|
||||||
|
/* Mark warmup as done. RPC calls will be processed from now on. */
|
||||||
|
void SetRPCWarmupFinished();
|
||||||
|
|
||||||
|
/* returns the current warmup state. */
|
||||||
|
bool RPCIsInWarmup(std::string *statusOut);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Type-check arguments; throws JSONRPCError if wrong type given. Does not check that
|
||||||
|
* the right number of arguments are passed, just that any passed are the correct type.
|
||||||
|
* Use like: RPCTypeCheck(params, boost::assign::list_of(str_type)(int_type)(obj_type));
|
||||||
|
*/
|
||||||
|
void RPCTypeCheck(const UniValue& params,
|
||||||
|
const std::list<UniValue::VType>& typesExpected, bool fAllowNull=false);
|
||||||
|
|
||||||
|
/*
|
||||||
|
Check for expected keys/value types in an Object.
|
||||||
|
Use like: RPCTypeCheckObj(object, boost::assign::map_list_of("name", str_type)("value", int_type));
|
||||||
|
*/
|
||||||
|
void RPCTypeCheckObj(const UniValue& o,
|
||||||
|
const std::map<std::string, UniValue::VType>& typesExpected, bool fAllowNull=false);
|
||||||
|
|
||||||
|
/** Opaque base class for timers returned by NewTimerFunc.
|
||||||
|
* This provides no methods at the moment, but makes sure that delete
|
||||||
|
* cleans up the whole state.
|
||||||
|
*/
|
||||||
|
class RPCTimerBase
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual ~RPCTimerBase() {}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* RPC timer "driver".
|
||||||
|
*/
|
||||||
|
class RPCTimerInterface
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual ~RPCTimerInterface() {}
|
||||||
|
/** Implementation name */
|
||||||
|
virtual const char *Name() = 0;
|
||||||
|
/** Factory function for timers.
|
||||||
|
* RPC will call the function to create a timer that will call func in *millis* milliseconds.
|
||||||
|
* @note As the RPC mechanism is backend-neutral, it can use different implementations of timers.
|
||||||
|
* This is needed to cope with the case in which there is no HTTP server, but
|
||||||
|
* only GUI RPC console, and to break the dependency of rpcserver on httprpc.
|
||||||
|
*/
|
||||||
|
virtual RPCTimerBase* NewTimer(boost::function<void(void)>& func, int64_t millis) = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Register factory function for timers */
|
||||||
|
void RPCRegisterTimerInterface(RPCTimerInterface *iface);
|
||||||
|
/** Unregister factory function for timers */
|
||||||
|
void RPCUnregisterTimerInterface(RPCTimerInterface *iface);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Run func nSeconds from now.
|
||||||
|
* Overrides previous timer <name> (if any).
|
||||||
|
*/
|
||||||
|
void RPCRunLater(const std::string& name, boost::function<void(void)> func, int64_t nSeconds);
|
||||||
|
|
||||||
|
typedef UniValue(*rpcfn_type)(const UniValue& params, bool fHelp);
|
||||||
|
|
||||||
|
class CRPCCommand
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
std::string category;
|
||||||
|
std::string name;
|
||||||
|
rpcfn_type actor;
|
||||||
|
bool okSafeMode;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Bitcoin RPC command dispatcher.
|
||||||
|
*/
|
||||||
|
class CRPCTable
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
std::map<std::string, const CRPCCommand*> mapCommands;
|
||||||
|
public:
|
||||||
|
CRPCTable();
|
||||||
|
const CRPCCommand* operator[](const std::string& name) const;
|
||||||
|
std::string help(const std::string& name) const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Execute a method.
|
||||||
|
* @param method Method to execute
|
||||||
|
* @param params UniValue Array of arguments (JSON objects)
|
||||||
|
* @returns Result of the call.
|
||||||
|
* @throws an exception (UniValue) when an error happens.
|
||||||
|
*/
|
||||||
|
UniValue execute(const std::string &method, const UniValue ¶ms) const;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Appends a CRPCCommand to the dispatch table.
|
||||||
|
* Returns false if RPC server is already running (dump concurrency protection).
|
||||||
|
* Commands cannot be overwritten (returns false).
|
||||||
|
*/
|
||||||
|
bool appendCommand(const std::string& name, const CRPCCommand* pcmd);
|
||||||
|
};
|
||||||
|
|
||||||
|
extern CRPCTable tableRPC;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Utilities: convert hex-encoded Values
|
||||||
|
* (throws error if not hex).
|
||||||
|
*/
|
||||||
|
extern uint256 ParseHashV(const UniValue& v, std::string strName);
|
||||||
|
extern uint256 ParseHashO(const UniValue& o, std::string strKey);
|
||||||
|
extern std::vector<unsigned char> ParseHexV(const UniValue& v, std::string strName);
|
||||||
|
extern std::vector<unsigned char> ParseHexO(const UniValue& o, std::string strKey);
|
||||||
|
|
||||||
|
extern int64_t nWalletUnlockTime;
|
||||||
|
extern CAmount AmountFromValue(const UniValue& value);
|
||||||
|
extern UniValue ValueFromAmount(const CAmount& amount);
|
||||||
|
extern double GetDifficulty(const CBlockIndex* blockindex = NULL);
|
||||||
|
extern double GetNetworkDifficulty(const CBlockIndex* blockindex = NULL);
|
||||||
|
extern std::string HelpRequiringPassphrase();
|
||||||
|
extern std::string HelpExampleCli(const std::string& methodname, const std::string& args);
|
||||||
|
extern std::string HelpExampleRpc(const std::string& methodname, const std::string& args);
|
||||||
|
|
||||||
|
extern void EnsureWalletIsUnlocked();
|
||||||
|
|
||||||
|
bool StartRPC();
|
||||||
|
void InterruptRPC();
|
||||||
|
void StopRPC();
|
||||||
|
std::string JSONRPCExecBatch(const UniValue& vReq);
|
||||||
|
|
||||||
|
extern std::string experimentalDisabledHelpMsg(const std::string& rpc, const std::string& enableArg);
|
||||||
|
|
||||||
|
#endif // BITCOIN_RPCSERVER_H
|
310
src/rpcserver.h
310
src/rpcserver.h
|
@ -1,310 +0,0 @@
|
||||||
// Copyright (c) 2010 Satoshi Nakamoto
|
|
||||||
// Copyright (c) 2009-2014 The Bitcoin Core developers
|
|
||||||
// Distributed under the MIT software license, see the accompanying
|
|
||||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
||||||
|
|
||||||
#ifndef BITCOIN_RPCSERVER_H
|
|
||||||
#define BITCOIN_RPCSERVER_H
|
|
||||||
|
|
||||||
#include "amount.h"
|
|
||||||
#include "rpcprotocol.h"
|
|
||||||
#include "uint256.h"
|
|
||||||
|
|
||||||
#include <list>
|
|
||||||
#include <map>
|
|
||||||
#include <stdint.h>
|
|
||||||
#include <string>
|
|
||||||
#include <memory>
|
|
||||||
|
|
||||||
#include <boost/function.hpp>
|
|
||||||
|
|
||||||
#include <univalue.h>
|
|
||||||
|
|
||||||
class AsyncRPCQueue;
|
|
||||||
class CRPCCommand;
|
|
||||||
|
|
||||||
namespace RPCServer
|
|
||||||
{
|
|
||||||
void OnStarted(boost::function<void ()> slot);
|
|
||||||
void OnStopped(boost::function<void ()> slot);
|
|
||||||
void OnPreCommand(boost::function<void (const CRPCCommand&)> slot);
|
|
||||||
void OnPostCommand(boost::function<void (const CRPCCommand&)> slot);
|
|
||||||
}
|
|
||||||
|
|
||||||
class CBlockIndex;
|
|
||||||
class CNetAddr;
|
|
||||||
|
|
||||||
class JSONRequest
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
UniValue id;
|
|
||||||
std::string strMethod;
|
|
||||||
UniValue params;
|
|
||||||
|
|
||||||
JSONRequest() { id = NullUniValue; }
|
|
||||||
void parse(const UniValue& valRequest);
|
|
||||||
};
|
|
||||||
|
|
||||||
/** Query whether RPC is running */
|
|
||||||
bool IsRPCRunning();
|
|
||||||
|
|
||||||
/** Get the async queue*/
|
|
||||||
std::shared_ptr<AsyncRPCQueue> getAsyncRPCQueue();
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set the RPC warmup status. When this is done, all RPC calls will error out
|
|
||||||
* immediately with RPC_IN_WARMUP.
|
|
||||||
*/
|
|
||||||
void SetRPCWarmupStatus(const std::string& newStatus);
|
|
||||||
/* Mark warmup as done. RPC calls will be processed from now on. */
|
|
||||||
void SetRPCWarmupFinished();
|
|
||||||
|
|
||||||
/* returns the current warmup state. */
|
|
||||||
bool RPCIsInWarmup(std::string *statusOut);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Type-check arguments; throws JSONRPCError if wrong type given. Does not check that
|
|
||||||
* the right number of arguments are passed, just that any passed are the correct type.
|
|
||||||
* Use like: RPCTypeCheck(params, boost::assign::list_of(str_type)(int_type)(obj_type));
|
|
||||||
*/
|
|
||||||
void RPCTypeCheck(const UniValue& params,
|
|
||||||
const std::list<UniValue::VType>& typesExpected, bool fAllowNull=false);
|
|
||||||
|
|
||||||
/*
|
|
||||||
Check for expected keys/value types in an Object.
|
|
||||||
Use like: RPCTypeCheckObj(object, boost::assign::map_list_of("name", str_type)("value", int_type));
|
|
||||||
*/
|
|
||||||
void RPCTypeCheckObj(const UniValue& o,
|
|
||||||
const std::map<std::string, UniValue::VType>& typesExpected, bool fAllowNull=false);
|
|
||||||
|
|
||||||
/** Opaque base class for timers returned by NewTimerFunc.
|
|
||||||
* This provides no methods at the moment, but makes sure that delete
|
|
||||||
* cleans up the whole state.
|
|
||||||
*/
|
|
||||||
class RPCTimerBase
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
virtual ~RPCTimerBase() {}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* RPC timer "driver".
|
|
||||||
*/
|
|
||||||
class RPCTimerInterface
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
virtual ~RPCTimerInterface() {}
|
|
||||||
/** Implementation name */
|
|
||||||
virtual const char *Name() = 0;
|
|
||||||
/** Factory function for timers.
|
|
||||||
* RPC will call the function to create a timer that will call func in *millis* milliseconds.
|
|
||||||
* @note As the RPC mechanism is backend-neutral, it can use different implementations of timers.
|
|
||||||
* This is needed to cope with the case in which there is no HTTP server, but
|
|
||||||
* only GUI RPC console, and to break the dependency of rpcserver on httprpc.
|
|
||||||
*/
|
|
||||||
virtual RPCTimerBase* NewTimer(boost::function<void(void)>& func, int64_t millis) = 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
/** Register factory function for timers */
|
|
||||||
void RPCRegisterTimerInterface(RPCTimerInterface *iface);
|
|
||||||
/** Unregister factory function for timers */
|
|
||||||
void RPCUnregisterTimerInterface(RPCTimerInterface *iface);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Run func nSeconds from now.
|
|
||||||
* Overrides previous timer <name> (if any).
|
|
||||||
*/
|
|
||||||
void RPCRunLater(const std::string& name, boost::function<void(void)> func, int64_t nSeconds);
|
|
||||||
|
|
||||||
typedef UniValue(*rpcfn_type)(const UniValue& params, bool fHelp);
|
|
||||||
|
|
||||||
class CRPCCommand
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
std::string category;
|
|
||||||
std::string name;
|
|
||||||
rpcfn_type actor;
|
|
||||||
bool okSafeMode;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Bitcoin RPC command dispatcher.
|
|
||||||
*/
|
|
||||||
class CRPCTable
|
|
||||||
{
|
|
||||||
private:
|
|
||||||
std::map<std::string, const CRPCCommand*> mapCommands;
|
|
||||||
public:
|
|
||||||
CRPCTable();
|
|
||||||
const CRPCCommand* operator[](const std::string& name) const;
|
|
||||||
std::string help(const std::string& name) const;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Execute a method.
|
|
||||||
* @param method Method to execute
|
|
||||||
* @param params UniValue Array of arguments (JSON objects)
|
|
||||||
* @returns Result of the call.
|
|
||||||
* @throws an exception (UniValue) when an error happens.
|
|
||||||
*/
|
|
||||||
UniValue execute(const std::string &method, const UniValue ¶ms) const;
|
|
||||||
};
|
|
||||||
|
|
||||||
extern const CRPCTable tableRPC;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Utilities: convert hex-encoded Values
|
|
||||||
* (throws error if not hex).
|
|
||||||
*/
|
|
||||||
extern uint256 ParseHashV(const UniValue& v, std::string strName);
|
|
||||||
extern uint256 ParseHashO(const UniValue& o, std::string strKey);
|
|
||||||
extern std::vector<unsigned char> ParseHexV(const UniValue& v, std::string strName);
|
|
||||||
extern std::vector<unsigned char> ParseHexO(const UniValue& o, std::string strKey);
|
|
||||||
|
|
||||||
extern int64_t nWalletUnlockTime;
|
|
||||||
extern CAmount AmountFromValue(const UniValue& value);
|
|
||||||
extern UniValue ValueFromAmount(const CAmount& amount);
|
|
||||||
extern double GetDifficulty(const CBlockIndex* blockindex = NULL);
|
|
||||||
extern double GetNetworkDifficulty(const CBlockIndex* blockindex = NULL);
|
|
||||||
extern std::string HelpRequiringPassphrase();
|
|
||||||
extern std::string HelpExampleCli(const std::string& methodname, const std::string& args);
|
|
||||||
extern std::string HelpExampleRpc(const std::string& methodname, const std::string& args);
|
|
||||||
|
|
||||||
extern void EnsureWalletIsUnlocked();
|
|
||||||
|
|
||||||
extern UniValue getconnectioncount(const UniValue& params, bool fHelp); // in rpcnet.cpp
|
|
||||||
extern UniValue getpeerinfo(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue ping(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue addnode(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue disconnectnode(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue getaddednodeinfo(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue getnettotals(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue setban(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue listbanned(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue clearbanned(const UniValue& params, bool fHelp);
|
|
||||||
|
|
||||||
extern UniValue dumpprivkey(const UniValue& params, bool fHelp); // in rpcdump.cpp
|
|
||||||
extern UniValue importprivkey(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue importaddress(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue dumpwallet(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue importwallet(const UniValue& params, bool fHelp);
|
|
||||||
|
|
||||||
extern UniValue getgenerate(const UniValue& params, bool fHelp); // in rpcmining.cpp
|
|
||||||
extern UniValue setgenerate(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue generate(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue getlocalsolps(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue getnetworksolps(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue getnetworkhashps(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue getmininginfo(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue prioritisetransaction(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue getblocktemplate(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue submitblock(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue estimatefee(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue estimatepriority(const UniValue& params, bool fHelp);
|
|
||||||
|
|
||||||
extern UniValue getnewaddress(const UniValue& params, bool fHelp); // in rpcwallet.cpp
|
|
||||||
extern UniValue getaccountaddress(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue getrawchangeaddress(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue setaccount(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue getaccount(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue getaddressesbyaccount(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue sendtoaddress(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue signmessage(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue verifymessage(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue getreceivedbyaddress(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue getreceivedbyaccount(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue getbalance(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue getunconfirmedbalance(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue movecmd(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue sendfrom(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue sendmany(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue addmultisigaddress(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue createmultisig(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue listreceivedbyaddress(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue listreceivedbyaccount(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue listtransactions(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue listaddressgroupings(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue listaccounts(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue listsinceblock(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue gettransaction(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue backupwallet(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue keypoolrefill(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue walletpassphrase(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue walletpassphrasechange(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue walletlock(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue encryptwallet(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue validateaddress(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue getinfo(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue getwalletinfo(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue getblockchaininfo(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue getnetworkinfo(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue getdeprecationinfo(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue setmocktime(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue resendwallettransactions(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue zc_benchmark(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue zc_raw_keygen(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue zc_raw_joinsplit(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue zc_raw_receive(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue zc_sample_joinsplit(const UniValue& params, bool fHelp);
|
|
||||||
|
|
||||||
extern UniValue getrawtransaction(const UniValue& params, bool fHelp); // in rcprawtransaction.cpp
|
|
||||||
extern UniValue listunspent(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue lockunspent(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue listlockunspent(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue createrawtransaction(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue decoderawtransaction(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue decodescript(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue fundrawtransaction(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue signrawtransaction(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue sendrawtransaction(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue gettxoutproof(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue verifytxoutproof(const UniValue& params, bool fHelp);
|
|
||||||
|
|
||||||
extern UniValue getblockcount(const UniValue& params, bool fHelp); // in rpcblockchain.cpp
|
|
||||||
extern UniValue getbestblockhash(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue getdifficulty(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue settxfee(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue getmempoolinfo(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue getrawmempool(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue getblockhash(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue getblockheader(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue getblock(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue gettxoutsetinfo(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue gettxout(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue verifychain(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue getchaintips(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue invalidateblock(const UniValue& params, bool fHelp);
|
|
||||||
extern UniValue reconsiderblock(const UniValue& params, bool fHelp);
|
|
||||||
|
|
||||||
extern UniValue getblocksubsidy(const UniValue& params, bool fHelp);
|
|
||||||
|
|
||||||
extern UniValue z_exportkey(const UniValue& params, bool fHelp); // in rpcdump.cpp
|
|
||||||
extern UniValue z_importkey(const UniValue& params, bool fHelp); // in rpcdump.cpp
|
|
||||||
extern UniValue z_exportviewingkey(const UniValue& params, bool fHelp); // in rpcdump.cpp
|
|
||||||
extern UniValue z_importviewingkey(const UniValue& params, bool fHelp); // in rpcdump.cpp
|
|
||||||
extern UniValue z_getnewaddress(const UniValue& params, bool fHelp); // in rpcwallet.cpp
|
|
||||||
extern UniValue z_listaddresses(const UniValue& params, bool fHelp); // in rpcwallet.cpp
|
|
||||||
extern UniValue z_exportwallet(const UniValue& params, bool fHelp); // in rpcdump.cpp
|
|
||||||
extern UniValue z_importwallet(const UniValue& params, bool fHelp); // in rpcdump.cpp
|
|
||||||
extern UniValue z_listreceivedbyaddress(const UniValue& params, bool fHelp); // in rpcwallet.cpp
|
|
||||||
extern UniValue z_listunspent(const UniValue& params, bool fHelp); // in rpcwallet.cpp
|
|
||||||
extern UniValue z_getbalance(const UniValue& params, bool fHelp); // in rpcwallet.cpp
|
|
||||||
extern UniValue z_gettotalbalance(const UniValue& params, bool fHelp); // in rpcwallet.cpp
|
|
||||||
extern UniValue z_mergetoaddress(const UniValue& params, bool fHelp); // in rpcwallet.cpp
|
|
||||||
extern UniValue z_sendmany(const UniValue& params, bool fHelp); // in rpcwallet.cpp
|
|
||||||
extern UniValue z_shieldcoinbase(const UniValue& params, bool fHelp); // in rpcwallet.cpp
|
|
||||||
extern UniValue z_getoperationstatus(const UniValue& params, bool fHelp); // in rpcwallet.cpp
|
|
||||||
extern UniValue z_getoperationresult(const UniValue& params, bool fHelp); // in rpcwallet.cpp
|
|
||||||
extern UniValue z_listoperationids(const UniValue& params, bool fHelp); // in rpcwallet.cpp
|
|
||||||
extern UniValue z_validateaddress(const UniValue& params, bool fHelp); // in rpcmisc.cpp
|
|
||||||
extern UniValue z_getpaymentdisclosure(const UniValue& params, bool fHelp); // in rpcdisclosure.cpp
|
|
||||||
extern UniValue z_validatepaymentdisclosure(const UniValue ¶ms, bool fHelp); // in rpcdisclosure.cpp
|
|
||||||
|
|
||||||
bool StartRPC();
|
|
||||||
void InterruptRPC();
|
|
||||||
void StopRPC();
|
|
||||||
std::string JSONRPCExecBatch(const UniValue& vReq);
|
|
||||||
|
|
||||||
extern std::string experimentalDisabledHelpMsg(const std::string& rpc, const std::string& enableArg);
|
|
||||||
|
|
||||||
#endif // BITCOIN_RPCSERVER_H
|
|
|
@ -13,8 +13,8 @@
|
||||||
#include "data/alertTests.raw.h"
|
#include "data/alertTests.raw.h"
|
||||||
|
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
#include "rpcprotocol.h"
|
#include "rpc/protocol.h"
|
||||||
#include "rpcserver.h"
|
#include "rpc/server.h"
|
||||||
#include "serialize.h"
|
#include "serialize.h"
|
||||||
#include "streams.h"
|
#include "streams.h"
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
// Distributed under the MIT software license, see the accompanying
|
// Distributed under the MIT software license, see the accompanying
|
||||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||||
|
|
||||||
#include "rpcserver.h"
|
#include "rpc/server.h"
|
||||||
#include "rpcclient.h"
|
#include "rpc/client.h"
|
||||||
|
|
||||||
#include "key_io.h"
|
#include "key_io.h"
|
||||||
#include "netbase.h"
|
#include "netbase.h"
|
||||||
|
@ -43,7 +43,7 @@ UniValue CallRPC(string args)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
UniValue params = RPCConvertValues(strMethod, vArgs);
|
UniValue params = RPCConvertValues(strMethod, vArgs);
|
||||||
|
BOOST_CHECK(tableRPC[strMethod]);
|
||||||
rpcfn_type method = tableRPC[strMethod]->actor;
|
rpcfn_type method = tableRPC[strMethod]->actor;
|
||||||
try {
|
try {
|
||||||
UniValue result = (*method)(params, false);
|
UniValue result = (*method)(params, false);
|
||||||
|
@ -248,7 +248,7 @@ BOOST_AUTO_TEST_CASE(rpc_ban)
|
||||||
adr = find_value(o1, "address");
|
adr = find_value(o1, "address");
|
||||||
banned_until = find_value(o1, "banned_until");
|
banned_until = find_value(o1, "banned_until");
|
||||||
BOOST_CHECK_EQUAL(adr.get_str(), "127.0.0.0/255.255.255.0");
|
BOOST_CHECK_EQUAL(adr.get_str(), "127.0.0.0/255.255.255.0");
|
||||||
int64_t now = GetTime();
|
int64_t now = GetTime();
|
||||||
BOOST_CHECK(banned_until.get_int64() > now);
|
BOOST_CHECK(banned_until.get_int64() > now);
|
||||||
BOOST_CHECK(banned_until.get_int64()-now <= 200);
|
BOOST_CHECK(banned_until.get_int64()-now <= 200);
|
||||||
|
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
// Distributed under the MIT software license, see the accompanying
|
// Distributed under the MIT software license, see the accompanying
|
||||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||||
|
|
||||||
#include "rpcserver.h"
|
#include "rpc/server.h"
|
||||||
#include "rpcclient.h"
|
#include "rpc/client.h"
|
||||||
|
|
||||||
#include "key_io.h"
|
#include "key_io.h"
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
|
@ -13,14 +13,12 @@
|
||||||
|
|
||||||
#include "zcash/Address.hpp"
|
#include "zcash/Address.hpp"
|
||||||
|
|
||||||
#include "rpcserver.h"
|
|
||||||
#include "asyncrpcqueue.h"
|
#include "asyncrpcqueue.h"
|
||||||
#include "asyncrpcoperation.h"
|
#include "asyncrpcoperation.h"
|
||||||
#include "wallet/asyncrpcoperation_mergetoaddress.h"
|
#include "wallet/asyncrpcoperation_mergetoaddress.h"
|
||||||
#include "wallet/asyncrpcoperation_sendmany.h"
|
#include "wallet/asyncrpcoperation_sendmany.h"
|
||||||
#include "wallet/asyncrpcoperation_shieldcoinbase.h"
|
#include "wallet/asyncrpcoperation_shieldcoinbase.h"
|
||||||
|
|
||||||
#include "rpcprotocol.h"
|
|
||||||
#include "init.h"
|
#include "init.h"
|
||||||
|
|
||||||
#include <array>
|
#include <array>
|
||||||
|
|
|
@ -14,6 +14,8 @@
|
||||||
#include "txdb.h"
|
#include "txdb.h"
|
||||||
#include "txmempool.h"
|
#include "txmempool.h"
|
||||||
#include "ui_interface.h"
|
#include "ui_interface.h"
|
||||||
|
#include "rpc/server.h"
|
||||||
|
#include "rpc/register.h"
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
#ifdef ENABLE_WALLET
|
#ifdef ENABLE_WALLET
|
||||||
#include "wallet/db.h"
|
#include "wallet/db.h"
|
||||||
|
@ -75,8 +77,12 @@ BasicTestingSetup::~BasicTestingSetup()
|
||||||
|
|
||||||
TestingSetup::TestingSetup()
|
TestingSetup::TestingSetup()
|
||||||
{
|
{
|
||||||
|
// Ideally we'd move all the RPC tests to the functional testing framework
|
||||||
|
// instead of unit tests, but for now we need these here.
|
||||||
|
RegisterAllCoreRPCCommands(tableRPC);
|
||||||
#ifdef ENABLE_WALLET
|
#ifdef ENABLE_WALLET
|
||||||
bitdb.MakeMock();
|
bitdb.MakeMock();
|
||||||
|
RegisterWalletRPCCommands(tableRPC);
|
||||||
#endif
|
#endif
|
||||||
ClearDatadirCache();
|
ClearDatadirCache();
|
||||||
pathTemp = GetTempPath() / strprintf("test_bitcoin_%lu_%i", (unsigned long)GetTime(), (int)(GetRand(100000)));
|
pathTemp = GetTempPath() / strprintf("test_bitcoin_%lu_%i", (unsigned long)GetTime(), (int)(GetRand(100000)));
|
||||||
|
|
|
@ -13,8 +13,8 @@
|
||||||
#include "miner.h"
|
#include "miner.h"
|
||||||
#include "net.h"
|
#include "net.h"
|
||||||
#include "netbase.h"
|
#include "netbase.h"
|
||||||
#include "rpcprotocol.h"
|
#include "rpc/protocol.h"
|
||||||
#include "rpcserver.h"
|
#include "rpc/server.h"
|
||||||
#include "script/interpreter.h"
|
#include "script/interpreter.h"
|
||||||
#include "sodium.h"
|
#include "sodium.h"
|
||||||
#include "timedata.h"
|
#include "timedata.h"
|
||||||
|
@ -623,6 +623,9 @@ bool AsyncRPCOperation_mergetoaddress::main_impl()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
extern UniValue signrawtransaction(const UniValue& params, bool fHelp);
|
||||||
|
extern UniValue sendrawtransaction(const UniValue& params, bool fHelp);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sign and send a raw transaction.
|
* Sign and send a raw transaction.
|
||||||
* Raw transaction as hex string should be in object field "rawtxn"
|
* Raw transaction as hex string should be in object field "rawtxn"
|
||||||
|
|
|
@ -12,7 +12,8 @@
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
#include "net.h"
|
#include "net.h"
|
||||||
#include "netbase.h"
|
#include "netbase.h"
|
||||||
#include "rpcserver.h"
|
#include "rpc/protocol.h"
|
||||||
|
#include "rpc/server.h"
|
||||||
#include "timedata.h"
|
#include "timedata.h"
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "utilmoneystr.h"
|
#include "utilmoneystr.h"
|
||||||
|
@ -20,7 +21,6 @@
|
||||||
#include "walletdb.h"
|
#include "walletdb.h"
|
||||||
#include "script/interpreter.h"
|
#include "script/interpreter.h"
|
||||||
#include "utiltime.h"
|
#include "utiltime.h"
|
||||||
#include "rpcprotocol.h"
|
|
||||||
#include "zcash/IncrementalMerkleTree.hpp"
|
#include "zcash/IncrementalMerkleTree.hpp"
|
||||||
#include "sodium.h"
|
#include "sodium.h"
|
||||||
#include "miner.h"
|
#include "miner.h"
|
||||||
|
@ -768,6 +768,9 @@ bool AsyncRPCOperation_sendmany::main_impl() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
extern UniValue signrawtransaction(const UniValue& params, bool fHelp);
|
||||||
|
extern UniValue sendrawtransaction(const UniValue& params, bool fHelp);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sign and send a raw transaction.
|
* Sign and send a raw transaction.
|
||||||
* Raw transaction as hex string should be in object field "rawtxn"
|
* Raw transaction as hex string should be in object field "rawtxn"
|
||||||
|
|
|
@ -11,7 +11,8 @@
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
#include "net.h"
|
#include "net.h"
|
||||||
#include "netbase.h"
|
#include "netbase.h"
|
||||||
#include "rpcserver.h"
|
#include "rpc/protocol.h"
|
||||||
|
#include "rpc/server.h"
|
||||||
#include "timedata.h"
|
#include "timedata.h"
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "utilmoneystr.h"
|
#include "utilmoneystr.h"
|
||||||
|
@ -19,7 +20,6 @@
|
||||||
#include "walletdb.h"
|
#include "walletdb.h"
|
||||||
#include "script/interpreter.h"
|
#include "script/interpreter.h"
|
||||||
#include "utiltime.h"
|
#include "utiltime.h"
|
||||||
#include "rpcprotocol.h"
|
|
||||||
#include "zcash/IncrementalMerkleTree.hpp"
|
#include "zcash/IncrementalMerkleTree.hpp"
|
||||||
#include "sodium.h"
|
#include "sodium.h"
|
||||||
#include "miner.h"
|
#include "miner.h"
|
||||||
|
@ -245,6 +245,9 @@ bool AsyncRPCOperation_shieldcoinbase::main_impl() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
extern UniValue signrawtransaction(const UniValue& params, bool fHelp);
|
||||||
|
extern UniValue sendrawtransaction(const UniValue& params, bool fHelp);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sign and send a raw transaction.
|
* Sign and send a raw transaction.
|
||||||
* Raw transaction as hex string should be in object field "rawtxn"
|
* Raw transaction as hex string should be in object field "rawtxn"
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
// Distributed under the MIT software license, see the accompanying
|
// Distributed under the MIT software license, see the accompanying
|
||||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||||
|
|
||||||
#include "rpcserver.h"
|
#include "rpc/server.h"
|
||||||
#include "init.h"
|
#include "init.h"
|
||||||
#include "key_io.h"
|
#include "key_io.h"
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
|
|
|
@ -2,8 +2,9 @@
|
||||||
// Distributed under the MIT software license, see the accompanying
|
// Distributed under the MIT software license, see the accompanying
|
||||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||||
|
|
||||||
|
#include "chain.h"
|
||||||
#include "key_io.h"
|
#include "key_io.h"
|
||||||
#include "rpcserver.h"
|
#include "rpc/server.h"
|
||||||
#include "init.h"
|
#include "init.h"
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
#include "script/script.h"
|
#include "script/script.h"
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
#include "net.h"
|
#include "net.h"
|
||||||
#include "netbase.h"
|
#include "netbase.h"
|
||||||
#include "rpcserver.h"
|
#include "rpc/server.h"
|
||||||
#include "timedata.h"
|
#include "timedata.h"
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "utilmoneystr.h"
|
#include "utilmoneystr.h"
|
||||||
|
@ -1059,7 +1059,7 @@ UniValue sendmany(const UniValue& params, bool fHelp)
|
||||||
return wtx.GetHash().GetHex();
|
return wtx.GetHash().GetHex();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Defined in rpcmisc.cpp
|
// Defined in rpc/misc.cpp
|
||||||
extern CScript _createmultisig_redeemScript(const UniValue& params);
|
extern CScript _createmultisig_redeemScript(const UniValue& params);
|
||||||
|
|
||||||
UniValue addmultisigaddress(const UniValue& params, bool fHelp)
|
UniValue addmultisigaddress(const UniValue& params, bool fHelp)
|
||||||
|
@ -4347,3 +4347,96 @@ UniValue z_listoperationids(const UniValue& params, bool fHelp)
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern UniValue dumpprivkey(const UniValue& params, bool fHelp); // in rpcdump.cpp
|
||||||
|
extern UniValue importprivkey(const UniValue& params, bool fHelp);
|
||||||
|
extern UniValue importaddress(const UniValue& params, bool fHelp);
|
||||||
|
extern UniValue dumpwallet(const UniValue& params, bool fHelp);
|
||||||
|
extern UniValue importwallet(const UniValue& params, bool fHelp);
|
||||||
|
extern UniValue z_exportkey(const UniValue& params, bool fHelp);
|
||||||
|
extern UniValue z_importkey(const UniValue& params, bool fHelp);
|
||||||
|
extern UniValue z_exportviewingkey(const UniValue& params, bool fHelp);
|
||||||
|
extern UniValue z_importviewingkey(const UniValue& params, bool fHelp);
|
||||||
|
extern UniValue z_exportwallet(const UniValue& params, bool fHelp);
|
||||||
|
extern UniValue z_importwallet(const UniValue& params, bool fHelp);
|
||||||
|
|
||||||
|
extern UniValue z_getpaymentdisclosure(const UniValue& params, bool fHelp); // in rpcdisclosure.cpp
|
||||||
|
extern UniValue z_validatepaymentdisclosure(const UniValue ¶ms, bool fHelp);
|
||||||
|
|
||||||
|
static const CRPCCommand commands[] =
|
||||||
|
{ // category name actor (function) okSafeMode
|
||||||
|
// --------------------- ------------------------ ----------------------- ----------
|
||||||
|
{ "rawtransactions", "fundrawtransaction", &fundrawtransaction, false },
|
||||||
|
{ "hidden", "resendwallettransactions", &resendwallettransactions, true },
|
||||||
|
{ "wallet", "addmultisigaddress", &addmultisigaddress, true },
|
||||||
|
{ "wallet", "backupwallet", &backupwallet, true },
|
||||||
|
{ "wallet", "dumpprivkey", &dumpprivkey, true },
|
||||||
|
{ "wallet", "dumpwallet", &dumpwallet, true },
|
||||||
|
{ "wallet", "encryptwallet", &encryptwallet, true },
|
||||||
|
{ "wallet", "getaccountaddress", &getaccountaddress, true },
|
||||||
|
{ "wallet", "getaccount", &getaccount, true },
|
||||||
|
{ "wallet", "getaddressesbyaccount", &getaddressesbyaccount, true },
|
||||||
|
{ "wallet", "getbalance", &getbalance, false },
|
||||||
|
{ "wallet", "getnewaddress", &getnewaddress, true },
|
||||||
|
{ "wallet", "getrawchangeaddress", &getrawchangeaddress, true },
|
||||||
|
{ "wallet", "getreceivedbyaccount", &getreceivedbyaccount, false },
|
||||||
|
{ "wallet", "getreceivedbyaddress", &getreceivedbyaddress, false },
|
||||||
|
{ "wallet", "gettransaction", &gettransaction, false },
|
||||||
|
{ "wallet", "getunconfirmedbalance", &getunconfirmedbalance, false },
|
||||||
|
{ "wallet", "getwalletinfo", &getwalletinfo, false },
|
||||||
|
{ "wallet", "importprivkey", &importprivkey, true },
|
||||||
|
{ "wallet", "importwallet", &importwallet, true },
|
||||||
|
{ "wallet", "importaddress", &importaddress, true },
|
||||||
|
{ "wallet", "keypoolrefill", &keypoolrefill, true },
|
||||||
|
{ "wallet", "listaccounts", &listaccounts, false },
|
||||||
|
{ "wallet", "listaddressgroupings", &listaddressgroupings, false },
|
||||||
|
{ "wallet", "listlockunspent", &listlockunspent, false },
|
||||||
|
{ "wallet", "listreceivedbyaccount", &listreceivedbyaccount, false },
|
||||||
|
{ "wallet", "listreceivedbyaddress", &listreceivedbyaddress, false },
|
||||||
|
{ "wallet", "listsinceblock", &listsinceblock, false },
|
||||||
|
{ "wallet", "listtransactions", &listtransactions, false },
|
||||||
|
{ "wallet", "listunspent", &listunspent, false },
|
||||||
|
{ "wallet", "lockunspent", &lockunspent, true },
|
||||||
|
{ "wallet", "move", &movecmd, false },
|
||||||
|
{ "wallet", "sendfrom", &sendfrom, false },
|
||||||
|
{ "wallet", "sendmany", &sendmany, false },
|
||||||
|
{ "wallet", "sendtoaddress", &sendtoaddress, false },
|
||||||
|
{ "wallet", "setaccount", &setaccount, true },
|
||||||
|
{ "wallet", "settxfee", &settxfee, true },
|
||||||
|
{ "wallet", "signmessage", &signmessage, true },
|
||||||
|
{ "wallet", "walletlock", &walletlock, true },
|
||||||
|
{ "wallet", "walletpassphrasechange", &walletpassphrasechange, true },
|
||||||
|
{ "wallet", "walletpassphrase", &walletpassphrase, true },
|
||||||
|
{ "wallet", "zcbenchmark", &zc_benchmark, true },
|
||||||
|
{ "wallet", "zcrawkeygen", &zc_raw_keygen, true },
|
||||||
|
{ "wallet", "zcrawjoinsplit", &zc_raw_joinsplit, true },
|
||||||
|
{ "wallet", "zcrawreceive", &zc_raw_receive, true },
|
||||||
|
{ "wallet", "zcsamplejoinsplit", &zc_sample_joinsplit, true },
|
||||||
|
{ "wallet", "z_listreceivedbyaddress", &z_listreceivedbyaddress, false },
|
||||||
|
{ "wallet", "z_listunspent", &z_listunspent, false },
|
||||||
|
{ "wallet", "z_getbalance", &z_getbalance, false },
|
||||||
|
{ "wallet", "z_gettotalbalance", &z_gettotalbalance, false },
|
||||||
|
{ "wallet", "z_mergetoaddress", &z_mergetoaddress, false },
|
||||||
|
{ "wallet", "z_sendmany", &z_sendmany, false },
|
||||||
|
{ "wallet", "z_shieldcoinbase", &z_shieldcoinbase, false },
|
||||||
|
{ "wallet", "z_getoperationstatus", &z_getoperationstatus, true },
|
||||||
|
{ "wallet", "z_getoperationresult", &z_getoperationresult, true },
|
||||||
|
{ "wallet", "z_listoperationids", &z_listoperationids, true },
|
||||||
|
{ "wallet", "z_getnewaddress", &z_getnewaddress, true },
|
||||||
|
{ "wallet", "z_listaddresses", &z_listaddresses, true },
|
||||||
|
{ "wallet", "z_exportkey", &z_exportkey, true },
|
||||||
|
{ "wallet", "z_importkey", &z_importkey, true },
|
||||||
|
{ "wallet", "z_exportviewingkey", &z_exportviewingkey, true },
|
||||||
|
{ "wallet", "z_importviewingkey", &z_importviewingkey, true },
|
||||||
|
{ "wallet", "z_exportwallet", &z_exportwallet, true },
|
||||||
|
{ "wallet", "z_importwallet", &z_importwallet, true },
|
||||||
|
// TODO: rearrange into another category
|
||||||
|
{ "disclosure", "z_getpaymentdisclosure", &z_getpaymentdisclosure, true },
|
||||||
|
{ "disclosure", "z_validatepaymentdisclosure", &z_validatepaymentdisclosure, true }
|
||||||
|
};
|
||||||
|
|
||||||
|
void RegisterWalletRPCCommands(CRPCTable &tableRPC)
|
||||||
|
{
|
||||||
|
for (unsigned int vcidx = 0; vcidx < ARRAYLEN(commands); vcidx++)
|
||||||
|
tableRPC.appendCommand(commands[vcidx].name, &commands[vcidx]);
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
// Copyright (c) 2016 The Bitcoin Core developers
|
||||||
|
// Distributed under the MIT software license, see the accompanying
|
||||||
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||||
|
|
||||||
|
#ifndef BITCOIN_WALLET_RPCWALLET_H
|
||||||
|
#define BITCOIN_WALLET_RPCWALLET_H
|
||||||
|
|
||||||
|
class CRPCTable;
|
||||||
|
|
||||||
|
void RegisterWalletRPCCommands(CRPCTable &tableRPC);
|
||||||
|
|
||||||
|
#endif //BITCOIN_WALLET_RPCWALLET_H
|
|
@ -21,6 +21,7 @@
|
||||||
#include "wallet/crypter.h"
|
#include "wallet/crypter.h"
|
||||||
#include "wallet/wallet_ismine.h"
|
#include "wallet/wallet_ismine.h"
|
||||||
#include "wallet/walletdb.h"
|
#include "wallet/walletdb.h"
|
||||||
|
#include "wallet/rpcwallet.h"
|
||||||
#include "zcash/Address.hpp"
|
#include "zcash/Address.hpp"
|
||||||
#include "base58.h"
|
#include "base58.h"
|
||||||
|
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
#include "miner.h"
|
#include "miner.h"
|
||||||
#include "pow.h"
|
#include "pow.h"
|
||||||
#include "rpcserver.h"
|
#include "rpc/server.h"
|
||||||
#include "script/sign.h"
|
#include "script/sign.h"
|
||||||
#include "sodium.h"
|
#include "sodium.h"
|
||||||
#include "streams.h"
|
#include "streams.h"
|
||||||
|
@ -431,6 +431,9 @@ double benchmark_connectblock_slow()
|
||||||
return duration;
|
return duration;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern UniValue getnewaddress(const UniValue& params, bool fHelp); // in rpcwallet.cpp
|
||||||
|
extern UniValue sendtoaddress(const UniValue& params, bool fHelp);
|
||||||
|
|
||||||
double benchmark_sendtoaddress(CAmount amount)
|
double benchmark_sendtoaddress(CAmount amount)
|
||||||
{
|
{
|
||||||
UniValue params(UniValue::VARR);
|
UniValue params(UniValue::VARR);
|
||||||
|
@ -458,6 +461,8 @@ double benchmark_loadwallet()
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern UniValue listunspent(const UniValue& params, bool fHelp);
|
||||||
|
|
||||||
double benchmark_listunspent()
|
double benchmark_listunspent()
|
||||||
{
|
{
|
||||||
UniValue params(UniValue::VARR);
|
UniValue params(UniValue::VARR);
|
||||||
|
|
Loading…
Reference in New Issue