Merge pull request #4259 from PastaPastaPasta/backport-triv-pr13

backport: 'trivial' pr14
This commit is contained in:
UdjinM6 2021-07-16 03:38:13 +03:00 committed by GitHub
commit 84769e128a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
29 changed files with 145 additions and 121 deletions

View File

@ -30,7 +30,7 @@
# and this notice are preserved. This file is offered as-is, without any # and this notice are preserved. This file is offered as-is, without any
# warranty. # warranty.
#serial 32 #serial 33
AC_DEFUN([AX_BOOST_THREAD], AC_DEFUN([AX_BOOST_THREAD],
[ [
@ -67,13 +67,24 @@ AC_DEFUN([AX_BOOST_THREAD],
[AC_LANG_PUSH([C++]) [AC_LANG_PUSH([C++])
CXXFLAGS_SAVE=$CXXFLAGS CXXFLAGS_SAVE=$CXXFLAGS
if test "x$host_os" = "xsolaris" ; then case "x$host_os" in
CXXFLAGS="-pthreads $CXXFLAGS" xsolaris )
elif test "x$host_os" = "xmingw32" ; then CXXFLAGS="-pthreads $CXXFLAGS"
CXXFLAGS="-mthreads $CXXFLAGS" break;
else ;;
CXXFLAGS="-pthread $CXXFLAGS" xmingw32 )
fi CXXFLAGS="-mthreads $CXXFLAGS"
break;
;;
*android* )
break;
;;
* )
CXXFLAGS="-pthread $CXXFLAGS"
break;
;;
esac
AC_COMPILE_IFELSE([ AC_COMPILE_IFELSE([
AC_LANG_PROGRAM( AC_LANG_PROGRAM(
[[@%:@include <boost/thread/thread.hpp>]], [[@%:@include <boost/thread/thread.hpp>]],
@ -84,13 +95,23 @@ AC_DEFUN([AX_BOOST_THREAD],
AC_LANG_POP([C++]) AC_LANG_POP([C++])
]) ])
if test "x$ax_cv_boost_thread" = "xyes"; then if test "x$ax_cv_boost_thread" = "xyes"; then
if test "x$host_os" = "xsolaris" ; then case "x$host_os" in
BOOST_CPPFLAGS="-pthreads $BOOST_CPPFLAGS" xsolaris )
elif test "x$host_os" = "xmingw32" ; then BOOST_CPPFLAGS="-pthreads $BOOST_CPPFLAGS"
BOOST_CPPFLAGS="-mthreads $BOOST_CPPFLAGS" break;
else ;;
BOOST_CPPFLAGS="-pthread $BOOST_CPPFLAGS" xmingw32 )
fi BOOST_CPPFLAGS="-mthreads $BOOST_CPPFLAGS"
break;
;;
*android* )
break;
;;
* )
BOOST_CPPFLAGS="-pthread $BOOST_CPPFLAGS"
break;
;;
esac
AC_SUBST(BOOST_CPPFLAGS) AC_SUBST(BOOST_CPPFLAGS)
@ -148,6 +169,9 @@ AC_DEFUN([AX_BOOST_THREAD],
xmingw32 ) xmingw32 )
break; break;
;; ;;
*android* )
break;
;;
* ) * )
BOOST_THREAD_LIB="$BOOST_THREAD_LIB -lpthread" BOOST_THREAD_LIB="$BOOST_THREAD_LIB -lpthread"
break; break;

View File

@ -79,10 +79,19 @@ AC_DEFUN([BITCOIN_QT_INIT],[
AC_ARG_WITH([qtdbus], AC_ARG_WITH([qtdbus],
[AS_HELP_STRING([--with-qtdbus], [AS_HELP_STRING([--with-qtdbus],
[enable DBus support (default is yes if qt is enabled and QtDBus is found)])], [enable DBus support (default is yes if qt is enabled and QtDBus is found, except on Android)])],
[use_dbus=$withval], [use_dbus=$withval],
[use_dbus=auto]) [use_dbus=auto])
dnl Android doesn't support D-Bus and certainly doesn't use it for notifications
case $host in
*android*)
if test "x$use_dbus" != xyes; then
use_dbus=no
fi
;;
esac
AC_SUBST(QT_TRANSLATION_DIR,$qt_translation_path) AC_SUBST(QT_TRANSLATION_DIR,$qt_translation_path)
]) ])

View File

@ -110,9 +110,6 @@ AC_PATH_TOOL(CPPFILT, c++filt)
AC_PATH_TOOL(OBJCOPY, objcopy) AC_PATH_TOOL(OBJCOPY, objcopy)
AC_PATH_TOOL(DSYMUTIL, dsymutil) AC_PATH_TOOL(DSYMUTIL, dsymutil)
AC_PATH_PROG(DOXYGEN, doxygen) AC_PATH_PROG(DOXYGEN, doxygen)
if test -z "$DOXYGEN"; then
AC_MSG_WARN([Doxygen not found])
fi
AM_CONDITIONAL([HAVE_DOXYGEN], [test -n "$DOXYGEN"]) AM_CONDITIONAL([HAVE_DOXYGEN], [test -n "$DOXYGEN"])
AC_ARG_VAR(PYTHONPATH, Augments the default search path for python module files) AC_ARG_VAR(PYTHONPATH, Augments the default search path for python module files)
@ -635,6 +632,7 @@ case $host in
BUILD_OS=darwin BUILD_OS=darwin
;; ;;
*) *)
AC_PATH_TOOL([DSYMUTIL], [dsymutil], dsymutil)
AC_PATH_TOOL([INSTALLNAMETOOL], [install_name_tool], install_name_tool) AC_PATH_TOOL([INSTALLNAMETOOL], [install_name_tool], install_name_tool)
AC_PATH_TOOL([OTOOL], [otool], otool) AC_PATH_TOOL([OTOOL], [otool], otool)
AC_PATH_PROGS([GENISOIMAGE], [genisoimage mkisofs],genisoimage) AC_PATH_PROGS([GENISOIMAGE], [genisoimage mkisofs],genisoimage)

0
contrib/zmq/zmq_sub.py Normal file → Executable file
View File

View File

@ -1,6 +1,6 @@
# Block and Transaction Broadcasting with ZeroMQ # Block and Transaction Broadcasting with ZeroMQ
[ZeroMQ](http://zeromq.org/) is a lightweight wrapper around TCP [ZeroMQ](https://zeromq.org/) is a lightweight wrapper around TCP
connections, inter-process communication, and shared-memory, connections, inter-process communication, and shared-memory,
providing various message-oriented semantics such as publish/subscribe, providing various message-oriented semantics such as publish/subscribe,
request/reply, and push/pull. request/reply, and push/pull.
@ -37,8 +37,9 @@ The ZeroMQ feature in Dash Core requires ZeroMQ API version 4.x or
newer. Typically, it is packaged by distributions as something like newer. Typically, it is packaged by distributions as something like
*libzmq3-dev*. The C++ wrapper for ZeroMQ is *not* needed. *libzmq3-dev*. The C++ wrapper for ZeroMQ is *not* needed.
In order to run the example Python client scripts in contrib/ one must In order to run the example Python client scripts in the `contrib/zmq/`
also install *python3-zmq*, though this is not necessary for daemon directory, one must also install [PyZMQ](https://github.com/zeromq/pyzmq)
(generally with `pip install pyzmq`), though this is not necessary for daemon
operation. operation.
## Enabling ## Enabling

View File

@ -1,9 +1,9 @@
Language: Cpp Language: Cpp
AccessModifierOffset: -4 AccessModifierOffset: -4
AlignAfterOpenBracket: false AlignAfterOpenBracket: true
AlignEscapedNewlinesLeft: true AlignEscapedNewlinesLeft: true
AlignTrailingComments: true AlignTrailingComments: true
AllowAllParametersOfDeclarationOnNextLine: false AllowAllParametersOfDeclarationOnNextLine: true
AllowShortBlocksOnASingleLine: false AllowShortBlocksOnASingleLine: false
AllowShortFunctionsOnASingleLine: All AllowShortFunctionsOnASingleLine: All
AllowShortIfStatementsOnASingleLine: true AllowShortIfStatementsOnASingleLine: true

View File

@ -424,12 +424,6 @@ public:
return vChain[nHeight]; return vChain[nHeight];
} }
/** Compare two chains efficiently. */
friend bool operator==(const CChain &a, const CChain &b) {
return a.vChain.size() == b.vChain.size() &&
a.vChain[a.vChain.size() - 1] == b.vChain[b.vChain.size() - 1];
}
/** Efficiently check whether a block is present in this chain. */ /** Efficiently check whether a block is present in this chain. */
bool Contains(const CBlockIndex *pindex) const { bool Contains(const CBlockIndex *pindex) const {
return (*this)[pindex->nHeight] == pindex; return (*this)[pindex->nHeight] == pindex;

View File

@ -120,8 +120,9 @@ std::string ScriptToAsmStr(const CScript& script, const bool fAttemptSighashDeco
// checks in CheckSignatureEncoding. // checks in CheckSignatureEncoding.
if (CheckSignatureEncoding(vch, SCRIPT_VERIFY_STRICTENC, nullptr)) { if (CheckSignatureEncoding(vch, SCRIPT_VERIFY_STRICTENC, nullptr)) {
const unsigned char chSigHashType = vch.back(); const unsigned char chSigHashType = vch.back();
if (mapSigHashTypes.count(chSigHashType)) { const auto it = mapSigHashTypes.find(chSigHashType);
strSigHashDecode = "[" + mapSigHashTypes.find(chSigHashType)->second + "]"; if (it != mapSigHashTypes.end()) {
strSigHashDecode = "[" + it->second + "]";
vch.pop_back(); // remove the sighash type byte. it will be replaced by the decode. vch.pop_back(); // remove the sighash type byte. it will be replaced by the decode.
} }
} }

View File

@ -345,18 +345,6 @@ public:
// Get an estimate of LevelDB memory usage (in bytes). // Get an estimate of LevelDB memory usage (in bytes).
size_t DynamicMemoryUsage() const; size_t DynamicMemoryUsage() const;
// not available for LevelDB; provide for compatibility with BDB
bool Flush()
{
return true;
}
bool Sync()
{
CDBBatch batch(*this);
return WriteBatch(batch, true);
}
CDBIterator *NewIterator() CDBIterator *NewIterator()
{ {
return new CDBIterator(*this, pdb->NewIterator(iteroptions)); return new CDBIterator(*this, pdb->NewIterator(iteroptions));

View File

@ -118,7 +118,7 @@ std::unique_ptr<CBlockTemplate> BlockAssembler::CreateNewBlock(const CScript& sc
if(!pblocktemplate.get()) if(!pblocktemplate.get())
return nullptr; return nullptr;
pblock = &pblocktemplate->block; // pointer for convenience CBlock* const pblock = &pblocktemplate->block; // pointer for convenience
// Add dummy coinbase tx as first transaction // Add dummy coinbase tx as first transaction
pblock->vtx.emplace_back(); pblock->vtx.emplace_back();
@ -281,7 +281,7 @@ bool BlockAssembler::TestPackageTransactions(const CTxMemPool::setEntries& packa
void BlockAssembler::AddToBlock(CTxMemPool::txiter iter) void BlockAssembler::AddToBlock(CTxMemPool::txiter iter)
{ {
pblock->vtx.emplace_back(iter->GetSharedTx()); pblocktemplate->block.vtx.emplace_back(iter->GetSharedTx());
pblocktemplate->vTxFees.push_back(iter->GetFee()); pblocktemplate->vTxFees.push_back(iter->GetFee());
pblocktemplate->vTxSigOps.push_back(iter->GetSigOpCount()); pblocktemplate->vTxSigOps.push_back(iter->GetSigOpCount());
nBlockSize += iter->GetTxSize(); nBlockSize += iter->GetTxSize();

View File

@ -129,8 +129,6 @@ class BlockAssembler
private: private:
// The constructed block template // The constructed block template
std::unique_ptr<CBlockTemplate> pblocktemplate; std::unique_ptr<CBlockTemplate> pblocktemplate;
// A convenience pointer that always refers to the CBlock in pblocktemplate
CBlock* pblock;
// Configuration parameters for the block size // Configuration parameters for the block size
unsigned int nBlockMaxSize; unsigned int nBlockMaxSize;

View File

@ -1400,7 +1400,6 @@ bool static AlreadyHave(const CInv& inv) EXCLUSIVE_LOCKS_REQUIRED(cs_main)
static void RelayAddress(const CAddress& addr, bool fReachable, CConnman* connman) static void RelayAddress(const CAddress& addr, bool fReachable, CConnman* connman)
{ {
unsigned int nRelayNodes = fReachable ? 2 : 1; // limited relaying of addresses outside our network(s)
// Relay to a limited number of other nodes // Relay to a limited number of other nodes
// Use deterministic randomness to send to the same nodes for 24 hours // Use deterministic randomness to send to the same nodes for 24 hours
@ -1409,6 +1408,9 @@ static void RelayAddress(const CAddress& addr, bool fReachable, CConnman* connma
const CSipHasher hasher = connman->GetDeterministicRandomizer(RANDOMIZER_ID_ADDRESS_RELAY).Write(hashAddr << 32).Write((GetTime() + hashAddr) / (24*60*60)); const CSipHasher hasher = connman->GetDeterministicRandomizer(RANDOMIZER_ID_ADDRESS_RELAY).Write(hashAddr << 32).Write((GetTime() + hashAddr) / (24*60*60));
FastRandomContext insecure_rand; FastRandomContext insecure_rand;
// Relay reachable addresses to 2 peers. Unreachable addresses are relayed randomly to 1 or 2 peers.
unsigned int nRelayNodes = (fReachable || (hasher.Finalize() & 1)) ? 2 : 1;
std::array<std::pair<uint64_t, CNode*>,2> best{{{0, nullptr}, {0, nullptr}}}; std::array<std::pair<uint64_t, CNode*>,2> best{{{0, nullptr}, {0, nullptr}}};
assert(nRelayNodes <= best.size()); assert(nRelayNodes <= best.size());

View File

@ -419,17 +419,6 @@ bool CNetAddr::IsLocal() const
bool CNetAddr::IsValid() const bool CNetAddr::IsValid() const
{ {
// Cleanup 3-byte shifted addresses caused by garbage in size field
// of addr messages from versions before 0.2.9 checksum.
// Two consecutive addr messages look like this:
// header20 vectorlen3 addr26 addr26 addr26 header20 vectorlen3 addr26 addr26 addr26...
// so if the first length field is garbled, it reads the second batch
// of addr misaligned by 3 bytes.
if (IsIPv6() && memcmp(m_addr.data(), IPV4_IN_IPV6_PREFIX.data() + 3,
sizeof(IPV4_IN_IPV6_PREFIX) - 3) == 0) {
return false;
}
// unspecified IPv6 address (::/128) // unspecified IPv6 address (::/128)
unsigned char ipNone6[16] = {}; unsigned char ipNone6[16] = {};
if (IsIPv6() && memcmp(m_addr.data(), ipNone6, sizeof(ipNone6)) == 0) { if (IsIPv6() && memcmp(m_addr.data(), ipNone6, sizeof(ipNone6)) == 0) {

View File

@ -8,10 +8,6 @@
#include <util/system.h> #include <util/system.h>
#include <util/strencodings.h> #include <util/strencodings.h>
#ifndef WIN32
# include <arpa/inet.h>
#endif
static std::atomic<bool> g_initial_block_download_completed(false); static std::atomic<bool> g_initial_block_download_completed(false);
namespace NetMsgType { namespace NetMsgType {

View File

@ -60,19 +60,16 @@ namespace NetMsgType {
/** /**
* The version message provides information about the transmitting node to the * The version message provides information about the transmitting node to the
* receiving node at the beginning of a connection. * receiving node at the beginning of a connection.
* @see https://bitcoin.org/en/developer-reference#version
*/ */
extern const char *VERSION; extern const char *VERSION;
/** /**
* The verack message acknowledges a previously-received version message, * The verack message acknowledges a previously-received version message,
* informing the connecting node that it can begin to send other messages. * informing the connecting node that it can begin to send other messages.
* @see https://bitcoin.org/en/developer-reference#verack
*/ */
extern const char *VERACK; extern const char *VERACK;
/** /**
* The addr (IP address) message relays connection information for peers on the * The addr (IP address) message relays connection information for peers on the
* network. * network.
* @see https://bitcoin.org/en/developer-reference#addr
*/ */
extern const char *ADDR; extern const char *ADDR;
/** /**
@ -90,82 +87,69 @@ extern const char *SENDADDRV2;
/** /**
* The inv message (inventory message) transmits one or more inventories of * The inv message (inventory message) transmits one or more inventories of
* objects known to the transmitting peer. * objects known to the transmitting peer.
* @see https://bitcoin.org/en/developer-reference#inv
*/ */
extern const char *INV; extern const char *INV;
/** /**
* The getdata message requests one or more data objects from another node. * The getdata message requests one or more data objects from another node.
* @see https://bitcoin.org/en/developer-reference#getdata
*/ */
extern const char *GETDATA; extern const char *GETDATA;
/** /**
* The merkleblock message is a reply to a getdata message which requested a * The merkleblock message is a reply to a getdata message which requested a
* block using the inventory type MSG_MERKLEBLOCK. * block using the inventory type MSG_MERKLEBLOCK.
* @since protocol version 70001 as described by BIP37. * @since protocol version 70001 as described by BIP37.
* @see https://bitcoin.org/en/developer-reference#merkleblock
*/ */
extern const char *MERKLEBLOCK; extern const char *MERKLEBLOCK;
/** /**
* The getblocks message requests an inv message that provides block header * The getblocks message requests an inv message that provides block header
* hashes starting from a particular point in the block chain. * hashes starting from a particular point in the block chain.
* @see https://bitcoin.org/en/developer-reference#getblocks
*/ */
extern const char *GETBLOCKS; extern const char *GETBLOCKS;
/** /**
* The getheaders message requests a headers message that provides block * The getheaders message requests a headers message that provides block
* headers starting from a particular point in the block chain. * headers starting from a particular point in the block chain.
* @since protocol version 31800. * @since protocol version 31800.
* @see https://bitcoin.org/en/developer-reference#getheaders
*/ */
extern const char *GETHEADERS; extern const char *GETHEADERS;
/** /**
* The tx message transmits a single transaction. * The tx message transmits a single transaction.
* @see https://bitcoin.org/en/developer-reference#tx
*/ */
extern const char *TX; extern const char *TX;
/** /**
* The headers message sends one or more block headers to a node which * The headers message sends one or more block headers to a node which
* previously requested certain headers with a getheaders message. * previously requested certain headers with a getheaders message.
* @since protocol version 31800. * @since protocol version 31800.
* @see https://bitcoin.org/en/developer-reference#headers
*/ */
extern const char *HEADERS; extern const char *HEADERS;
/** /**
* The block message transmits a single serialized block. * The block message transmits a single serialized block.
* @see https://bitcoin.org/en/developer-reference#block
*/ */
extern const char *BLOCK; extern const char *BLOCK;
/** /**
* The getaddr message requests an addr message from the receiving node, * The getaddr message requests an addr message from the receiving node,
* preferably one with lots of IP addresses of other receiving nodes. * preferably one with lots of IP addresses of other receiving nodes.
* @see https://bitcoin.org/en/developer-reference#getaddr
*/ */
extern const char *GETADDR; extern const char *GETADDR;
/** /**
* The mempool message requests the TXIDs of transactions that the receiving * The mempool message requests the TXIDs of transactions that the receiving
* node has verified as valid but which have not yet appeared in a block. * node has verified as valid but which have not yet appeared in a block.
* @since protocol version 60002. * @since protocol version 60002.
* @see https://bitcoin.org/en/developer-reference#mempool
*/ */
extern const char *MEMPOOL; extern const char *MEMPOOL;
/** /**
* The ping message is sent periodically to help confirm that the receiving * The ping message is sent periodically to help confirm that the receiving
* peer is still connected. * peer is still connected.
* @see https://bitcoin.org/en/developer-reference#ping
*/ */
extern const char *PING; extern const char *PING;
/** /**
* The pong message replies to a ping message, proving to the pinging node that * The pong message replies to a ping message, proving to the pinging node that
* the ponging node is still alive. * the ponging node is still alive.
* @since protocol version 60001 as described by BIP31. * @since protocol version 60001 as described by BIP31.
* @see https://bitcoin.org/en/developer-reference#pong
*/ */
extern const char *PONG; extern const char *PONG;
/** /**
* The notfound message is a reply to a getdata message which requested an * The notfound message is a reply to a getdata message which requested an
* object the receiving node does not have available for relay. * object the receiving node does not have available for relay.
* @since protocol version 70001. * @since protocol version 70001.
* @see https://bitcoin.org/en/developer-reference#notfound
*/ */
extern const char *NOTFOUND; extern const char *NOTFOUND;
/** /**
@ -174,7 +158,6 @@ extern const char *NOTFOUND;
* @since protocol version 70001 as described by BIP37. * @since protocol version 70001 as described by BIP37.
* Only available with service bit NODE_BLOOM since protocol version * Only available with service bit NODE_BLOOM since protocol version
* 70011 as described by BIP111. * 70011 as described by BIP111.
* @see https://bitcoin.org/en/developer-reference#filterload
*/ */
extern const char *FILTERLOAD; extern const char *FILTERLOAD;
/** /**
@ -183,7 +166,6 @@ extern const char *FILTERLOAD;
* @since protocol version 70001 as described by BIP37. * @since protocol version 70001 as described by BIP37.
* Only available with service bit NODE_BLOOM since protocol version * Only available with service bit NODE_BLOOM since protocol version
* 70011 as described by BIP111. * 70011 as described by BIP111.
* @see https://bitcoin.org/en/developer-reference#filteradd
*/ */
extern const char *FILTERADD; extern const char *FILTERADD;
/** /**
@ -192,7 +174,6 @@ extern const char *FILTERADD;
* @since protocol version 70001 as described by BIP37. * @since protocol version 70001 as described by BIP37.
* Only available with service bit NODE_BLOOM since protocol version * Only available with service bit NODE_BLOOM since protocol version
* 70011 as described by BIP111. * 70011 as described by BIP111.
* @see https://bitcoin.org/en/developer-reference#filterclear
*/ */
extern const char *FILTERCLEAR; extern const char *FILTERCLEAR;
/** /**
@ -206,7 +187,6 @@ extern const char *REJECT;
* Indicates that a node prefers to receive new block announcements via a * Indicates that a node prefers to receive new block announcements via a
* "headers" message rather than an "inv". * "headers" message rather than an "inv".
* @since protocol version 70012 as described by BIP130. * @since protocol version 70012 as described by BIP130.
* @see https://bitcoin.org/en/developer-reference#sendheaders
*/ */
extern const char *SENDHEADERS; extern const char *SENDHEADERS;

View File

@ -307,7 +307,7 @@
<item row="11" column="0"> <item row="11" column="0">
<widget class="QLabel" name="label_3"> <widget class="QLabel" name="label_3">
<property name="text"> <property name="text">
<string>Current number of blocks</string> <string>Current block height</string>
</property> </property>
</widget> </widget>
</item> </item>

View File

@ -110,6 +110,12 @@
<property name="text"> <property name="text">
<string>&amp;Request payment</string> <string>&amp;Request payment</string>
</property> </property>
<property name="autoDefault">
<bool>false</bool>
</property>
<property name="default">
<bool>true</bool>
</property>
</widget> </widget>
</item> </item>
<item> <item>

View File

@ -194,22 +194,6 @@ void ReceiveCoinsDialog::resizeEvent(QResizeEvent *event)
columnResizingFixer->stretchColumnWidth(RecentRequestsTableModel::Message); columnResizingFixer->stretchColumnWidth(RecentRequestsTableModel::Message);
} }
void ReceiveCoinsDialog::keyPressEvent(QKeyEvent *event)
{
if (event->key() == Qt::Key_Return)
{
// press return -> submit form
if (ui->reqLabel->hasFocus() || ui->reqAmount->hasFocus() || ui->reqMessage->hasFocus())
{
event->ignore();
on_receiveButton_clicked();
return;
}
}
this->QDialog::keyPressEvent(event);
}
QModelIndex ReceiveCoinsDialog::selectedRow() QModelIndex ReceiveCoinsDialog::selectedRow()
{ {
if(!model || !model->getRecentRequestsTableModel() || !ui->recentRequestsView->selectionModel()) if(!model || !model->getRecentRequestsTableModel() || !ui->recentRequestsView->selectionModel())

View File

@ -48,9 +48,6 @@ public Q_SLOTS:
void reject() override; void reject() override;
void accept() override; void accept() override;
protected:
virtual void keyPressEvent(QKeyEvent *event) override;
private: private:
Ui::ReceiveCoinsDialog *ui; Ui::ReceiveCoinsDialog *ui;
GUIUtil::TableViewLastColumnResizingFixer *columnResizingFixer; GUIUtil::TableViewLastColumnResizingFixer *columnResizingFixer;

View File

@ -482,6 +482,7 @@ RPCConsole::RPCConsole(interfaces::Node& node, QWidget* parent, Qt::WindowFlags
// Install event filter for up and down arrow // Install event filter for up and down arrow
ui->lineEdit->installEventFilter(this); ui->lineEdit->installEventFilter(this);
ui->lineEdit->setMaxLength(16 * 1024 * 1024);
ui->messagesWidget->installEventFilter(this); ui->messagesWidget->installEventFilter(this);
connect(ui->clearButton, SIGNAL(clicked()), this, SLOT(clear())); connect(ui->clearButton, SIGNAL(clicked()), this, SLOT(clear()));

View File

@ -193,17 +193,12 @@ public:
TransactionRecord *index(interfaces::Wallet& wallet, int numBlocks, int idx) TransactionRecord *index(interfaces::Wallet& wallet, int numBlocks, int idx)
{ {
if(idx >= 0 && idx < cachedWallet.size()) if (idx >= 0 && idx < cachedWallet.size()) {
{
TransactionRecord *rec = &cachedWallet[idx]; TransactionRecord *rec = &cachedWallet[idx];
// Get required locks upfront. This avoids the GUI from getting
// stuck if the core is holding the locks for a longer time - for
// example, during a wallet rescan.
//
// If a status update is needed (blocks came in since last check), // If a status update is needed (blocks came in since last check),
// update the status of this transaction from the wallet. Otherwise, // try to update the status of this transaction from the wallet.
// simply re-use the cached status. // Otherwise, simply re-use the cached status.
interfaces::WalletTxStatus wtx; interfaces::WalletTxStatus wtx;
int64_t adjustedTime; int64_t adjustedTime;
if (rec->statusUpdateNeeded(numBlocks, parent->getChainLockHeight()) && wallet.tryGetTxStatus(rec->hash, wtx, adjustedTime)) { if (rec->statusUpdateNeeded(numBlocks, parent->getChainLockHeight()) && wallet.tryGetTxStatus(rec->hash, wtx, adjustedTime)) {

View File

@ -245,6 +245,8 @@ void GetOSRand(unsigned char *ent32)
if (getentropy(ent32, NUM_OS_RANDOM_BYTES) != 0) { if (getentropy(ent32, NUM_OS_RANDOM_BYTES) != 0) {
RandFailure(); RandFailure();
} }
// Silence a compiler warning about unused function.
(void)GetDevURandom;
#elif defined(HAVE_GETENTROPY_RAND) && defined(MAC_OSX) #elif defined(HAVE_GETENTROPY_RAND) && defined(MAC_OSX)
// We need a fallback for OSX < 10.12 // We need a fallback for OSX < 10.12
if (&getentropy != nullptr) { if (&getentropy != nullptr) {
@ -254,6 +256,8 @@ void GetOSRand(unsigned char *ent32)
} else { } else {
GetDevURandom(ent32); GetDevURandom(ent32);
} }
// Silence a compiler warning about unused function.
(void)GetDevURandom;
#elif defined(HAVE_SYSCTL_ARND) #elif defined(HAVE_SYSCTL_ARND)
/* FreeBSD and similar. It is possible for the call to return less /* FreeBSD and similar. It is possible for the call to return less
* bytes than requested, so need to read in a loop. * bytes than requested, so need to read in a loop.
@ -267,6 +271,8 @@ void GetOSRand(unsigned char *ent32)
} }
have += len; have += len;
} while (have < NUM_OS_RANDOM_BYTES); } while (have < NUM_OS_RANDOM_BYTES);
// Silence a compiler warning about unused function.
(void)GetDevURandom;
#else #else
/* Fall back to /dev/urandom if there is no specific method implemented to /* Fall back to /dev/urandom if there is no specific method implemented to
* get system entropy for this OS. * get system entropy for this OS.

View File

@ -18,9 +18,7 @@
#define LOCKABLE __attribute__((lockable)) #define LOCKABLE __attribute__((lockable))
#define SCOPED_LOCKABLE __attribute__((scoped_lockable)) #define SCOPED_LOCKABLE __attribute__((scoped_lockable))
#define GUARDED_BY(x) __attribute__((guarded_by(x))) #define GUARDED_BY(x) __attribute__((guarded_by(x)))
#define GUARDED_VAR __attribute__((guarded_var))
#define PT_GUARDED_BY(x) __attribute__((pt_guarded_by(x))) #define PT_GUARDED_BY(x) __attribute__((pt_guarded_by(x)))
#define PT_GUARDED_VAR __attribute__((pt_guarded_var))
#define ACQUIRED_AFTER(...) __attribute__((acquired_after(__VA_ARGS__))) #define ACQUIRED_AFTER(...) __attribute__((acquired_after(__VA_ARGS__)))
#define ACQUIRED_BEFORE(...) __attribute__((acquired_before(__VA_ARGS__))) #define ACQUIRED_BEFORE(...) __attribute__((acquired_before(__VA_ARGS__)))
#define EXCLUSIVE_LOCK_FUNCTION(...) __attribute__((exclusive_lock_function(__VA_ARGS__))) #define EXCLUSIVE_LOCK_FUNCTION(...) __attribute__((exclusive_lock_function(__VA_ARGS__)))
@ -33,14 +31,12 @@
#define EXCLUSIVE_LOCKS_REQUIRED(...) __attribute__((exclusive_locks_required(__VA_ARGS__))) #define EXCLUSIVE_LOCKS_REQUIRED(...) __attribute__((exclusive_locks_required(__VA_ARGS__)))
#define SHARED_LOCKS_REQUIRED(...) __attribute__((shared_locks_required(__VA_ARGS__))) #define SHARED_LOCKS_REQUIRED(...) __attribute__((shared_locks_required(__VA_ARGS__)))
#define NO_THREAD_SAFETY_ANALYSIS __attribute__((no_thread_safety_analysis)) #define NO_THREAD_SAFETY_ANALYSIS __attribute__((no_thread_safety_analysis))
#define ASSERT_EXCLUSIVE_LOCK(...) __attribute((assert_exclusive_lock(__VA_ARGS__))) #define ASSERT_EXCLUSIVE_LOCK(...) __attribute__((assert_exclusive_lock(__VA_ARGS__)))
#else #else
#define LOCKABLE #define LOCKABLE
#define SCOPED_LOCKABLE #define SCOPED_LOCKABLE
#define GUARDED_BY(x) #define GUARDED_BY(x)
#define GUARDED_VAR
#define PT_GUARDED_BY(x) #define PT_GUARDED_BY(x)
#define PT_GUARDED_VAR
#define ACQUIRED_AFTER(...) #define ACQUIRED_AFTER(...)
#define ACQUIRED_BEFORE(...) #define ACQUIRED_BEFORE(...)
#define EXCLUSIVE_LOCK_FUNCTION(...) #define EXCLUSIVE_LOCK_FUNCTION(...)

View File

@ -4877,7 +4877,6 @@ bool LoadExternalBlockFile(const CChainParams& chainparams, FILE* fileIn, CDiskB
if (dbp) if (dbp)
dbp->nPos = nBlockPos; dbp->nPos = nBlockPos;
blkdat.SetLimit(nBlockPos + nSize); blkdat.SetLimit(nBlockPos + nSize);
blkdat.SetPos(nBlockPos);
std::shared_ptr<CBlock> pblock = std::make_shared<CBlock>(); std::shared_ptr<CBlock> pblock = std::make_shared<CBlock>();
CBlock& block = *pblock; CBlock& block = *pblock;
blkdat >> block; blkdat >> block;

View File

@ -81,7 +81,7 @@ bool EnsureWalletIsAvailable(CWallet * const pwallet, bool avoidException)
if (avoidException) return false; if (avoidException) return false;
if (!HasWallets()) { if (!HasWallets()) {
throw JSONRPCError( throw JSONRPCError(
RPC_METHOD_NOT_FOUND, "Method not found (wallet method is disabled because no wallet is loaded)"); RPC_WALLET_NOT_FOUND, "No wallet is loaded. Load a wallet using loadwallet or create a new one with createwallet. (Note: A default wallet is no longer automatically created)");
} }
throw JSONRPCError(RPC_WALLET_NOT_SPECIFIED, throw JSONRPCError(RPC_WALLET_NOT_SPECIFIED,
"Wallet file not specified (must request wallet RPC through /wallet/<filename> uri-path)."); "Wallet file not specified (must request wallet RPC through /wallet/<filename> uri-path).");

View File

@ -37,6 +37,8 @@ from test_framework.blocktools import (
create_coinbase, create_coinbase,
) )
from test_framework.messages import ( from test_framework.messages import (
CBlockHeader,
FromHex,
msg_block, msg_block,
) )
from test_framework.mininode import ( from test_framework.mininode import (
@ -234,6 +236,14 @@ class BlockchainTest(BitcoinTestFramework):
assert isinstance(int(header['versionHex'], 16), int) assert isinstance(int(header['versionHex'], 16), int)
assert isinstance(header['difficulty'], Decimal) assert isinstance(header['difficulty'], Decimal)
# Test with verbose=False, which should return the header as hex.
header_hex = node.getblockheader(blockhash=besthash, verbose=False)
assert_is_hex_string(header_hex)
header = FromHex(CBlockHeader(), header_hex)
header.calc_sha256()
assert_equal(header.hash, besthash)
def _test_getdifficulty(self): def _test_getdifficulty(self):
difficulty = self.nodes[0].getdifficulty() difficulty = self.nodes[0].getdifficulty()
# 1 hash in 2 should be valid, so difficulty should be 1/2**31 # 1 hash in 2 should be valid, so difficulty should be 1/2**31

View File

@ -486,6 +486,9 @@ class WalletTest(BitcoinTestFramework):
timeout -= 0.5 timeout -= 0.5
assert_equal(len(self.nodes[0].getrawmempool()), chainlimit * 2) assert_equal(len(self.nodes[0].getrawmempool()), chainlimit * 2)
# Prevent potential race condition when calling wallet RPCs right after restart
self.nodes[0].syncwithvalidationinterfacequeue()
node0_balance = self.nodes[0].getbalance() node0_balance = self.nodes[0].getbalance()
# With walletrejectlongchains we will not create the tx and store it in our wallet. # With walletrejectlongchains we will not create the tx and store it in our wallet.
assert_raises_rpc_error(-4, "Transaction has too long of a mempool chain", self.nodes[0].sendtoaddress, sending_addr, node0_balance - Decimal('0.01')) assert_raises_rpc_error(-4, "Transaction has too long of a mempool chain", self.nodes[0].sendtoaddress, sending_addr, node0_balance - Decimal('0.01'))

View File

@ -183,7 +183,7 @@ class MultiWalletTest(BitcoinTestFramework):
self.restart_node(0, ['-nowallet']) self.restart_node(0, ['-nowallet'])
assert_equal(node.listwallets(), []) assert_equal(node.listwallets(), [])
assert_raises_rpc_error(-32601, "Method not found", node.getwalletinfo) assert_raises_rpc_error(-18, "No wallet is loaded. Load a wallet using loadwallet or create a new one with createwallet. (Note: A default wallet is no longer automatically created)", node.getwalletinfo)
self.log.info("Load first wallet") self.log.info("Load first wallet")
loadwallet_name = node.loadwallet(wallet_names[0]) loadwallet_name = node.loadwallet(wallet_names[0])
@ -278,7 +278,7 @@ class MultiWalletTest(BitcoinTestFramework):
for wallet_name in self.nodes[0].listwallets(): for wallet_name in self.nodes[0].listwallets():
self.nodes[0].unloadwallet(wallet_name) self.nodes[0].unloadwallet(wallet_name)
assert_equal(self.nodes[0].listwallets(), []) assert_equal(self.nodes[0].listwallets(), [])
assert_raises_rpc_error(-32601, "Method not found (wallet method is disabled because no wallet is loaded)", self.nodes[0].getwalletinfo) assert_raises_rpc_error(-18, "No wallet is loaded. Load a wallet using loadwallet or create a new one with createwallet. (Note: A default wallet is no longer automatically created)", self.nodes[0].getwalletinfo)
# Successfully load a previously unloaded wallet # Successfully load a previously unloaded wallet
self.nodes[0].loadwallet('w1') self.nodes[0].loadwallet('w1')

View File

@ -0,0 +1,47 @@
#!/usr/bin/env bash
# Copyright (c) 2020 The Bitcoin Core developers
# Distributed under the MIT software license, see the accompanying
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
#
# Linter to check that commit messages have a new line before the body
# or no body at all
export LC_ALL=C
EXIT_CODE=0
while getopts "?" opt; do
case $opt in
?)
echo "Usage: $0 [N]"
echo " COMMIT_RANGE='<commit range>' $0"
echo " $0 -?"
echo "Checks unmerged commits, the previous N commits, or a commit range."
echo "COMMIT_RANGE='47ba2c3...ee50c9e' $0"
exit ${EXIT_CODE}
;;
esac
done
if [ -z "${COMMIT_RANGE}" ]; then
if [ -n "$1" ]; then
COMMIT_RANGE="HEAD~$1...HEAD"
else
MERGE_BASE=$(git merge-base HEAD master)
COMMIT_RANGE="$MERGE_BASE..HEAD"
fi
fi
while IFS= read -r commit_hash || [[ -n "$commit_hash" ]]; do
n_line=0
while IFS= read -r line || [[ -n "$line" ]]; do
n_line=$((n_line+1))
length=${#line}
if [ $n_line -eq 2 ] && [ $length -ne 0 ]; then
echo "The subject line of commit hash ${commit_hash} is followed by a non-empty line. Subject lines should always be followed by a blank line."
EXIT_CODE=1
fi
done < <(git log --format=%B -n 1 "$commit_hash")
done < <(git log "${COMMIT_RANGE}" --format=%H)
exit ${EXIT_CODE}