mirror of
https://github.com/dashpay/dash.git
synced 2024-12-25 12:02:48 +01:00
Merge pull request #4327 from pravblockc/backports-v0.18-pr8
Backports v0.18-PR's 15109, 15078, 14297 and 14298
This commit is contained in:
commit
1f9cb0a3d1
@ -29,33 +29,31 @@
|
||||
*/
|
||||
class CAddrInfo : public CAddress
|
||||
{
|
||||
|
||||
|
||||
public:
|
||||
//! last try whatsoever by us (memory only)
|
||||
int64_t nLastTry;
|
||||
int64_t nLastTry{0};
|
||||
|
||||
//! last counted attempt (memory only)
|
||||
int64_t nLastCountAttempt;
|
||||
int64_t nLastCountAttempt{0};
|
||||
|
||||
private:
|
||||
//! where knowledge about this address first came from
|
||||
CNetAddr source;
|
||||
|
||||
//! last successful connection by us
|
||||
int64_t nLastSuccess;
|
||||
int64_t nLastSuccess{0};
|
||||
|
||||
//! connection attempts since last successful attempt
|
||||
int nAttempts;
|
||||
int nAttempts{0};
|
||||
|
||||
//! reference count in new sets (memory only)
|
||||
int nRefCount;
|
||||
int nRefCount{0};
|
||||
|
||||
//! in tried set? (memory only)
|
||||
bool fInTried;
|
||||
bool fInTried{false};
|
||||
|
||||
//! position in vRandom
|
||||
int nRandomPos;
|
||||
int nRandomPos{-1};
|
||||
|
||||
friend class CAddrMan;
|
||||
|
||||
@ -67,25 +65,12 @@ public:
|
||||
READWRITE(obj.source, obj.nLastSuccess, obj.nAttempts);
|
||||
}
|
||||
|
||||
void Init()
|
||||
{
|
||||
nLastSuccess = 0;
|
||||
nLastTry = 0;
|
||||
nLastCountAttempt = 0;
|
||||
nAttempts = 0;
|
||||
nRefCount = 0;
|
||||
fInTried = false;
|
||||
nRandomPos = -1;
|
||||
}
|
||||
|
||||
CAddrInfo(const CAddress &addrIn, const CNetAddr &addrSource) : CAddress(addrIn), source(addrSource)
|
||||
{
|
||||
Init();
|
||||
}
|
||||
|
||||
CAddrInfo() : CAddress(), source()
|
||||
{
|
||||
Init();
|
||||
}
|
||||
|
||||
//! Calculate in which "tried" bucket this entry belongs
|
||||
@ -108,7 +93,6 @@ public:
|
||||
|
||||
//! Calculate the relative chance this entry should be given when selecting nodes to connect to
|
||||
double GetChance(int64_t nNow = GetAdjustedTime()) const;
|
||||
|
||||
};
|
||||
|
||||
/** Stochastic address manager
|
||||
|
@ -129,7 +129,6 @@ public:
|
||||
|
||||
struct HTTPPathHandler
|
||||
{
|
||||
HTTPPathHandler() {}
|
||||
HTTPPathHandler(std::string _prefix, bool _exactMatch, HTTPRequestHandler _handler):
|
||||
prefix(_prefix), exactMatch(_exactMatch), handler(_handler)
|
||||
{
|
||||
|
12
src/net.cpp
12
src/net.cpp
@ -1,5 +1,5 @@
|
||||
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
||||
// Copyright (c) 2009-2015 The Bitcoin Core developers
|
||||
// Copyright (c) 2009-2019 The Bitcoin Core developers
|
||||
// Copyright (c) 2014-2021 The Dash Core developers
|
||||
// Distributed under the MIT software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
@ -112,7 +112,7 @@ static const uint64_t SELECT_TIMEOUT_MILLISECONDS = 50;
|
||||
static const uint64_t SELECT_TIMEOUT_MILLISECONDS = 500;
|
||||
#endif
|
||||
|
||||
const static std::string NET_MESSAGE_COMMAND_OTHER = "*other*";
|
||||
const std::string NET_MESSAGE_COMMAND_OTHER = "*other*";
|
||||
|
||||
constexpr const CConnman::CFullyConnectedOnly CConnman::FullyConnectedOnly;
|
||||
constexpr const CConnman::CAllNodes CConnman::AllNodes;
|
||||
@ -681,7 +681,6 @@ bool CNode::ReceiveMsgBytes(const char *pch, unsigned int nBytes, bool& complete
|
||||
nBytes -= handled;
|
||||
|
||||
if (msg.complete()) {
|
||||
|
||||
//store received bytes per message command
|
||||
//to prevent a memory DOS, only allow valid commands
|
||||
mapMsgCmdSize::iterator i = mapRecvBytesPerMsgCmd.find(msg.hdr.pchCommand);
|
||||
@ -2890,13 +2889,6 @@ CConnman::CConnman(uint64_t nSeed0In, uint64_t nSeed1In) :
|
||||
addrman(Params().AllowMultiplePorts()),
|
||||
nSeed0(nSeed0In), nSeed1(nSeed1In)
|
||||
{
|
||||
fNetworkActive = true;
|
||||
fAddressesInitialized = false;
|
||||
nLastNodeId = 0;
|
||||
nPrevNodeCount = 0;
|
||||
nSendBufferMaxSize = 0;
|
||||
nReceiveFloodSize = 0;
|
||||
flagInterruptMsgProc = false;
|
||||
SetTryNewOutboundPeer(false);
|
||||
|
||||
Options connOptions;
|
||||
|
19
src/net.h
19
src/net.h
@ -1,5 +1,5 @@
|
||||
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
||||
// Copyright (c) 2009-2015 The Bitcoin Core developers
|
||||
// Copyright (c) 2009-2019 The Bitcoin Core developers
|
||||
// Distributed under the MIT software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
@ -561,12 +561,12 @@ private:
|
||||
// whitelisted (as well as those connecting to whitelisted binds).
|
||||
std::vector<NetWhitelistPermissions> vWhitelistedRange;
|
||||
|
||||
unsigned int nSendBufferMaxSize;
|
||||
unsigned int nReceiveFloodSize;
|
||||
unsigned int nSendBufferMaxSize{0};
|
||||
unsigned int nReceiveFloodSize{0};
|
||||
|
||||
std::vector<ListenSocket> vhListenSocket;
|
||||
std::atomic<bool> fNetworkActive;
|
||||
bool fAddressesInitialized;
|
||||
std::atomic<bool> fNetworkActive{true};
|
||||
bool fAddressesInitialized{false};
|
||||
CAddrMan addrman;
|
||||
std::deque<std::string> vOneShots GUARDED_BY(cs_vOneShots);
|
||||
CCriticalSection cs_vOneShots;
|
||||
@ -581,8 +581,8 @@ private:
|
||||
std::list<CNode*> vNodesDisconnected;
|
||||
std::unordered_map<SOCKET, CNode*> mapSocketToNode;
|
||||
mutable CCriticalSection cs_vNodes;
|
||||
std::atomic<NodeId> nLastNodeId;
|
||||
unsigned int nPrevNodeCount;
|
||||
std::atomic<NodeId> nLastNodeId{0};
|
||||
unsigned int nPrevNodeCount{0};
|
||||
|
||||
/** Services this instance offers */
|
||||
ServiceFlags nLocalServices;
|
||||
@ -607,7 +607,7 @@ private:
|
||||
|
||||
std::condition_variable condMsgProc;
|
||||
Mutex mutexMsgProc;
|
||||
std::atomic<bool> flagInterruptMsgProc;
|
||||
std::atomic<bool> flagInterruptMsgProc{false};
|
||||
|
||||
CThreadInterrupt interruptNet;
|
||||
|
||||
@ -737,6 +737,8 @@ struct LocalServiceInfo {
|
||||
|
||||
extern CCriticalSection cs_mapLocalHost;
|
||||
extern std::map<CNetAddr, LocalServiceInfo> mapLocalHost GUARDED_BY(cs_mapLocalHost);
|
||||
|
||||
extern const std::string NET_MESSAGE_COMMAND_OTHER;
|
||||
typedef std::map<std::string, uint64_t> mapMsgCmdSize; //command, total bytes
|
||||
|
||||
class CNodeStats
|
||||
@ -920,7 +922,6 @@ public:
|
||||
std::atomic_bool fCanSendData;
|
||||
|
||||
protected:
|
||||
|
||||
mapMsgCmdSize mapSendBytesPerMsgCmd;
|
||||
mapMsgCmdSize mapRecvBytesPerMsgCmd GUARDED_BY(cs_vRecv);
|
||||
|
||||
|
@ -432,7 +432,6 @@ public:
|
||||
private:
|
||||
const char* GetCommandInternal() const;
|
||||
|
||||
// TODO: make private (improves encapsulation)
|
||||
public:
|
||||
int type;
|
||||
uint256 hash;
|
||||
|
@ -42,8 +42,8 @@ class BanTablePriv
|
||||
public:
|
||||
/** Local cache of peer information */
|
||||
QList<CCombinedBan> cachedBanlist;
|
||||
/** Column to sort nodes by */
|
||||
int sortColumn;
|
||||
/** Column to sort nodes by (default to unsorted) */
|
||||
int sortColumn{-1};
|
||||
/** Order (ascending or descending) to sort nodes by */
|
||||
Qt::SortOrder sortOrder;
|
||||
|
||||
@ -89,8 +89,6 @@ BanTableModel::BanTableModel(interfaces::Node& node, ClientModel *parent) :
|
||||
{
|
||||
columns << tr("IP/Netmask") << tr("Banned Until");
|
||||
priv.reset(new BanTablePriv());
|
||||
// default to unsorted
|
||||
priv->sortColumn = -1;
|
||||
|
||||
// load initial data
|
||||
refresh();
|
||||
|
@ -51,8 +51,8 @@ class PeerTablePriv
|
||||
public:
|
||||
/** Local cache of peer information */
|
||||
QList<CNodeCombinedStats> cachedNodeStats;
|
||||
/** Column to sort nodes by */
|
||||
int sortColumn;
|
||||
/** Column to sort nodes by (default to unsorted) */
|
||||
int sortColumn{-1};
|
||||
/** Order (ascending or descending) to sort nodes by */
|
||||
Qt::SortOrder sortOrder;
|
||||
/** Index of rows by node ID */
|
||||
@ -111,8 +111,6 @@ PeerTableModel::PeerTableModel(interfaces::Node& node, ClientModel *parent) :
|
||||
{
|
||||
columns << tr("NodeId") << tr("Node/Service") << tr("Ping") << tr("Sent") << tr("Received") << tr("User Agent");
|
||||
priv.reset(new PeerTablePriv());
|
||||
// default to unsorted
|
||||
priv->sortColumn = -1;
|
||||
|
||||
// set up timer for auto refresh
|
||||
timer = new QTimer(this);
|
||||
|
@ -17,8 +17,6 @@
|
||||
RecentRequestsTableModel::RecentRequestsTableModel(WalletModel *parent) :
|
||||
QAbstractTableModel(parent), walletModel(parent)
|
||||
{
|
||||
nReceiveRequestsMaxId = 0;
|
||||
|
||||
// Load entries from wallet
|
||||
std::vector<std::string> vReceiveRequests;
|
||||
parent->loadReceiveRequests(vReceiveRequests);
|
||||
|
@ -86,7 +86,7 @@ private:
|
||||
WalletModel *walletModel;
|
||||
QStringList columns;
|
||||
QList<RecentRequestEntry> list;
|
||||
int64_t nReceiveRequestsMaxId;
|
||||
int64_t nReceiveRequestsMaxId{0};
|
||||
|
||||
/** Updates the column title to "Amount (DisplayUnit)" and emits headerDataChanged() signal for table headers to react. */
|
||||
void updateAmountColumnTitle();
|
||||
|
@ -39,8 +39,6 @@ WalletModel::WalletModel(std::unique_ptr<interfaces::Wallet> wallet, interfaces:
|
||||
cachedCoinJoinRounds(0)
|
||||
{
|
||||
fHaveWatchOnly = m_wallet->haveWatchOnly();
|
||||
fForceCheckBalanceChanged = false;
|
||||
|
||||
addressTableModel = new AddressTableModel(this);
|
||||
transactionTableModel = new TransactionTableModel(this);
|
||||
recentRequestsTableModel = new RecentRequestsTableModel(this);
|
||||
|
@ -226,7 +226,7 @@ private:
|
||||
interfaces::Node& m_node;
|
||||
|
||||
bool fHaveWatchOnly;
|
||||
bool fForceCheckBalanceChanged;
|
||||
bool fForceCheckBalanceChanged{false};
|
||||
|
||||
// Wallet has an options model for wallet-specific options
|
||||
// (transaction fee, for example)
|
||||
|
31
src/rest.cpp
31
src/rest.cpp
@ -144,13 +144,13 @@ static bool rest_headers(HTTPRequest* req,
|
||||
}
|
||||
}
|
||||
|
||||
CDataStream ssHeader(SER_NETWORK, PROTOCOL_VERSION);
|
||||
for (const CBlockIndex *pindex : headers) {
|
||||
ssHeader << pindex->GetBlockHeader();
|
||||
}
|
||||
|
||||
switch (rf) {
|
||||
case RetFormat::BINARY: {
|
||||
CDataStream ssHeader(SER_NETWORK, PROTOCOL_VERSION);
|
||||
for (const CBlockIndex *pindex : headers) {
|
||||
ssHeader << pindex->GetBlockHeader();
|
||||
}
|
||||
|
||||
std::string binaryHeader = ssHeader.str();
|
||||
req->WriteHeader("Content-Type", "application/octet-stream");
|
||||
req->WriteReply(HTTP_OK, binaryHeader);
|
||||
@ -158,6 +158,11 @@ static bool rest_headers(HTTPRequest* req,
|
||||
}
|
||||
|
||||
case RetFormat::HEX: {
|
||||
CDataStream ssHeader(SER_NETWORK, PROTOCOL_VERSION);
|
||||
for (const CBlockIndex *pindex : headers) {
|
||||
ssHeader << pindex->GetBlockHeader();
|
||||
}
|
||||
|
||||
std::string strHex = HexStr(ssHeader) + "\n";
|
||||
req->WriteHeader("Content-Type", "text/plain");
|
||||
req->WriteReply(HTTP_OK, strHex);
|
||||
@ -211,11 +216,10 @@ static bool rest_block(HTTPRequest* req,
|
||||
return RESTERR(req, HTTP_NOT_FOUND, hashStr + " not found");
|
||||
}
|
||||
|
||||
CDataStream ssBlock(SER_NETWORK, PROTOCOL_VERSION);
|
||||
ssBlock << block;
|
||||
|
||||
switch (rf) {
|
||||
case RetFormat::BINARY: {
|
||||
CDataStream ssBlock(SER_NETWORK, PROTOCOL_VERSION);
|
||||
ssBlock << block;
|
||||
std::string binaryBlock = ssBlock.str();
|
||||
req->WriteHeader("Content-Type", "application/octet-stream");
|
||||
req->WriteReply(HTTP_OK, binaryBlock);
|
||||
@ -223,6 +227,8 @@ static bool rest_block(HTTPRequest* req,
|
||||
}
|
||||
|
||||
case RetFormat::HEX: {
|
||||
CDataStream ssBlock(SER_NETWORK, PROTOCOL_VERSION);
|
||||
ssBlock << block;
|
||||
std::string strHex = HexStr(ssBlock) + "\n";
|
||||
req->WriteHeader("Content-Type", "text/plain");
|
||||
req->WriteReply(HTTP_OK, strHex);
|
||||
@ -347,11 +353,11 @@ static bool rest_tx(HTTPRequest* req, const std::string& strURIPart)
|
||||
if (!GetTransaction(hash, tx, Params().GetConsensus(), hashBlock))
|
||||
return RESTERR(req, HTTP_NOT_FOUND, hashStr + " not found");
|
||||
|
||||
CDataStream ssTx(SER_NETWORK, PROTOCOL_VERSION);
|
||||
ssTx << tx;
|
||||
|
||||
switch (rf) {
|
||||
case RetFormat::BINARY: {
|
||||
CDataStream ssTx(SER_NETWORK, PROTOCOL_VERSION);
|
||||
ssTx << tx;
|
||||
|
||||
std::string binaryTx = ssTx.str();
|
||||
req->WriteHeader("Content-Type", "application/octet-stream");
|
||||
req->WriteReply(HTTP_OK, binaryTx);
|
||||
@ -359,6 +365,9 @@ static bool rest_tx(HTTPRequest* req, const std::string& strURIPart)
|
||||
}
|
||||
|
||||
case RetFormat::HEX: {
|
||||
CDataStream ssTx(SER_NETWORK, PROTOCOL_VERSION);
|
||||
ssTx << tx;
|
||||
|
||||
std::string strHex = HexStr(ssTx) + "\n";
|
||||
req->WriteHeader("Content-Type", "text/plain");
|
||||
req->WriteReply(HTTP_OK, strHex);
|
||||
|
@ -825,12 +825,6 @@ static UniValue submitheader(const JSONRPCRequest& request)
|
||||
throw JSONRPCError(RPC_VERIFY_ERROR, state.GetRejectReason());
|
||||
}
|
||||
|
||||
static UniValue estimatefee(const JSONRPCRequest& request)
|
||||
{
|
||||
throw JSONRPCError(RPC_METHOD_DEPRECATED, "estimatefee was removed in v0.17.\n"
|
||||
"Clients should use estimatesmartfee.");
|
||||
}
|
||||
|
||||
static UniValue estimatesmartfee(const JSONRPCRequest& request)
|
||||
{
|
||||
if (request.fHelp || request.params.size() < 1 || request.params.size() > 2)
|
||||
@ -1008,7 +1002,6 @@ static const CRPCCommand commands[] =
|
||||
{ "hidden", "generatetoaddress", &generatetoaddress, {"nblocks","address","maxtries"} }, // Hidden as it isn't functional, just an error to let people know if miner isn't compiled
|
||||
#endif // ENABLE_MINER
|
||||
|
||||
{ "hidden", "estimatefee", &estimatefee, {} },
|
||||
{ "util", "estimatesmartfee", &estimatesmartfee, {"conf_target", "estimate_mode"} },
|
||||
|
||||
{ "hidden", "estimaterawfee", &estimaterawfee, {"conf_target", "threshold"} },
|
||||
|
@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2009-2015 The Bitcoin Core developers
|
||||
// Copyright (c) 2009-2019 The Bitcoin Core developers
|
||||
// Copyright (c) 2014-2021 The Dash Core developers
|
||||
// Distributed under the MIT software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
@ -114,11 +114,15 @@ static UniValue getpeerinfo(const JSONRPCRequest& request)
|
||||
" ],\n"
|
||||
" \"whitelisted\": true|false, (boolean) Whether the peer is whitelisted\n"
|
||||
" \"bytessent_per_msg\": {\n"
|
||||
" \"addr\": n, (numeric) The total bytes sent aggregated by message type\n"
|
||||
" \"msg\": n, (numeric) The total bytes sent aggregated by message type\n"
|
||||
" When a message type is not listed in this json object, the bytes sent are 0.\n"
|
||||
" Only known message types can appear as keys in the object.\n"
|
||||
" ...\n"
|
||||
" },\n"
|
||||
" \"bytesrecv_per_msg\": {\n"
|
||||
" \"addr\": n, (numeric) The total bytes received aggregated by message type\n"
|
||||
" \"msg\": n, (numeric) The total bytes received aggregated by message type\n"
|
||||
" When a message type is not listed in this json object, the bytes received are 0.\n"
|
||||
" Only known message types can appear as keys in the object and all bytes received of unknown message types are listed under '"+NET_MESSAGE_COMMAND_OTHER+"'.\n"
|
||||
" ...\n"
|
||||
" }\n"
|
||||
" }\n"
|
||||
@ -197,14 +201,14 @@ static UniValue getpeerinfo(const JSONRPCRequest& request)
|
||||
obj.pushKV("permissions", permissions);
|
||||
|
||||
UniValue sendPerMsgCmd(UniValue::VOBJ);
|
||||
for (const mapMsgCmdSize::value_type &i : stats.mapSendBytesPerMsgCmd) {
|
||||
for (const auto& i : stats.mapSendBytesPerMsgCmd) {
|
||||
if (i.second > 0)
|
||||
sendPerMsgCmd.pushKV(i.first, i.second);
|
||||
}
|
||||
obj.pushKV("bytessent_per_msg", sendPerMsgCmd);
|
||||
|
||||
UniValue recvPerMsgCmd(UniValue::VOBJ);
|
||||
for (const mapMsgCmdSize::value_type &i : stats.mapRecvBytesPerMsgCmd) {
|
||||
for (const auto& i : stats.mapRecvBytesPerMsgCmd) {
|
||||
if (i.second > 0)
|
||||
recvPerMsgCmd.pushKV(i.first, i.second);
|
||||
}
|
||||
|
@ -16,14 +16,11 @@ class CAddrManTest : public CAddrMan
|
||||
{
|
||||
private:
|
||||
bool deterministic;
|
||||
uint64_t state;
|
||||
|
||||
public:
|
||||
explicit CAddrManTest(bool makeDeterministic = true,
|
||||
std::vector<bool> asmap = std::vector<bool>())
|
||||
{
|
||||
state = 1;
|
||||
|
||||
if (makeDeterministic) {
|
||||
// Set addrman addr placement to be deterministic.
|
||||
MakeDeterministic();
|
||||
|
@ -1439,15 +1439,12 @@ static UniValue addmultisigaddress(const JSONRPCRequest& request)
|
||||
|
||||
struct tallyitem
|
||||
{
|
||||
CAmount nAmount;
|
||||
int nConf;
|
||||
CAmount nAmount{0};
|
||||
int nConf{std::numeric_limits<int>::max()};
|
||||
std::vector<uint256> txids;
|
||||
bool fIsWatchonly;
|
||||
bool fIsWatchonly{false};
|
||||
tallyitem()
|
||||
{
|
||||
nAmount = 0;
|
||||
nConf = std::numeric_limits<int>::max();
|
||||
fIsWatchonly = false;
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -1341,18 +1341,16 @@ class CReserveKey final : public CReserveScript
|
||||
{
|
||||
protected:
|
||||
CWallet* pwallet;
|
||||
int64_t nIndex;
|
||||
int64_t nIndex{-1};
|
||||
CPubKey vchPubKey;
|
||||
bool fInternal;
|
||||
bool fInternal{false};
|
||||
|
||||
public:
|
||||
explicit CReserveKey(CWallet* pwalletIn)
|
||||
{
|
||||
nIndex = -1;
|
||||
pwallet = pwalletIn;
|
||||
fInternal = false;
|
||||
}
|
||||
|
||||
CReserveKey() = default;
|
||||
CReserveKey(const CReserveKey&) = delete;
|
||||
CReserveKey& operator=(const CReserveKey&) = delete;
|
||||
|
||||
|
@ -250,22 +250,18 @@ void WalletBatch::ListAccountCreditDebit(const std::string& strAccount, std::lis
|
||||
|
||||
class CWalletScanState {
|
||||
public:
|
||||
unsigned int nKeys;
|
||||
unsigned int nCKeys;
|
||||
unsigned int nWatchKeys;
|
||||
unsigned int nHDPubKeys;
|
||||
unsigned int nKeyMeta;
|
||||
unsigned int m_unknown_records;
|
||||
bool fIsEncrypted;
|
||||
bool fAnyUnordered;
|
||||
int nFileVersion;
|
||||
unsigned int nKeys{0};
|
||||
unsigned int nCKeys{0};
|
||||
unsigned int nWatchKeys{0};
|
||||
unsigned int nHDPubKeys{0};
|
||||
unsigned int nKeyMeta{0};
|
||||
unsigned int m_unknown_records{0};
|
||||
bool fIsEncrypted{false};
|
||||
bool fAnyUnordered{false};
|
||||
int nFileVersion{0};
|
||||
std::vector<uint256> vWalletUpgrade;
|
||||
|
||||
CWalletScanState() {
|
||||
nKeys = nCKeys = nWatchKeys = nHDPubKeys = nKeyMeta = m_unknown_records = 0;
|
||||
fIsEncrypted = false;
|
||||
fAnyUnordered = false;
|
||||
nFileVersion = 0;
|
||||
}
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user