mirror of
https://github.com/dashpay/dash.git
synced 2024-12-24 11:32:46 +01:00
Merge pull request #4259 from PastaPastaPasta/backport-triv-pr13
backport: 'trivial' pr14
This commit is contained in:
commit
84769e128a
@ -30,7 +30,7 @@
|
||||
# and this notice are preserved. This file is offered as-is, without any
|
||||
# warranty.
|
||||
|
||||
#serial 32
|
||||
#serial 33
|
||||
|
||||
AC_DEFUN([AX_BOOST_THREAD],
|
||||
[
|
||||
@ -67,13 +67,24 @@ AC_DEFUN([AX_BOOST_THREAD],
|
||||
[AC_LANG_PUSH([C++])
|
||||
CXXFLAGS_SAVE=$CXXFLAGS
|
||||
|
||||
if test "x$host_os" = "xsolaris" ; then
|
||||
CXXFLAGS="-pthreads $CXXFLAGS"
|
||||
elif test "x$host_os" = "xmingw32" ; then
|
||||
CXXFLAGS="-mthreads $CXXFLAGS"
|
||||
else
|
||||
CXXFLAGS="-pthread $CXXFLAGS"
|
||||
fi
|
||||
case "x$host_os" in
|
||||
xsolaris )
|
||||
CXXFLAGS="-pthreads $CXXFLAGS"
|
||||
break;
|
||||
;;
|
||||
xmingw32 )
|
||||
CXXFLAGS="-mthreads $CXXFLAGS"
|
||||
break;
|
||||
;;
|
||||
*android* )
|
||||
break;
|
||||
;;
|
||||
* )
|
||||
CXXFLAGS="-pthread $CXXFLAGS"
|
||||
break;
|
||||
;;
|
||||
esac
|
||||
|
||||
AC_COMPILE_IFELSE([
|
||||
AC_LANG_PROGRAM(
|
||||
[[@%:@include <boost/thread/thread.hpp>]],
|
||||
@ -84,13 +95,23 @@ AC_DEFUN([AX_BOOST_THREAD],
|
||||
AC_LANG_POP([C++])
|
||||
])
|
||||
if test "x$ax_cv_boost_thread" = "xyes"; then
|
||||
if test "x$host_os" = "xsolaris" ; then
|
||||
BOOST_CPPFLAGS="-pthreads $BOOST_CPPFLAGS"
|
||||
elif test "x$host_os" = "xmingw32" ; then
|
||||
BOOST_CPPFLAGS="-mthreads $BOOST_CPPFLAGS"
|
||||
else
|
||||
BOOST_CPPFLAGS="-pthread $BOOST_CPPFLAGS"
|
||||
fi
|
||||
case "x$host_os" in
|
||||
xsolaris )
|
||||
BOOST_CPPFLAGS="-pthreads $BOOST_CPPFLAGS"
|
||||
break;
|
||||
;;
|
||||
xmingw32 )
|
||||
BOOST_CPPFLAGS="-mthreads $BOOST_CPPFLAGS"
|
||||
break;
|
||||
;;
|
||||
*android* )
|
||||
break;
|
||||
;;
|
||||
* )
|
||||
BOOST_CPPFLAGS="-pthread $BOOST_CPPFLAGS"
|
||||
break;
|
||||
;;
|
||||
esac
|
||||
|
||||
AC_SUBST(BOOST_CPPFLAGS)
|
||||
|
||||
@ -148,6 +169,9 @@ AC_DEFUN([AX_BOOST_THREAD],
|
||||
xmingw32 )
|
||||
break;
|
||||
;;
|
||||
*android* )
|
||||
break;
|
||||
;;
|
||||
* )
|
||||
BOOST_THREAD_LIB="$BOOST_THREAD_LIB -lpthread"
|
||||
break;
|
||||
|
@ -79,10 +79,19 @@ AC_DEFUN([BITCOIN_QT_INIT],[
|
||||
|
||||
AC_ARG_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=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)
|
||||
])
|
||||
|
||||
|
@ -110,9 +110,6 @@ AC_PATH_TOOL(CPPFILT, c++filt)
|
||||
AC_PATH_TOOL(OBJCOPY, objcopy)
|
||||
AC_PATH_TOOL(DSYMUTIL, dsymutil)
|
||||
AC_PATH_PROG(DOXYGEN, doxygen)
|
||||
if test -z "$DOXYGEN"; then
|
||||
AC_MSG_WARN([Doxygen not found])
|
||||
fi
|
||||
AM_CONDITIONAL([HAVE_DOXYGEN], [test -n "$DOXYGEN"])
|
||||
|
||||
AC_ARG_VAR(PYTHONPATH, Augments the default search path for python module files)
|
||||
@ -635,6 +632,7 @@ case $host in
|
||||
BUILD_OS=darwin
|
||||
;;
|
||||
*)
|
||||
AC_PATH_TOOL([DSYMUTIL], [dsymutil], dsymutil)
|
||||
AC_PATH_TOOL([INSTALLNAMETOOL], [install_name_tool], install_name_tool)
|
||||
AC_PATH_TOOL([OTOOL], [otool], otool)
|
||||
AC_PATH_PROGS([GENISOIMAGE], [genisoimage mkisofs],genisoimage)
|
||||
|
0
contrib/zmq/zmq_sub.py
Normal file → Executable file
0
contrib/zmq/zmq_sub.py
Normal file → Executable file
@ -1,6 +1,6 @@
|
||||
# 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,
|
||||
providing various message-oriented semantics such as publish/subscribe,
|
||||
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
|
||||
*libzmq3-dev*. The C++ wrapper for ZeroMQ is *not* needed.
|
||||
|
||||
In order to run the example Python client scripts in contrib/ one must
|
||||
also install *python3-zmq*, though this is not necessary for daemon
|
||||
In order to run the example Python client scripts in the `contrib/zmq/`
|
||||
directory, one must also install [PyZMQ](https://github.com/zeromq/pyzmq)
|
||||
(generally with `pip install pyzmq`), though this is not necessary for daemon
|
||||
operation.
|
||||
|
||||
## Enabling
|
||||
|
@ -1,9 +1,9 @@
|
||||
Language: Cpp
|
||||
AccessModifierOffset: -4
|
||||
AlignAfterOpenBracket: false
|
||||
AlignAfterOpenBracket: true
|
||||
AlignEscapedNewlinesLeft: true
|
||||
AlignTrailingComments: true
|
||||
AllowAllParametersOfDeclarationOnNextLine: false
|
||||
AllowAllParametersOfDeclarationOnNextLine: true
|
||||
AllowShortBlocksOnASingleLine: false
|
||||
AllowShortFunctionsOnASingleLine: All
|
||||
AllowShortIfStatementsOnASingleLine: true
|
||||
|
@ -424,12 +424,6 @@ public:
|
||||
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. */
|
||||
bool Contains(const CBlockIndex *pindex) const {
|
||||
return (*this)[pindex->nHeight] == pindex;
|
||||
|
@ -120,8 +120,9 @@ std::string ScriptToAsmStr(const CScript& script, const bool fAttemptSighashDeco
|
||||
// checks in CheckSignatureEncoding.
|
||||
if (CheckSignatureEncoding(vch, SCRIPT_VERIFY_STRICTENC, nullptr)) {
|
||||
const unsigned char chSigHashType = vch.back();
|
||||
if (mapSigHashTypes.count(chSigHashType)) {
|
||||
strSigHashDecode = "[" + mapSigHashTypes.find(chSigHashType)->second + "]";
|
||||
const auto it = mapSigHashTypes.find(chSigHashType);
|
||||
if (it != mapSigHashTypes.end()) {
|
||||
strSigHashDecode = "[" + it->second + "]";
|
||||
vch.pop_back(); // remove the sighash type byte. it will be replaced by the decode.
|
||||
}
|
||||
}
|
||||
|
@ -345,18 +345,6 @@ public:
|
||||
// Get an estimate of LevelDB memory usage (in bytes).
|
||||
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()
|
||||
{
|
||||
return new CDBIterator(*this, pdb->NewIterator(iteroptions));
|
||||
|
@ -118,7 +118,7 @@ std::unique_ptr<CBlockTemplate> BlockAssembler::CreateNewBlock(const CScript& sc
|
||||
|
||||
if(!pblocktemplate.get())
|
||||
return nullptr;
|
||||
pblock = &pblocktemplate->block; // pointer for convenience
|
||||
CBlock* const pblock = &pblocktemplate->block; // pointer for convenience
|
||||
|
||||
// Add dummy coinbase tx as first transaction
|
||||
pblock->vtx.emplace_back();
|
||||
@ -281,7 +281,7 @@ bool BlockAssembler::TestPackageTransactions(const CTxMemPool::setEntries& packa
|
||||
|
||||
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->vTxSigOps.push_back(iter->GetSigOpCount());
|
||||
nBlockSize += iter->GetTxSize();
|
||||
|
@ -129,8 +129,6 @@ class BlockAssembler
|
||||
private:
|
||||
// The constructed block template
|
||||
std::unique_ptr<CBlockTemplate> pblocktemplate;
|
||||
// A convenience pointer that always refers to the CBlock in pblocktemplate
|
||||
CBlock* pblock;
|
||||
|
||||
// Configuration parameters for the block size
|
||||
unsigned int nBlockMaxSize;
|
||||
|
@ -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)
|
||||
{
|
||||
unsigned int nRelayNodes = fReachable ? 2 : 1; // limited relaying of addresses outside our network(s)
|
||||
|
||||
// Relay to a limited number of other nodes
|
||||
// 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));
|
||||
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}}};
|
||||
assert(nRelayNodes <= best.size());
|
||||
|
||||
|
@ -419,17 +419,6 @@ bool CNetAddr::IsLocal() 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)
|
||||
unsigned char ipNone6[16] = {};
|
||||
if (IsIPv6() && memcmp(m_addr.data(), ipNone6, sizeof(ipNone6)) == 0) {
|
||||
|
@ -8,10 +8,6 @@
|
||||
#include <util/system.h>
|
||||
#include <util/strencodings.h>
|
||||
|
||||
#ifndef WIN32
|
||||
# include <arpa/inet.h>
|
||||
#endif
|
||||
|
||||
static std::atomic<bool> g_initial_block_download_completed(false);
|
||||
|
||||
namespace NetMsgType {
|
||||
|
@ -60,19 +60,16 @@ namespace NetMsgType {
|
||||
/**
|
||||
* The version message provides information about the transmitting node to the
|
||||
* receiving node at the beginning of a connection.
|
||||
* @see https://bitcoin.org/en/developer-reference#version
|
||||
*/
|
||||
extern const char *VERSION;
|
||||
/**
|
||||
* The verack message acknowledges a previously-received version message,
|
||||
* informing the connecting node that it can begin to send other messages.
|
||||
* @see https://bitcoin.org/en/developer-reference#verack
|
||||
*/
|
||||
extern const char *VERACK;
|
||||
/**
|
||||
* The addr (IP address) message relays connection information for peers on the
|
||||
* network.
|
||||
* @see https://bitcoin.org/en/developer-reference#addr
|
||||
*/
|
||||
extern const char *ADDR;
|
||||
/**
|
||||
@ -90,82 +87,69 @@ extern const char *SENDADDRV2;
|
||||
/**
|
||||
* The inv message (inventory message) transmits one or more inventories of
|
||||
* objects known to the transmitting peer.
|
||||
* @see https://bitcoin.org/en/developer-reference#inv
|
||||
*/
|
||||
extern const char *INV;
|
||||
/**
|
||||
* The getdata message requests one or more data objects from another node.
|
||||
* @see https://bitcoin.org/en/developer-reference#getdata
|
||||
*/
|
||||
extern const char *GETDATA;
|
||||
/**
|
||||
* The merkleblock message is a reply to a getdata message which requested a
|
||||
* block using the inventory type MSG_MERKLEBLOCK.
|
||||
* @since protocol version 70001 as described by BIP37.
|
||||
* @see https://bitcoin.org/en/developer-reference#merkleblock
|
||||
*/
|
||||
extern const char *MERKLEBLOCK;
|
||||
/**
|
||||
* The getblocks message requests an inv message that provides block header
|
||||
* hashes starting from a particular point in the block chain.
|
||||
* @see https://bitcoin.org/en/developer-reference#getblocks
|
||||
*/
|
||||
extern const char *GETBLOCKS;
|
||||
/**
|
||||
* The getheaders message requests a headers message that provides block
|
||||
* headers starting from a particular point in the block chain.
|
||||
* @since protocol version 31800.
|
||||
* @see https://bitcoin.org/en/developer-reference#getheaders
|
||||
*/
|
||||
extern const char *GETHEADERS;
|
||||
/**
|
||||
* The tx message transmits a single transaction.
|
||||
* @see https://bitcoin.org/en/developer-reference#tx
|
||||
*/
|
||||
extern const char *TX;
|
||||
/**
|
||||
* The headers message sends one or more block headers to a node which
|
||||
* previously requested certain headers with a getheaders message.
|
||||
* @since protocol version 31800.
|
||||
* @see https://bitcoin.org/en/developer-reference#headers
|
||||
*/
|
||||
extern const char *HEADERS;
|
||||
/**
|
||||
* The block message transmits a single serialized block.
|
||||
* @see https://bitcoin.org/en/developer-reference#block
|
||||
*/
|
||||
extern const char *BLOCK;
|
||||
/**
|
||||
* The getaddr message requests an addr message from the receiving node,
|
||||
* preferably one with lots of IP addresses of other receiving nodes.
|
||||
* @see https://bitcoin.org/en/developer-reference#getaddr
|
||||
*/
|
||||
extern const char *GETADDR;
|
||||
/**
|
||||
* 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.
|
||||
* @since protocol version 60002.
|
||||
* @see https://bitcoin.org/en/developer-reference#mempool
|
||||
*/
|
||||
extern const char *MEMPOOL;
|
||||
/**
|
||||
* The ping message is sent periodically to help confirm that the receiving
|
||||
* peer is still connected.
|
||||
* @see https://bitcoin.org/en/developer-reference#ping
|
||||
*/
|
||||
extern const char *PING;
|
||||
/**
|
||||
* The pong message replies to a ping message, proving to the pinging node that
|
||||
* the ponging node is still alive.
|
||||
* @since protocol version 60001 as described by BIP31.
|
||||
* @see https://bitcoin.org/en/developer-reference#pong
|
||||
*/
|
||||
extern const char *PONG;
|
||||
/**
|
||||
* The notfound message is a reply to a getdata message which requested an
|
||||
* object the receiving node does not have available for relay.
|
||||
* @since protocol version 70001.
|
||||
* @see https://bitcoin.org/en/developer-reference#notfound
|
||||
*/
|
||||
extern const char *NOTFOUND;
|
||||
/**
|
||||
@ -174,7 +158,6 @@ extern const char *NOTFOUND;
|
||||
* @since protocol version 70001 as described by BIP37.
|
||||
* Only available with service bit NODE_BLOOM since protocol version
|
||||
* 70011 as described by BIP111.
|
||||
* @see https://bitcoin.org/en/developer-reference#filterload
|
||||
*/
|
||||
extern const char *FILTERLOAD;
|
||||
/**
|
||||
@ -183,7 +166,6 @@ extern const char *FILTERLOAD;
|
||||
* @since protocol version 70001 as described by BIP37.
|
||||
* Only available with service bit NODE_BLOOM since protocol version
|
||||
* 70011 as described by BIP111.
|
||||
* @see https://bitcoin.org/en/developer-reference#filteradd
|
||||
*/
|
||||
extern const char *FILTERADD;
|
||||
/**
|
||||
@ -192,7 +174,6 @@ extern const char *FILTERADD;
|
||||
* @since protocol version 70001 as described by BIP37.
|
||||
* Only available with service bit NODE_BLOOM since protocol version
|
||||
* 70011 as described by BIP111.
|
||||
* @see https://bitcoin.org/en/developer-reference#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
|
||||
* "headers" message rather than an "inv".
|
||||
* @since protocol version 70012 as described by BIP130.
|
||||
* @see https://bitcoin.org/en/developer-reference#sendheaders
|
||||
*/
|
||||
extern const char *SENDHEADERS;
|
||||
|
||||
|
@ -307,7 +307,7 @@
|
||||
<item row="11" column="0">
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="text">
|
||||
<string>Current number of blocks</string>
|
||||
<string>Current block height</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
|
@ -110,6 +110,12 @@
|
||||
<property name="text">
|
||||
<string>&Request payment</string>
|
||||
</property>
|
||||
<property name="autoDefault">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="default">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
|
@ -194,22 +194,6 @@ void ReceiveCoinsDialog::resizeEvent(QResizeEvent *event)
|
||||
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()
|
||||
{
|
||||
if(!model || !model->getRecentRequestsTableModel() || !ui->recentRequestsView->selectionModel())
|
||||
|
@ -48,9 +48,6 @@ public Q_SLOTS:
|
||||
void reject() override;
|
||||
void accept() override;
|
||||
|
||||
protected:
|
||||
virtual void keyPressEvent(QKeyEvent *event) override;
|
||||
|
||||
private:
|
||||
Ui::ReceiveCoinsDialog *ui;
|
||||
GUIUtil::TableViewLastColumnResizingFixer *columnResizingFixer;
|
||||
|
@ -482,6 +482,7 @@ RPCConsole::RPCConsole(interfaces::Node& node, QWidget* parent, Qt::WindowFlags
|
||||
|
||||
// Install event filter for up and down arrow
|
||||
ui->lineEdit->installEventFilter(this);
|
||||
ui->lineEdit->setMaxLength(16 * 1024 * 1024);
|
||||
ui->messagesWidget->installEventFilter(this);
|
||||
|
||||
connect(ui->clearButton, SIGNAL(clicked()), this, SLOT(clear()));
|
||||
|
@ -193,17 +193,12 @@ public:
|
||||
|
||||
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];
|
||||
|
||||
// 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),
|
||||
// update the status of this transaction from the wallet. Otherwise,
|
||||
// simply re-use the cached status.
|
||||
// try to update the status of this transaction from the wallet.
|
||||
// Otherwise, simply re-use the cached status.
|
||||
interfaces::WalletTxStatus wtx;
|
||||
int64_t adjustedTime;
|
||||
if (rec->statusUpdateNeeded(numBlocks, parent->getChainLockHeight()) && wallet.tryGetTxStatus(rec->hash, wtx, adjustedTime)) {
|
||||
|
@ -245,6 +245,8 @@ void GetOSRand(unsigned char *ent32)
|
||||
if (getentropy(ent32, NUM_OS_RANDOM_BYTES) != 0) {
|
||||
RandFailure();
|
||||
}
|
||||
// Silence a compiler warning about unused function.
|
||||
(void)GetDevURandom;
|
||||
#elif defined(HAVE_GETENTROPY_RAND) && defined(MAC_OSX)
|
||||
// We need a fallback for OSX < 10.12
|
||||
if (&getentropy != nullptr) {
|
||||
@ -254,6 +256,8 @@ void GetOSRand(unsigned char *ent32)
|
||||
} else {
|
||||
GetDevURandom(ent32);
|
||||
}
|
||||
// Silence a compiler warning about unused function.
|
||||
(void)GetDevURandom;
|
||||
#elif defined(HAVE_SYSCTL_ARND)
|
||||
/* FreeBSD and similar. It is possible for the call to return less
|
||||
* bytes than requested, so need to read in a loop.
|
||||
@ -267,6 +271,8 @@ void GetOSRand(unsigned char *ent32)
|
||||
}
|
||||
have += len;
|
||||
} while (have < NUM_OS_RANDOM_BYTES);
|
||||
// Silence a compiler warning about unused function.
|
||||
(void)GetDevURandom;
|
||||
#else
|
||||
/* Fall back to /dev/urandom if there is no specific method implemented to
|
||||
* get system entropy for this OS.
|
||||
|
@ -18,9 +18,7 @@
|
||||
#define LOCKABLE __attribute__((lockable))
|
||||
#define SCOPED_LOCKABLE __attribute__((scoped_lockable))
|
||||
#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_VAR __attribute__((pt_guarded_var))
|
||||
#define ACQUIRED_AFTER(...) __attribute__((acquired_after(__VA_ARGS__)))
|
||||
#define ACQUIRED_BEFORE(...) __attribute__((acquired_before(__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 SHARED_LOCKS_REQUIRED(...) __attribute__((shared_locks_required(__VA_ARGS__)))
|
||||
#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
|
||||
#define LOCKABLE
|
||||
#define SCOPED_LOCKABLE
|
||||
#define GUARDED_BY(x)
|
||||
#define GUARDED_VAR
|
||||
#define PT_GUARDED_BY(x)
|
||||
#define PT_GUARDED_VAR
|
||||
#define ACQUIRED_AFTER(...)
|
||||
#define ACQUIRED_BEFORE(...)
|
||||
#define EXCLUSIVE_LOCK_FUNCTION(...)
|
||||
|
@ -4877,7 +4877,6 @@ bool LoadExternalBlockFile(const CChainParams& chainparams, FILE* fileIn, CDiskB
|
||||
if (dbp)
|
||||
dbp->nPos = nBlockPos;
|
||||
blkdat.SetLimit(nBlockPos + nSize);
|
||||
blkdat.SetPos(nBlockPos);
|
||||
std::shared_ptr<CBlock> pblock = std::make_shared<CBlock>();
|
||||
CBlock& block = *pblock;
|
||||
blkdat >> block;
|
||||
|
@ -81,7 +81,7 @@ bool EnsureWalletIsAvailable(CWallet * const pwallet, bool avoidException)
|
||||
if (avoidException) return false;
|
||||
if (!HasWallets()) {
|
||||
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,
|
||||
"Wallet file not specified (must request wallet RPC through /wallet/<filename> uri-path).");
|
||||
|
@ -37,6 +37,8 @@ from test_framework.blocktools import (
|
||||
create_coinbase,
|
||||
)
|
||||
from test_framework.messages import (
|
||||
CBlockHeader,
|
||||
FromHex,
|
||||
msg_block,
|
||||
)
|
||||
from test_framework.mininode import (
|
||||
@ -234,6 +236,14 @@ class BlockchainTest(BitcoinTestFramework):
|
||||
assert isinstance(int(header['versionHex'], 16), int)
|
||||
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):
|
||||
difficulty = self.nodes[0].getdifficulty()
|
||||
# 1 hash in 2 should be valid, so difficulty should be 1/2**31
|
||||
|
@ -486,6 +486,9 @@ class WalletTest(BitcoinTestFramework):
|
||||
timeout -= 0.5
|
||||
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()
|
||||
# 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'))
|
||||
|
@ -183,7 +183,7 @@ class MultiWalletTest(BitcoinTestFramework):
|
||||
|
||||
self.restart_node(0, ['-nowallet'])
|
||||
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")
|
||||
loadwallet_name = node.loadwallet(wallet_names[0])
|
||||
@ -278,7 +278,7 @@ class MultiWalletTest(BitcoinTestFramework):
|
||||
for wallet_name in self.nodes[0].listwallets():
|
||||
self.nodes[0].unloadwallet(wallet_name)
|
||||
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
|
||||
self.nodes[0].loadwallet('w1')
|
||||
|
47
test/lint/lint-git-commit-check.sh
Executable file
47
test/lint/lint-git-commit-check.sh
Executable 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}
|
Loading…
Reference in New Issue
Block a user