b4a3da2642
These are technically static libs, but not in any way shared libs. They are used solely only by this repo and really only by the hub. Most important, no header files are installed and basically none of the normal rules for reusable libraries are applied to these files.
286 lines
12 KiB
C++
286 lines
12 KiB
C++
/*
|
|
* This file is part of the Flowee project
|
|
* Copyright (C) 2010 Satoshi Nakamoto
|
|
* Copyright (C) 2009-2015 The Bitcoin Core developers
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#ifndef FLOWEE_RPCSERVER_H
|
|
#define FLOWEE_RPCSERVER_H
|
|
|
|
#include "rpcprotocol.h"
|
|
#include "uint256.h"
|
|
|
|
#include <list>
|
|
#include <map>
|
|
|
|
#include <boost/function.hpp>
|
|
|
|
#include <univalue.h>
|
|
|
|
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();
|
|
|
|
/**
|
|
* 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 pcserver 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 int64_t AmountFromValue(const UniValue& value);
|
|
extern UniValue ValueFromAmount(int64_t amount);
|
|
extern double GetDifficulty(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 importpubkey(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 createaddress(const UniValue& params, bool fHelp);
|
|
extern UniValue setcoinbase(const UniValue& params, bool fHelp);
|
|
extern UniValue validateblocktemplate(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 estimatesmartfee(const UniValue& params, bool fHelp);
|
|
extern UniValue estimatesmartpriority(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 abandontransaction(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 setmocktime(const UniValue& params, bool fHelp);
|
|
extern UniValue resendwallettransactions(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 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 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);
|
|
|
|
void StartRPC();
|
|
void InterruptRPC();
|
|
void StopRPC();
|
|
std::string JSONRPCExecBatch(const UniValue& vReq);
|
|
|
|
#endif
|