aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Makefile.qt.include2
-rw-r--r--src/bitcoin-tx.cpp12
-rw-r--r--src/coins.h5
-rw-r--r--src/compat/glibcxx_compat.cpp2
-rw-r--r--src/keystore.h9
-rw-r--r--src/m4/bitcoin_find_bdb48.m44
-rw-r--r--src/main.cpp17
-rw-r--r--src/main.h2
-rw-r--r--src/miner.cpp15
-rw-r--r--src/net.cpp21
-rw-r--r--src/qt/bitcoin.qrc2
-rw-r--r--src/qt/bitcoingui.cpp4
-rw-r--r--src/qt/guiutil.cpp4
-rw-r--r--src/qt/peertablemodel.cpp10
-rw-r--r--src/qt/res/icons/toolbar.pngbin815 -> 0 bytes
-rw-r--r--src/qt/res/icons/toolbar_testnet.pngbin678 -> 0 bytes
-rw-r--r--src/rpcserver.cpp191
-rw-r--r--src/rpcserver.h1
-rw-r--r--src/rpcwallet.cpp2
-rw-r--r--src/script.cpp12
-rw-r--r--src/util.cpp13
21 files changed, 166 insertions, 162 deletions
diff --git a/src/Makefile.qt.include b/src/Makefile.qt.include
index 2052264dc9..7e6fa5cb88 100644
--- a/src/Makefile.qt.include
+++ b/src/Makefile.qt.include
@@ -245,8 +245,6 @@ RES_ICONS = \
qt/res/icons/remove.png \
qt/res/icons/send.png \
qt/res/icons/synced.png \
- qt/res/icons/toolbar.png \
- qt/res/icons/toolbar_testnet.png \
qt/res/icons/transaction0.png \
qt/res/icons/transaction2.png \
qt/res/icons/transaction_conflicted.png \
diff --git a/src/bitcoin-tx.cpp b/src/bitcoin-tx.cpp
index 299315424b..ffe87298f6 100644
--- a/src/bitcoin-tx.cpp
+++ b/src/bitcoin-tx.cpp
@@ -283,12 +283,12 @@ static const struct {
const char *flagStr;
int flags;
} sighashOptions[N_SIGHASH_OPTS] = {
- "ALL", SIGHASH_ALL,
- "NONE", SIGHASH_NONE,
- "SINGLE", SIGHASH_SINGLE,
- "ALL|ANYONECANPAY", SIGHASH_ALL|SIGHASH_ANYONECANPAY,
- "NONE|ANYONECANPAY", SIGHASH_NONE|SIGHASH_ANYONECANPAY,
- "SINGLE|ANYONECANPAY", SIGHASH_SINGLE|SIGHASH_ANYONECANPAY,
+ {"ALL", SIGHASH_ALL},
+ {"NONE", SIGHASH_NONE},
+ {"SINGLE", SIGHASH_SINGLE},
+ {"ALL|ANYONECANPAY", SIGHASH_ALL|SIGHASH_ANYONECANPAY},
+ {"NONE|ANYONECANPAY", SIGHASH_NONE|SIGHASH_ANYONECANPAY},
+ {"SINGLE|ANYONECANPAY", SIGHASH_SINGLE|SIGHASH_ANYONECANPAY},
};
static bool findSighashFlags(int& flags, const string& flagStr)
diff --git a/src/coins.h b/src/coins.h
index 9f90fe6bd0..ff60288163 100644
--- a/src/coins.h
+++ b/src/coins.h
@@ -247,7 +247,10 @@ private:
public:
CCoinsKeyHasher();
- uint64_t operator()(const uint256& key) const {
+ // This *must* return size_t. With Boost 1.46 on 32-bit systems the
+ // unordered_map will behave unpredictably if the custom hasher returns a
+ // uint64_t, resulting in failures when syncing the chain (#4634).
+ size_t operator()(const uint256& key) const {
return key.GetHash(salt);
}
};
diff --git a/src/compat/glibcxx_compat.cpp b/src/compat/glibcxx_compat.cpp
index 417166aeda..cbe059735b 100644
--- a/src/compat/glibcxx_compat.cpp
+++ b/src/compat/glibcxx_compat.cpp
@@ -64,6 +64,8 @@ template istream& istream::_M_extract(unsigned short&);
out_of_range::~out_of_range() _GLIBCXX_USE_NOEXCEPT { }
+length_error::~length_error() _GLIBCXX_USE_NOEXCEPT { }
+
// Used with permission.
// See: https://github.com/madlib/madlib/commit/c3db418c0d34d6813608f2137fef1012ce03043d
diff --git a/src/keystore.h b/src/keystore.h
index 72411a1387..6a3a0dc13e 100644
--- a/src/keystore.h
+++ b/src/keystore.h
@@ -8,21 +8,12 @@
#include "key.h"
#include "sync.h"
-#include "script.h" // for CNoDestination
#include <boost/signals2/signal.hpp>
#include <boost/variant.hpp>
class CScript;
-/** A txout script template with a specific destination. It is either:
- * * CNoDestination: no destination set
- * * CKeyID: TX_PUBKEYHASH destination
- * * CScriptID: TX_SCRIPTHASH destination
- * A CTxDestination is the internal data type encoded in a CBitcoinAddress
- */
-typedef boost::variant<CNoDestination, CKeyID, CScriptID> CTxDestination;
-
/** A virtual base class for key stores */
class CKeyStore
{
diff --git a/src/m4/bitcoin_find_bdb48.m4 b/src/m4/bitcoin_find_bdb48.m4
index 72ec49b635..5223163fe5 100644
--- a/src/m4/bitcoin_find_bdb48.m4
+++ b/src/m4/bitcoin_find_bdb48.m4
@@ -44,7 +44,7 @@ AC_DEFUN([BITCOIN_FIND_BDB48],[
AC_ARG_WITH([incompatible-bdb],[AS_HELP_STRING([--with-incompatible-bdb], [allow using a bdb version other than 4.8])],[
AC_MSG_WARN([Found Berkeley DB other than 4.8; wallets opened by this build will not be portable!])
],[
- AC_MSG_ERROR([Found Berkeley DB other than 4.8, required for portable wallets (--with-incompatible-bdb to ignore)])
+ AC_MSG_ERROR([Found Berkeley DB other than 4.8, required for portable wallets (--with-incompatible-bdb to ignore or --disable-wallet to disable wallet functionality)])
])
else
BITCOIN_SUBDIR_TO_INCLUDE(BDB_CPPFLAGS,[${bdb48path}],db_cxx)
@@ -60,7 +60,7 @@ AC_DEFUN([BITCOIN_FIND_BDB48],[
])
done
if test "x$BDB_LIBS" = "x"; then
- AC_MSG_ERROR(libdb_cxx missing)
+ AC_MSG_ERROR([libdb_cxx missing, Bitcoin Core requires this library for wallet functionality (--disable-wallet to disable wallet functionality)])
fi
AC_SUBST(BDB_LIBS)
])
diff --git a/src/main.cpp b/src/main.cpp
index ba521b6b19..e135e93adb 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -956,9 +956,18 @@ bool AcceptToMemoryPool(CTxMemPool& pool, CValidationState &state, const CTransa
if (Params().RequireStandard() && !AreInputsStandard(tx, view))
return error("AcceptToMemoryPool: : nonstandard transaction input");
- // Note: if you modify this code to accept non-standard transactions, then
- // you should add code here to check that the transaction does a
- // reasonable number of ECDSA signature verifications.
+ // Check that the transaction doesn't have an excessive number of
+ // sigops, making it impossible to mine. Since the coinbase transaction
+ // itself can contain sigops MAX_TX_SIGOPS is less than
+ // MAX_BLOCK_SIGOPS; we still consider this an invalid rather than
+ // merely non-standard transaction.
+ unsigned int nSigOps = GetLegacySigOpCount(tx);
+ nSigOps += GetP2SHSigOpCount(tx, view);
+ if (nSigOps > MAX_TX_SIGOPS)
+ return state.DoS(0,
+ error("AcceptToMemoryPool : too many sigops %s, %d > %d",
+ hash.ToString(), nSigOps, MAX_TX_SIGOPS),
+ REJECT_NONSTANDARD, "bad-txns-too-many-sigops");
int64_t nValueOut = tx.GetValueOut();
int64_t nFees = nValueIn-nValueOut;
@@ -3052,7 +3061,7 @@ bool CVerifyDB::VerifyDB(int nCheckLevel, int nCheckDepth)
}
}
// check level 3: check for inconsistencies during memory-only disconnect of tip blocks
- if (nCheckLevel >= 3 && pindex == pindexState && (coins.GetCacheSize() + pcoinsTip->GetCacheSize()) <= 2*nCoinCacheSize + 32000) {
+ if (nCheckLevel >= 3 && pindex == pindexState && (coins.GetCacheSize() + pcoinsTip->GetCacheSize()) <= nCoinCacheSize) {
bool fClean = true;
if (!DisconnectBlock(block, state, pindex, coins, &fClean))
return error("VerifyDB() : *** irrecoverable inconsistency in block data at %d, hash=%s", pindex->nHeight, pindex->GetBlockHash().ToString());
diff --git a/src/main.h b/src/main.h
index a27020459a..01d3f119e1 100644
--- a/src/main.h
+++ b/src/main.h
@@ -45,6 +45,8 @@ static const unsigned int MAX_STANDARD_TX_SIZE = 100000;
static const unsigned int MAX_BLOCK_SIGOPS = MAX_BLOCK_SIZE/50;
/** Maxiumum number of signature check operations in an IsStandard() P2SH script */
static const unsigned int MAX_P2SH_SIGOPS = 15;
+/** The maximum number of sigops we're willing to relay/mine in a single tx */
+static const unsigned int MAX_TX_SIGOPS = MAX_BLOCK_SIGOPS/5;
/** The maximum number of orphan transactions kept in memory */
static const unsigned int MAX_ORPHAN_TRANSACTIONS = MAX_BLOCK_SIZE/100;
/** Default for -maxorphanblocks, maximum number of orphan blocks kept in memory */
diff --git a/src/miner.cpp b/src/miner.cpp
index ec56c71192..9408d2c5aa 100644
--- a/src/miner.cpp
+++ b/src/miner.cpp
@@ -402,17 +402,8 @@ CBlockTemplate* CreateNewBlockWithKey(CReserveKey& reservekey)
return CreateNewBlock(scriptPubKey);
}
-bool CheckWork(CBlock* pblock, CWallet& wallet, CReserveKey& reservekey)
+bool ProcessBlockFound(CBlock* pblock, CWallet& wallet, CReserveKey& reservekey)
{
- uint256 hash = pblock->GetHash();
- uint256 hashTarget = uint256().SetCompact(pblock->nBits);
-
- if (hash > hashTarget)
- return false;
-
- //// debug print
- LogPrintf("BitcoinMiner:\n");
- LogPrintf("proof-of-work found \n hash: %s \ntarget: %s\n", hash.GetHex(), hashTarget.GetHex());
pblock->print();
LogPrintf("generated %s\n", FormatMoney(pblock->vtx[0].vout[0].nValue));
@@ -500,7 +491,9 @@ void static BitcoinMiner(CWallet *pwallet)
assert(hash == pblock->GetHash());
SetThreadPriority(THREAD_PRIORITY_NORMAL);
- CheckWork(pblock, *pwallet, reservekey);
+ LogPrintf("BitcoinMiner:\n");
+ LogPrintf("proof-of-work found \n hash: %s \ntarget: %s\n", hash.GetHex(), hashTarget.GetHex());
+ ProcessBlockFound(pblock, *pwallet, reservekey);
SetThreadPriority(THREAD_PRIORITY_LOWEST);
// In regression test mode, stop mining after a block is found.
diff --git a/src/net.cpp b/src/net.cpp
index 62124514c8..ec58f84b06 100644
--- a/src/net.cpp
+++ b/src/net.cpp
@@ -368,7 +368,7 @@ bool GetMyExternalIP(CNetAddr& ipRet)
const char* pszKeyword;
for (int nLookup = 0; nLookup <= 1; nLookup++)
- for (int nHost = 1; nHost <= 2; nHost++)
+ for (int nHost = 1; nHost <= 1; nHost++)
{
// We should be phasing out our use of sites like these. If we need
// replacements, we should ask for volunteers to put this simple
@@ -393,25 +393,6 @@ bool GetMyExternalIP(CNetAddr& ipRet)
pszKeyword = "Address:";
}
- else if (nHost == 2)
- {
- addrConnect = CService("74.208.43.192", 80); // www.showmyip.com
-
- if (nLookup == 1)
- {
- CService addrIP("www.showmyip.com", 80, true);
- if (addrIP.IsValid())
- addrConnect = addrIP;
- }
-
- pszGet = "GET /simple/ HTTP/1.1\r\n"
- "Host: www.showmyip.com\r\n"
- "User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)\r\n"
- "Connection: close\r\n"
- "\r\n";
-
- pszKeyword = NULL; // Returns just IP address
- }
if (GetMyExternalIP2(addrConnect, pszGet, pszKeyword, ipRet))
return true;
diff --git a/src/qt/bitcoin.qrc b/src/qt/bitcoin.qrc
index 357c6470d3..6dba62035b 100644
--- a/src/qt/bitcoin.qrc
+++ b/src/qt/bitcoin.qrc
@@ -4,7 +4,6 @@
<file alias="address-book">res/icons/address-book.png</file>
<file alias="quit">res/icons/quit.png</file>
<file alias="send">res/icons/send.png</file>
- <file alias="toolbar">res/icons/toolbar.png</file>
<file alias="connect_0">res/icons/connect0_16.png</file>
<file alias="connect_1">res/icons/connect1_16.png</file>
<file alias="connect_2">res/icons/connect2_16.png</file>
@@ -24,7 +23,6 @@
<file alias="editcopy">res/icons/editcopy.png</file>
<file alias="add">res/icons/add.png</file>
<file alias="bitcoin_testnet">res/icons/bitcoin_testnet.png</file>
- <file alias="toolbar_testnet">res/icons/toolbar_testnet.png</file>
<file alias="edit">res/icons/edit.png</file>
<file alias="history">res/icons/history.png</file>
<file alias="overview">res/icons/overview.png</file>
diff --git a/src/qt/bitcoingui.cpp b/src/qt/bitcoingui.cpp
index e3257e859c..bfca5e8d1a 100644
--- a/src/qt/bitcoingui.cpp
+++ b/src/qt/bitcoingui.cpp
@@ -479,12 +479,12 @@ void BitcoinGUI::createTrayIcon(bool fIsTestnet)
if (!fIsTestnet)
{
trayIcon->setToolTip(tr("Bitcoin Core client"));
- trayIcon->setIcon(QIcon(":/icons/toolbar"));
+ trayIcon->setIcon(QIcon(":/icons/bitcoin"));
}
else
{
trayIcon->setToolTip(tr("Bitcoin Core client") + " " + tr("[testnet]"));
- trayIcon->setIcon(QIcon(":/icons/toolbar_testnet"));
+ trayIcon->setIcon(QIcon(":/icons/bitcoin_testnet"));
}
trayIcon->show();
diff --git a/src/qt/guiutil.cpp b/src/qt/guiutil.cpp
index 3b9b1226e1..389a08d9e8 100644
--- a/src/qt/guiutil.cpp
+++ b/src/qt/guiutil.cpp
@@ -124,6 +124,10 @@ bool parseBitcoinURI(const QUrl &uri, SendCoinsRecipient *out)
SendCoinsRecipient rv;
rv.address = uri.path();
+ // Trim any following forward slash which may have been added by the OS
+ if (rv.address.endsWith("/")) {
+ rv.address.truncate(rv.address.length() - 1);
+ }
rv.amount = 0;
#if QT_VERSION < 0x050000
diff --git a/src/qt/peertablemodel.cpp b/src/qt/peertablemodel.cpp
index 54b46867ea..cfa05300cf 100644
--- a/src/qt/peertablemodel.cpp
+++ b/src/qt/peertablemodel.cpp
@@ -75,8 +75,14 @@ public:
}
// Try to retrieve the CNodeStateStats for each node.
- BOOST_FOREACH(CNodeCombinedStats &stats, cachedNodeStats)
- stats.fNodeStateStatsAvailable = GetNodeStateStats(stats.nodeStats.nodeid, stats.nodeStateStats);
+ {
+ TRY_LOCK(cs_main, lockMain);
+ if (lockMain)
+ {
+ BOOST_FOREACH(CNodeCombinedStats &stats, cachedNodeStats)
+ stats.fNodeStateStatsAvailable = GetNodeStateStats(stats.nodeStats.nodeid, stats.nodeStateStats);
+ }
+ }
if (sortColumn >= 0)
// sort cacheNodeStats (use stable sort to prevent rows jumping around unneceesarily)
diff --git a/src/qt/res/icons/toolbar.png b/src/qt/res/icons/toolbar.png
deleted file mode 100644
index c82d96519c..0000000000
--- a/src/qt/res/icons/toolbar.png
+++ /dev/null
Binary files differ
diff --git a/src/qt/res/icons/toolbar_testnet.png b/src/qt/res/icons/toolbar_testnet.png
deleted file mode 100644
index 5995bc0667..0000000000
--- a/src/qt/res/icons/toolbar_testnet.png
+++ /dev/null
Binary files differ
diff --git a/src/rpcserver.cpp b/src/rpcserver.cpp
index e7ed73310c..56064941f6 100644
--- a/src/rpcserver.cpp
+++ b/src/rpcserver.cpp
@@ -135,11 +135,18 @@ vector<unsigned char> ParseHexO(const Object& o, string strKey)
string CRPCTable::help(string strCommand) const
{
string strRet;
+ string category;
set<rpcfn_type> setDone;
+ vector<pair<string, const CRPCCommand*> > vCommands;
+
for (map<string, const CRPCCommand*>::const_iterator mi = mapCommands.begin(); mi != mapCommands.end(); ++mi)
+ vCommands.push_back(make_pair(mi->second->category + mi->first, mi->second));
+ sort(vCommands.begin(), vCommands.end());
+
+ BOOST_FOREACH(const PAIRTYPE(string, const CRPCCommand*)& command, vCommands)
{
- const CRPCCommand *pcmd = mi->second;
- string strMethod = mi->first;
+ const CRPCCommand *pcmd = command.second;
+ string strMethod = pcmd->name;
// We already filter duplicates, but these deprecated screw up the sort order
if (strMethod.find("label") != string::npos)
continue;
@@ -162,8 +169,20 @@ string CRPCTable::help(string strCommand) const
// Help text is returned in an exception
string strHelp = string(e.what());
if (strCommand == "")
+ {
if (strHelp.find('\n') != string::npos)
strHelp = strHelp.substr(0, strHelp.find('\n'));
+
+ if (category != pcmd->category)
+ {
+ if (!category.empty())
+ strRet += "\n";
+ category = pcmd->category;
+ string firstLetter = category.substr(0,1);
+ boost::to_upper(firstLetter);
+ strRet += "== " + firstLetter + category.substr(1) + " ==\n";
+ }
+ }
strRet += strHelp + "\n";
}
}
@@ -213,103 +232,105 @@ Value stop(const Array& params, bool fHelp)
static const CRPCCommand vRPCCommands[] =
-{ // name actor (function) okSafeMode threadSafe reqWallet
- // ------------------------ ----------------------- ---------- ---------- ---------
+{ // category name actor (function) okSafeMode threadSafe reqWallet
+ // --------------------- ------------------------ ----------------------- ---------- ---------- ---------
/* Overall control/query calls */
- { "getinfo", &getinfo, true, false, false }, /* uses wallet if enabled */
- { "help", &help, true, true, false },
- { "stop", &stop, true, true, false },
+ { "control", "getinfo", &getinfo, true, false, false }, /* uses wallet if enabled */
+ { "control", "help", &help, true, true, false },
+ { "control", "stop", &stop, true, true, false },
/* P2P networking */
- { "getnetworkinfo", &getnetworkinfo, true, false, false },
- { "addnode", &addnode, true, true, false },
- { "getaddednodeinfo", &getaddednodeinfo, true, true, false },
- { "getconnectioncount", &getconnectioncount, true, false, false },
- { "getnettotals", &getnettotals, true, true, false },
- { "getpeerinfo", &getpeerinfo, true, false, false },
- { "ping", &ping, true, false, false },
+ { "network", "getnetworkinfo", &getnetworkinfo, true, false, false },
+ { "network", "addnode", &addnode, true, true, false },
+ { "network", "getaddednodeinfo", &getaddednodeinfo, true, true, false },
+ { "network", "getconnectioncount", &getconnectioncount, true, false, false },
+ { "network", "getnettotals", &getnettotals, true, true, false },
+ { "network", "getpeerinfo", &getpeerinfo, true, false, false },
+ { "network", "ping", &ping, true, false, false },
/* Block chain and UTXO */
- { "getblockchaininfo", &getblockchaininfo, true, false, false },
- { "getbestblockhash", &getbestblockhash, true, false, false },
- { "getblockcount", &getblockcount, true, false, false },
- { "getblock", &getblock, true, false, false },
- { "getblockhash", &getblockhash, true, false, false },
- { "getchaintips", &getchaintips, true, false, false },
- { "getdifficulty", &getdifficulty, true, false, false },
- { "getrawmempool", &getrawmempool, true, false, false },
- { "gettxout", &gettxout, true, false, false },
- { "gettxoutsetinfo", &gettxoutsetinfo, true, false, false },
- { "verifychain", &verifychain, true, false, false },
+ { "blockchain", "getblockchaininfo", &getblockchaininfo, true, false, false },
+ { "blockchain", "getbestblockhash", &getbestblockhash, true, false, false },
+ { "blockchain", "getblockcount", &getblockcount, true, false, false },
+ { "blockchain", "getblock", &getblock, true, false, false },
+ { "blockchain", "getblockhash", &getblockhash, true, false, false },
+ { "blockchain", "getchaintips", &getchaintips, true, false, false },
+ { "blockchain", "getdifficulty", &getdifficulty, true, false, false },
+ { "blockchain", "getrawmempool", &getrawmempool, true, false, false },
+ { "blockchain", "gettxout", &gettxout, true, false, false },
+ { "blockchain", "gettxoutsetinfo", &gettxoutsetinfo, true, false, false },
+ { "blockchain", "verifychain", &verifychain, true, false, false },
/* Mining */
- { "getblocktemplate", &getblocktemplate, true, false, false },
- { "getmininginfo", &getmininginfo, true, false, false },
- { "getnetworkhashps", &getnetworkhashps, true, false, false },
- { "prioritisetransaction", &prioritisetransaction, true, false, false },
- { "submitblock", &submitblock, true, true, false },
+ { "mining", "getblocktemplate", &getblocktemplate, true, false, false },
+ { "mining", "getmininginfo", &getmininginfo, true, false, false },
+ { "mining", "getnetworkhashps", &getnetworkhashps, true, false, false },
+ { "mining", "prioritisetransaction", &prioritisetransaction, true, false, false },
+ { "mining", "submitblock", &submitblock, true, true, false },
+
+#ifdef ENABLE_WALLET
+ /* Coin generation */
+ { "generating", "getgenerate", &getgenerate, true, false, false },
+ { "generating", "gethashespersec", &gethashespersec, true, false, false },
+ { "generating", "setgenerate", &setgenerate, true, true, false },
+#endif
/* Raw transactions */
- { "createrawtransaction", &createrawtransaction, true, false, false },
- { "decoderawtransaction", &decoderawtransaction, true, false, false },
- { "decodescript", &decodescript, true, false, false },
- { "getrawtransaction", &getrawtransaction, true, false, false },
- { "sendrawtransaction", &sendrawtransaction, false, false, false },
- { "signrawtransaction", &signrawtransaction, false, false, false }, /* uses wallet if enabled */
+ { "rawtransactions", "createrawtransaction", &createrawtransaction, true, false, false },
+ { "rawtransactions", "decoderawtransaction", &decoderawtransaction, true, false, false },
+ { "rawtransactions", "decodescript", &decodescript, true, false, false },
+ { "rawtransactions", "getrawtransaction", &getrawtransaction, true, false, false },
+ { "rawtransactions", "sendrawtransaction", &sendrawtransaction, false, false, false },
+ { "rawtransactions", "signrawtransaction", &signrawtransaction, false, false, false }, /* uses wallet if enabled */
/* Utility functions */
- { "createmultisig", &createmultisig, true, true , false },
- { "validateaddress", &validateaddress, true, false, false }, /* uses wallet if enabled */
- { "verifymessage", &verifymessage, true, false, false },
- { "estimatefee", &estimatefee, true, true, false },
- { "estimatepriority", &estimatepriority, true, true, false },
+ { "util", "createmultisig", &createmultisig, true, true , false },
+ { "util", "validateaddress", &validateaddress, true, false, false }, /* uses wallet if enabled */
+ { "util", "verifymessage", &verifymessage, true, false, false },
+ { "util", "estimatefee", &estimatefee, true, true, false },
+ { "util", "estimatepriority", &estimatepriority, true, true, false },
#ifdef ENABLE_WALLET
/* Wallet */
- { "addmultisigaddress", &addmultisigaddress, true, false, true },
- { "backupwallet", &backupwallet, true, false, true },
- { "dumpprivkey", &dumpprivkey, true, false, true },
- { "dumpwallet", &dumpwallet, true, false, true },
- { "encryptwallet", &encryptwallet, true, false, true },
- { "getaccountaddress", &getaccountaddress, true, false, true },
- { "getaccount", &getaccount, true, false, true },
- { "getaddressesbyaccount", &getaddressesbyaccount, true, false, true },
- { "getbalance", &getbalance, false, false, true },
- { "getnewaddress", &getnewaddress, true, false, true },
- { "getrawchangeaddress", &getrawchangeaddress, true, false, true },
- { "getreceivedbyaccount", &getreceivedbyaccount, false, false, true },
- { "getreceivedbyaddress", &getreceivedbyaddress, false, false, true },
- { "gettransaction", &gettransaction, false, false, true },
- { "getunconfirmedbalance", &getunconfirmedbalance, false, false, true },
- { "getwalletinfo", &getwalletinfo, false, false, true },
- { "importprivkey", &importprivkey, true, false, true },
- { "importwallet", &importwallet, true, false, true },
- { "importaddress", &importaddress, true, false, true },
- { "keypoolrefill", &keypoolrefill, true, false, true },
- { "listaccounts", &listaccounts, false, false, true },
- { "listaddressgroupings", &listaddressgroupings, false, false, true },
- { "listlockunspent", &listlockunspent, false, false, true },
- { "listreceivedbyaccount", &listreceivedbyaccount, false, false, true },
- { "listreceivedbyaddress", &listreceivedbyaddress, false, false, true },
- { "listsinceblock", &listsinceblock, false, false, true },
- { "listtransactions", &listtransactions, false, false, true },
- { "listunspent", &listunspent, false, false, true },
- { "lockunspent", &lockunspent, true, false, true },
- { "move", &movecmd, false, false, true },
- { "sendfrom", &sendfrom, false, false, true },
- { "sendmany", &sendmany, false, false, true },
- { "sendtoaddress", &sendtoaddress, false, false, true },
- { "setaccount", &setaccount, true, false, true },
- { "settxfee", &settxfee, true, false, true },
- { "signmessage", &signmessage, true, false, true },
- { "walletlock", &walletlock, true, false, true },
- { "walletpassphrasechange", &walletpassphrasechange, true, false, true },
- { "walletpassphrase", &walletpassphrase, true, false, true },
-
- /* Wallet-enabled mining */
- { "getgenerate", &getgenerate, true, false, false },
- { "gethashespersec", &gethashespersec, true, false, false },
- { "setgenerate", &setgenerate, true, true, false },
+ { "wallet", "addmultisigaddress", &addmultisigaddress, true, false, true },
+ { "wallet", "backupwallet", &backupwallet, true, false, true },
+ { "wallet", "dumpprivkey", &dumpprivkey, true, false, true },
+ { "wallet", "dumpwallet", &dumpwallet, true, false, true },
+ { "wallet", "encryptwallet", &encryptwallet, true, false, true },
+ { "wallet", "getaccountaddress", &getaccountaddress, true, false, true },
+ { "wallet", "getaccount", &getaccount, true, false, true },
+ { "wallet", "getaddressesbyaccount", &getaddressesbyaccount, true, false, true },
+ { "wallet", "getbalance", &getbalance, false, false, true },
+ { "wallet", "getnewaddress", &getnewaddress, true, false, true },
+ { "wallet", "getrawchangeaddress", &getrawchangeaddress, true, false, true },
+ { "wallet", "getreceivedbyaccount", &getreceivedbyaccount, false, false, true },
+ { "wallet", "getreceivedbyaddress", &getreceivedbyaddress, false, false, true },
+ { "wallet", "gettransaction", &gettransaction, false, false, true },
+ { "wallet", "getunconfirmedbalance", &getunconfirmedbalance, false, false, true },
+ { "wallet", "getwalletinfo", &getwalletinfo, false, false, true },
+ { "wallet", "importprivkey", &importprivkey, true, false, true },
+ { "wallet", "importwallet", &importwallet, true, false, true },
+ { "wallet", "importaddress", &importaddress, true, false, true },
+ { "wallet", "keypoolrefill", &keypoolrefill, true, false, true },
+ { "wallet", "listaccounts", &listaccounts, false, false, true },
+ { "wallet", "listaddressgroupings", &listaddressgroupings, false, false, true },
+ { "wallet", "listlockunspent", &listlockunspent, false, false, true },
+ { "wallet", "listreceivedbyaccount", &listreceivedbyaccount, false, false, true },
+ { "wallet", "listreceivedbyaddress", &listreceivedbyaddress, false, false, true },
+ { "wallet", "listsinceblock", &listsinceblock, false, false, true },
+ { "wallet", "listtransactions", &listtransactions, false, false, true },
+ { "wallet", "listunspent", &listunspent, false, false, true },
+ { "wallet", "lockunspent", &lockunspent, true, false, true },
+ { "wallet", "move", &movecmd, false, false, true },
+ { "wallet", "sendfrom", &sendfrom, false, false, true },
+ { "wallet", "sendmany", &sendmany, false, false, true },
+ { "wallet", "sendtoaddress", &sendtoaddress, false, false, true },
+ { "wallet", "setaccount", &setaccount, true, false, true },
+ { "wallet", "settxfee", &settxfee, true, false, true },
+ { "wallet", "signmessage", &signmessage, true, false, true },
+ { "wallet", "walletlock", &walletlock, true, false, true },
+ { "wallet", "walletpassphrasechange", &walletpassphrasechange, true, false, true },
+ { "wallet", "walletpassphrase", &walletpassphrase, true, false, true },
#endif // ENABLE_WALLET
};
diff --git a/src/rpcserver.h b/src/rpcserver.h
index 176852ca8f..2248e8aeb2 100644
--- a/src/rpcserver.h
+++ b/src/rpcserver.h
@@ -71,6 +71,7 @@ typedef json_spirit::Value(*rpcfn_type)(const json_spirit::Array& params, bool f
class CRPCCommand
{
public:
+ std::string category;
std::string name;
rpcfn_type actor;
bool okSafeMode;
diff --git a/src/rpcwallet.cpp b/src/rpcwallet.cpp
index 667ca33ce1..215da2ea12 100644
--- a/src/rpcwallet.cpp
+++ b/src/rpcwallet.cpp
@@ -1518,7 +1518,7 @@ Value gettransaction(const Array& params, bool fHelp)
" \"hex\" : \"data\" (string) Raw data for transaction\n"
"}\n"
- "\nbExamples\n"
+ "\nExamples:\n"
+ HelpExampleCli("gettransaction", "\"1075db55d416d3ca199f55b6084e2115b9345e16c5cf302fc80e9d5fbf5d48d\"")
+ HelpExampleRpc("gettransaction", "\"1075db55d416d3ca199f55b6084e2115b9345e16c5cf302fc80e9d5fbf5d48d\"")
);
diff --git a/src/script.cpp b/src/script.cpp
index 39ae001db8..942e8810db 100644
--- a/src/script.cpp
+++ b/src/script.cpp
@@ -1444,18 +1444,6 @@ unsigned int HaveKeys(const vector<valtype>& pubkeys, const CKeyStore& keystore)
return nResult;
}
-
-class CKeyStoreIsMineVisitor : public boost::static_visitor<bool>
-{
-private:
- const CKeyStore *keystore;
-public:
- CKeyStoreIsMineVisitor(const CKeyStore *keystoreIn) : keystore(keystoreIn) { }
- bool operator()(const CNoDestination &dest) const { return false; }
- bool operator()(const CKeyID &keyID) const { return keystore->HaveKey(keyID); }
- bool operator()(const CScriptID &scriptID) const { return keystore->HaveCScript(scriptID); }
-};
-
isminetype IsMine(const CKeyStore &keystore, const CTxDestination& dest)
{
CScript script;
diff --git a/src/util.cpp b/src/util.cpp
index d3fa5182f3..ae2145a3a0 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -3,6 +3,10 @@
// Distributed under the MIT/X11 software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
+#if defined(HAVE_CONFIG_H)
+#include "config/bitcoin-config.h"
+#endif
+
#include "util.h"
#include "chainparamsbase.h"
@@ -17,16 +21,15 @@
#ifndef WIN32
// for posix_fallocate
-#ifdef __linux_
+#ifdef __linux__
#ifdef _POSIX_C_SOURCE
#undef _POSIX_C_SOURCE
#endif
#define _POSIX_C_SOURCE 200112L
-#include <sys/prctl.h>
-#endif
+#endif // __linux__
#include <algorithm>
#include <fcntl.h>
@@ -61,6 +64,10 @@
#include <shlobj.h>
#endif
+#ifdef HAVE_SYS_PRCTL_H
+#include <sys/prctl.h>
+#endif
+
#include <boost/algorithm/string/case_conv.hpp> // for to_lower()
#include <boost/algorithm/string/join.hpp>
#include <boost/algorithm/string/predicate.hpp> // for startswith() and endswith()