mirror of
https://github.com/dashpay/dash.git
synced 2024-12-24 11:32:46 +01:00
Merge #6334: backport: merge bitcoin#22951, #23137, #23293, #23439, #23152, #23517, #23637, #24080, #25485, #24565 (auxiliary backports: part 20)
85b0b78d47
merge bitcoin#24565: Remove LOCKTIME_MEDIAN_TIME_PAST constant (Kittywhiskers Van Gogh)7068abd796
merge bitcoin#25485: Use enum instead of string for `filtertype_name` (Kittywhiskers Van Gogh)1c1fcc60a8
merge bitcoin#24080: Remove unused locktime flags (Kittywhiskers Van Gogh)536c4e1b27
merge bitcoin#23637: Remove uncompiled MTP code (Kittywhiskers Van Gogh)0b65f1d241
merge bitcoin#23517: Move miner to src/node (Kittywhiskers Van Gogh)b7db4cbab0
merge bitcoin#23152: add `--enable-lto` configuration option (Kittywhiskers Van Gogh)4a46391791
merge bitcoin#23439: Open streams_test_tmp file in temporary folder (Kittywhiskers Van Gogh)e3e225f59d
merge bitcoin#23293: Add comment to COIN constant (Kittywhiskers Van Gogh)5fb2cc8bb6
merge bitcoin#23137: move-only bloom to src/common (Kittywhiskers Van Gogh)20d15056f1
merge bitcoin#22951: move amount.h into consensus (Kittywhiskers Van Gogh) Pull request description: ## Breaking Changes None expected. ## Checklist - [x] I have performed a self-review of my own code - [x] I have commented my code, particularly in hard-to-understand areas **(note: N/A)** - [x] I have added or updated relevant unit/integration/functional/e2e tests - [x] I have made corresponding changes to the documentation - [x] I have assigned this pull request to a milestone _(for repository code-owners and collaborators only)_ ACKs for top commit: UdjinM6: utACK85b0b78d47
Tree-SHA512: 2bd31056291f86e8f33f6b8ca5a8236a5f876d6811f852d13ac0d6d818013a62af3cfdd05893f16f7476338ac93655e150fbbe651b0b8cbf414afc7f82b05664
This commit is contained in:
commit
9d27259063
17
configure.ac
17
configure.ac
@ -345,6 +345,11 @@ AC_ARG_WITH([boost-process],
|
||||
[boost_process=$withval],
|
||||
[boost_process=no])
|
||||
|
||||
AC_ARG_ENABLE([lto],
|
||||
[AS_HELP_STRING([--enable-lto],[build using LTO (default is no)])],
|
||||
[enable_lto=$enableval],
|
||||
[enable_lto=no])
|
||||
|
||||
AC_LANG_PUSH([C++])
|
||||
|
||||
dnl Check for a flag to turn compiler warnings into errors. This is helpful for checks which may
|
||||
@ -403,6 +408,11 @@ else
|
||||
fi
|
||||
fi
|
||||
|
||||
if test "x$enable_lto" = "xyes"; then
|
||||
AX_CHECK_COMPILE_FLAG([-flto], [LTO_CXXFLAGS="$LTO_CXXFLAGS -flto"], [AC_MSG_ERROR([compile failed with -flto])], [$CXXFLAG_WERROR])
|
||||
AX_CHECK_LINK_FLAG([-flto], [LTO_LDFLAGS="$LTO_LDFLAGS -flto"], [AC_MSG_ERROR([link failed with -flto])], [$CXXFLAG_WERROR])
|
||||
fi
|
||||
|
||||
if test "x$enable_stacktraces" != xno; then
|
||||
AC_CHECK_HEADERS([execinfo.h], [], [enable_stacktraces=no])
|
||||
fi
|
||||
@ -1898,6 +1908,8 @@ AC_SUBST(GPROF_LDFLAGS)
|
||||
AC_SUBST(HARDENED_CXXFLAGS)
|
||||
AC_SUBST(HARDENED_CPPFLAGS)
|
||||
AC_SUBST(HARDENED_LDFLAGS)
|
||||
AC_SUBST(LTO_CXXFLAGS)
|
||||
AC_SUBST(LTO_LDFLAGS)
|
||||
AC_SUBST(PIC_FLAGS)
|
||||
AC_SUBST(PIE_FLAGS)
|
||||
AC_SUBST(SANITIZER_CXXFLAGS)
|
||||
@ -1997,6 +2009,7 @@ echo " crash hooks enabled = $enable_crashhooks"
|
||||
echo " miner enabled = $enable_miner"
|
||||
echo " gprof enabled = $enable_gprof"
|
||||
echo " werror = $enable_werror"
|
||||
echo " LTO = $enable_lto"
|
||||
echo
|
||||
echo " target os = $host_os"
|
||||
echo " build os = $build_os"
|
||||
@ -2005,7 +2018,7 @@ echo " CC = $CC"
|
||||
echo " CFLAGS = $PTHREAD_CFLAGS $CFLAGS"
|
||||
echo " CPPFLAGS = $DEBUG_CPPFLAGS $HARDENED_CPPFLAGS $CPPFLAGS"
|
||||
echo " CXX = $CXX"
|
||||
echo " CXXFLAGS = $DEBUG_CXXFLAGS $HARDENED_CXXFLAGS $WARN_CXXFLAGS $NOWARN_CXXFLAGS $ERROR_CXXFLAGS $GPROF_CXXFLAGS $CXXFLAGS"
|
||||
echo " LDFLAGS = $PTHREAD_LIBS $HARDENED_LDFLAGS $GPROF_LDFLAGS $LDFLAGS"
|
||||
echo " CXXFLAGS = $LTO_CXXFLAGS $DEBUG_CXXFLAGS $HARDENED_CXXFLAGS $WARN_CXXFLAGS $NOWARN_CXXFLAGS $ERROR_CXXFLAGS $GPROF_CXXFLAGS $CXXFLAGS"
|
||||
echo " LDFLAGS = $LTO_LDFLAGS $PTHREAD_LIBS $HARDENED_LDFLAGS $GPROF_LDFLAGS $LDFLAGS"
|
||||
echo " ARFLAGS = $ARFLAGS"
|
||||
echo
|
||||
|
@ -9,8 +9,8 @@ print-%: FORCE
|
||||
|
||||
DIST_SUBDIRS = secp256k1
|
||||
|
||||
AM_LDFLAGS = $(LIBTOOL_LDFLAGS) $(HARDENED_LDFLAGS) $(GPROF_LDFLAGS) $(SANITIZER_LDFLAGS)
|
||||
AM_CXXFLAGS = $(DEBUG_CXXFLAGS) $(HARDENED_CXXFLAGS) $(WARN_CXXFLAGS) $(NOWARN_CXXFLAGS) $(ERROR_CXXFLAGS) $(GPROF_CXXFLAGS) $(SANITIZER_CXXFLAGS)
|
||||
AM_LDFLAGS = $(LIBTOOL_LDFLAGS) $(HARDENED_LDFLAGS) $(GPROF_LDFLAGS) $(SANITIZER_LDFLAGS) $(LTO_LDFLAGS)
|
||||
AM_CXXFLAGS = $(DEBUG_CXXFLAGS) $(HARDENED_CXXFLAGS) $(WARN_CXXFLAGS) $(NOWARN_CXXFLAGS) $(ERROR_CXXFLAGS) $(GPROF_CXXFLAGS) $(SANITIZER_CXXFLAGS) $(LTO_CXXFLAGS)
|
||||
AM_CPPFLAGS = $(DEBUG_CPPFLAGS) $(HARDENED_CPPFLAGS)
|
||||
AM_LIBTOOLFLAGS = --preserve-dup-deps
|
||||
PTHREAD_FLAGS = $(PTHREAD_CFLAGS) $(PTHREAD_LIBS)
|
||||
@ -142,11 +142,10 @@ BITCOIN_CORE_H = \
|
||||
bech32.h \
|
||||
bip324.h \
|
||||
blockencodings.h \
|
||||
bloom.h \
|
||||
common/bloom.h \
|
||||
cachemap.h \
|
||||
cachemultimap.h \
|
||||
blockfilter.h \
|
||||
bloom.h \
|
||||
chain.h \
|
||||
chainparams.h \
|
||||
chainparamsbase.h \
|
||||
@ -161,6 +160,7 @@ BITCOIN_CORE_H = \
|
||||
coinjoin/server.h \
|
||||
coinjoin/util.h \
|
||||
coins.h \
|
||||
common/bloom.h \
|
||||
compat.h \
|
||||
compat/assumptions.h \
|
||||
compat/byteswap.h \
|
||||
@ -258,7 +258,6 @@ BITCOIN_CORE_H = \
|
||||
memusage.h \
|
||||
merkleblock.h \
|
||||
messagesigner.h \
|
||||
miner.h \
|
||||
minisketchwrapper.h \
|
||||
net.h \
|
||||
net_permissions.h \
|
||||
@ -275,6 +274,7 @@ BITCOIN_CORE_H = \
|
||||
node/connection_types.h \
|
||||
node/context.h \
|
||||
node/eviction.h \
|
||||
node/miner.h \
|
||||
node/psbt.h \
|
||||
node/transaction.h \
|
||||
node/ui_interface.h \
|
||||
@ -494,7 +494,6 @@ libbitcoin_server_a_SOURCES = \
|
||||
masternode/payments.cpp \
|
||||
masternode/sync.cpp \
|
||||
masternode/utils.cpp \
|
||||
miner.cpp \
|
||||
minisketchwrapper.cpp \
|
||||
net.cpp \
|
||||
netfulfilledman.cpp \
|
||||
@ -507,6 +506,7 @@ libbitcoin_server_a_SOURCES = \
|
||||
node/context.cpp \
|
||||
node/eviction.cpp \
|
||||
node/interfaces.cpp \
|
||||
node/miner.cpp \
|
||||
node/psbt.cpp \
|
||||
node/transaction.cpp \
|
||||
node/ui_interface.cpp \
|
||||
@ -699,11 +699,11 @@ crypto_libbitcoin_crypto_arm_shani_a_SOURCES = crypto/sha256_arm_shani.cpp
|
||||
libbitcoin_consensus_a_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES)
|
||||
libbitcoin_consensus_a_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS)
|
||||
libbitcoin_consensus_a_SOURCES = \
|
||||
amount.h \
|
||||
arith_uint256.cpp \
|
||||
arith_uint256.h \
|
||||
bls/bls.cpp \
|
||||
bls/bls.h \
|
||||
consensus/amount.h \
|
||||
consensus/merkle.cpp \
|
||||
consensus/merkle.h \
|
||||
consensus/params.h \
|
||||
@ -743,9 +743,9 @@ libbitcoin_common_a_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS)
|
||||
libbitcoin_common_a_SOURCES = \
|
||||
base58.cpp \
|
||||
bech32.cpp \
|
||||
bloom.cpp \
|
||||
chainparams.cpp \
|
||||
coins.cpp \
|
||||
common/bloom.cpp \
|
||||
compressor.cpp \
|
||||
core_read.cpp \
|
||||
core_write.cpp \
|
||||
|
@ -8,7 +8,7 @@
|
||||
#ifndef BITCOIN_ADDRESSINDEX_H
|
||||
#define BITCOIN_ADDRESSINDEX_H
|
||||
|
||||
#include <amount.h>
|
||||
#include <consensus/amount.h>
|
||||
#include <serialize.h>
|
||||
#include <uint256.h>
|
||||
#include <util/underlying.h>
|
||||
|
@ -6,7 +6,7 @@
|
||||
#define BITCOIN_BANMAN_H
|
||||
|
||||
#include <addrdb.h>
|
||||
#include <bloom.h>
|
||||
#include <common/bloom.h>
|
||||
#include <fs.h>
|
||||
#include <net_types.h> // For banmap_t
|
||||
#include <sync.h>
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
|
||||
#include <bench/bench.h>
|
||||
#include <bloom.h>
|
||||
#include <common/bloom.h>
|
||||
|
||||
static void RollingBloom(benchmark::Bench& bench)
|
||||
{
|
||||
|
@ -5,7 +5,7 @@
|
||||
#ifndef BITCOIN_COINJOIN_COMMON_H
|
||||
#define BITCOIN_COINJOIN_COMMON_H
|
||||
|
||||
#include <amount.h>
|
||||
#include <consensus/amount.h>
|
||||
#include <primitives/transaction.h>
|
||||
|
||||
#include <array>
|
||||
|
@ -5,7 +5,8 @@
|
||||
#ifndef BITCOIN_COINJOIN_OPTIONS_H
|
||||
#define BITCOIN_COINJOIN_OPTIONS_H
|
||||
|
||||
#include <amount.h>
|
||||
#include <consensus/amount.h>
|
||||
|
||||
#include <atomic>
|
||||
#include <mutex>
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
// Distributed under the MIT software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
#include <bloom.h>
|
||||
#include <common/bloom.h>
|
||||
|
||||
#include <evo/assetlocktx.h>
|
||||
#include <evo/providertx.h>
|
@ -2,8 +2,8 @@
|
||||
// Distributed under the MIT software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
#ifndef BITCOIN_BLOOM_H
|
||||
#define BITCOIN_BLOOM_H
|
||||
#ifndef BITCOIN_COMMON_BLOOM_H
|
||||
#define BITCOIN_COMMON_BLOOM_H
|
||||
|
||||
#include <serialize.h>
|
||||
#include <span.h>
|
||||
@ -133,4 +133,4 @@ private:
|
||||
int nHashFuncs;
|
||||
};
|
||||
|
||||
#endif // BITCOIN_BLOOM_H
|
||||
#endif // BITCOIN_COMMON_BLOOM_H
|
@ -3,15 +3,16 @@
|
||||
// Distributed under the MIT software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
#ifndef BITCOIN_AMOUNT_H
|
||||
#define BITCOIN_AMOUNT_H
|
||||
#ifndef BITCOIN_CONSENSUS_AMOUNT_H
|
||||
#define BITCOIN_CONSENSUS_AMOUNT_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include <cstdint>
|
||||
|
||||
/** Amount in satoshis (Can be negative) */
|
||||
typedef int64_t CAmount;
|
||||
|
||||
static const CAmount COIN = 100000000;
|
||||
/** The amount of satoshis in one BTC. */
|
||||
static constexpr CAmount COIN = 100000000;
|
||||
|
||||
/** No amount larger than this (in satoshi) is valid.
|
||||
*
|
||||
@ -22,7 +23,7 @@ static const CAmount COIN = 100000000;
|
||||
* critical; in unusual circumstances like a(nother) overflow bug that allowed
|
||||
* for the creation of coins out of thin air modification could lead to a fork.
|
||||
* */
|
||||
static const CAmount MAX_MONEY = 21000000 * COIN;
|
||||
static constexpr CAmount MAX_MONEY = 21000000 * COIN;
|
||||
inline bool MoneyRange(const CAmount& nValue) { return (nValue >= 0 && nValue <= MAX_MONEY); }
|
||||
|
||||
#endif // BITCOIN_AMOUNT_H
|
||||
#endif // BITCOIN_CONSENSUS_AMOUNT_H
|
@ -26,7 +26,5 @@ static const int COINBASE_MATURITY = 100;
|
||||
/** Flags for nSequence and nLockTime locks */
|
||||
/** Interpret sequence numbers as relative lock-time constraints. */
|
||||
static constexpr unsigned int LOCKTIME_VERIFY_SEQUENCE = (1 << 0);
|
||||
/** Use GetMedianTimePast() instead of nTime for end point timestamp. */
|
||||
static constexpr unsigned int LOCKTIME_MEDIAN_TIME_PAST = (1 << 1);
|
||||
|
||||
#endif // BITCOIN_CONSENSUS_CONSENSUS_H
|
||||
|
@ -7,6 +7,7 @@
|
||||
#include <consensus/consensus.h>
|
||||
#include <consensus/tx_check.h>
|
||||
|
||||
#include <consensus/amount.h>
|
||||
#include <primitives/transaction.h>
|
||||
#include <consensus/validation.h>
|
||||
|
||||
|
@ -5,7 +5,7 @@
|
||||
#ifndef BITCOIN_CONSENSUS_TX_VERIFY_H
|
||||
#define BITCOIN_CONSENSUS_TX_VERIFY_H
|
||||
|
||||
#include <amount.h>
|
||||
#include <consensus/amount.h>
|
||||
|
||||
#include <stdint.h>
|
||||
#include <vector>
|
||||
|
@ -5,7 +5,7 @@
|
||||
#ifndef BITCOIN_CORE_IO_H
|
||||
#define BITCOIN_CORE_IO_H
|
||||
|
||||
#include <amount.h>
|
||||
#include <consensus/amount.h>
|
||||
#include <attributes.h>
|
||||
|
||||
#include <string>
|
||||
|
@ -4,6 +4,7 @@
|
||||
|
||||
#include <core_io.h>
|
||||
|
||||
#include <consensus/amount.h>
|
||||
#include <consensus/validation.h>
|
||||
#include <key_io.h>
|
||||
#include <primitives/transaction.h>
|
||||
|
@ -5,7 +5,7 @@
|
||||
#ifndef BITCOIN_EVO_DMN_TYPES_H
|
||||
#define BITCOIN_EVO_DMN_TYPES_H
|
||||
|
||||
#include <amount.h>
|
||||
#include <consensus/amount.h>
|
||||
|
||||
#include <limits>
|
||||
#include <string_view>
|
||||
|
@ -4,7 +4,7 @@
|
||||
#ifndef BITCOIN_GOVERNANCE_CLASSES_H
|
||||
#define BITCOIN_GOVERNANCE_CLASSES_H
|
||||
|
||||
#include <amount.h>
|
||||
#include <consensus/amount.h>
|
||||
#include <governance/object.h>
|
||||
#include <script/script.h>
|
||||
#include <script/standard.h>
|
||||
|
@ -4,9 +4,9 @@
|
||||
|
||||
#include <governance/governance.h>
|
||||
|
||||
#include <bloom.h>
|
||||
#include <chain.h>
|
||||
#include <chainparams.h>
|
||||
#include <common/bloom.h>
|
||||
#include <consensus/validation.h>
|
||||
#include <deploymentstatus.h>
|
||||
#include <evo/deterministicmns.h>
|
||||
|
@ -11,13 +11,13 @@
|
||||
#include <init.h>
|
||||
|
||||
#include <addrman.h>
|
||||
#include <amount.h>
|
||||
#include <banman.h>
|
||||
#include <base58.h>
|
||||
#include <blockfilter.h>
|
||||
#include <chain.h>
|
||||
#include <chainparams.h>
|
||||
#include <context.h>
|
||||
#include <consensus/amount.h>
|
||||
#include <deploymentstatus.h>
|
||||
#include <node/coinstats.h>
|
||||
#include <fs.h>
|
||||
@ -31,7 +31,7 @@
|
||||
#include <index/txindex.h>
|
||||
#include <interfaces/node.h>
|
||||
#include <mapport.h>
|
||||
#include <miner.h>
|
||||
#include <node/miner.h>
|
||||
#include <net.h>
|
||||
#include <net_permissions.h>
|
||||
#include <net_processing.h>
|
||||
|
@ -5,7 +5,7 @@
|
||||
#ifndef BITCOIN_INTERFACES_NODE_H
|
||||
#define BITCOIN_INTERFACES_NODE_H
|
||||
|
||||
#include <amount.h> // For CAmount
|
||||
#include <consensus/amount.h> // For CAmount
|
||||
#include <net.h> // For NodeId
|
||||
#include <net_types.h> // For banmap_t
|
||||
#include <netaddress.h> // For Network
|
||||
|
@ -5,7 +5,7 @@
|
||||
#ifndef BITCOIN_INTERFACES_WALLET_H
|
||||
#define BITCOIN_INTERFACES_WALLET_H
|
||||
|
||||
#include <amount.h> // For CAmount
|
||||
#include <consensus/amount.h> // For CAmount
|
||||
#include <fs.h>
|
||||
#include <interfaces/chain.h> // For ChainClient
|
||||
#include <pubkey.h> // For CKeyID and CScriptID (definitions needed in CTxDestination instantiation)
|
||||
|
@ -4,9 +4,9 @@
|
||||
|
||||
#include <masternode/payments.h>
|
||||
|
||||
#include <amount.h>
|
||||
#include <chain.h>
|
||||
#include <chainparams.h>
|
||||
#include <consensus/amount.h>
|
||||
#include <deploymentstatus.h>
|
||||
#include <evo/deterministicmns.h>
|
||||
#include <governance/classes.h>
|
||||
|
@ -5,7 +5,7 @@
|
||||
#ifndef BITCOIN_MASTERNODE_PAYMENTS_H
|
||||
#define BITCOIN_MASTERNODE_PAYMENTS_H
|
||||
|
||||
#include <amount.h>
|
||||
#include <consensus/amount.h>
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
@ -6,10 +6,10 @@
|
||||
#ifndef BITCOIN_MERKLEBLOCK_H
|
||||
#define BITCOIN_MERKLEBLOCK_H
|
||||
|
||||
#include <common/bloom.h>
|
||||
#include <primitives/block.h>
|
||||
#include <serialize.h>
|
||||
#include <uint256.h>
|
||||
#include <primitives/block.h>
|
||||
#include <bloom.h>
|
||||
|
||||
#include <vector>
|
||||
|
||||
|
@ -7,9 +7,10 @@
|
||||
#define BITCOIN_NET_H
|
||||
|
||||
#include <bip324.h>
|
||||
#include <bloom.h>
|
||||
#include <chainparams.h>
|
||||
#include <common/bloom.h>
|
||||
#include <compat.h>
|
||||
#include <consensus/amount.h>
|
||||
#include <fs.h>
|
||||
#include <crypto/siphash.h>
|
||||
#include <hash.h>
|
||||
|
@ -10,6 +10,7 @@
|
||||
#include <blockencodings.h>
|
||||
#include <blockfilter.h>
|
||||
#include <chainparams.h>
|
||||
#include <consensus/amount.h>
|
||||
#include <consensus/validation.h>
|
||||
#include <hash.h>
|
||||
#include <index/blockfilterindex.h>
|
||||
|
@ -6,9 +6,9 @@
|
||||
#ifndef BITCOIN_NODE_COINSTATS_H
|
||||
#define BITCOIN_NODE_COINSTATS_H
|
||||
|
||||
#include <amount.h>
|
||||
#include <chain.h>
|
||||
#include <coins.h>
|
||||
#include <consensus/amount.h>
|
||||
#include <streams.h>
|
||||
#include <uint256.h>
|
||||
|
||||
|
@ -767,7 +767,7 @@ public:
|
||||
bool checkFinalTx(const CTransaction& tx) override
|
||||
{
|
||||
LOCK(cs_main);
|
||||
return CheckFinalTx(m_node.chainman->ActiveChain().Tip(), tx);
|
||||
return CheckFinalTxAtTip(m_node.chainman->ActiveChain().Tip(), tx);
|
||||
}
|
||||
bool isInstantSendLockedTx(const uint256& hash) override
|
||||
{
|
||||
|
@ -4,11 +4,11 @@
|
||||
// Distributed under the MIT software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
#include <miner.h>
|
||||
#include <node/miner.h>
|
||||
|
||||
#include <amount.h>
|
||||
#include <chain.h>
|
||||
#include <chainparams.h>
|
||||
#include <consensus/amount.h>
|
||||
#include <consensus/consensus.h>
|
||||
#include <consensus/merkle.h>
|
||||
#include <consensus/tx_verify.h>
|
||||
@ -22,6 +22,7 @@
|
||||
#include <timedata.h>
|
||||
#include <util/moneystr.h>
|
||||
#include <util/system.h>
|
||||
#include <validation.h>
|
||||
|
||||
#include <evo/specialtx.h>
|
||||
#include <evo/cbtx.h>
|
||||
@ -37,7 +38,6 @@
|
||||
#include <llmq/options.h>
|
||||
#include <masternode/payments.h>
|
||||
#include <spork.h>
|
||||
#include <validation.h>
|
||||
|
||||
#include <algorithm>
|
||||
#include <utility>
|
||||
@ -45,14 +45,16 @@
|
||||
int64_t UpdateTime(CBlockHeader* pblock, const Consensus::Params& consensusParams, const CBlockIndex* pindexPrev)
|
||||
{
|
||||
int64_t nOldTime = pblock->nTime;
|
||||
int64_t nNewTime = std::max(pindexPrev->GetMedianTimePast()+1, GetAdjustedTime());
|
||||
int64_t nNewTime = std::max(pindexPrev->GetMedianTimePast() + 1, GetAdjustedTime());
|
||||
|
||||
if (nOldTime < nNewTime)
|
||||
if (nOldTime < nNewTime) {
|
||||
pblock->nTime = nNewTime;
|
||||
}
|
||||
|
||||
// Updating time can change work required on testnet:
|
||||
if (consensusParams.fPowAllowMinDifficultyBlocks)
|
||||
if (consensusParams.fPowAllowMinDifficultyBlocks) {
|
||||
pblock->nBits = GetNextWorkRequired(pindexPrev, pblock, consensusParams);
|
||||
}
|
||||
|
||||
return nNewTime - nOldTime;
|
||||
}
|
||||
@ -123,8 +125,9 @@ std::unique_ptr<CBlockTemplate> BlockAssembler::CreateNewBlock(const CScript& sc
|
||||
|
||||
pblocktemplate.reset(new CBlockTemplate());
|
||||
|
||||
if(!pblocktemplate.get())
|
||||
if (!pblocktemplate.get()) {
|
||||
return nullptr;
|
||||
}
|
||||
CBlock* const pblock = &pblocktemplate->block; // pointer for convenience
|
||||
|
||||
// Add dummy coinbase tx as first transaction
|
||||
@ -149,15 +152,12 @@ std::unique_ptr<CBlockTemplate> BlockAssembler::CreateNewBlock(const CScript& sc
|
||||
pblock->nVersion = g_versionbitscache.ComputeBlockVersion(pindexPrev, chainparams.GetConsensus());
|
||||
// Non-mainnet only: allow overriding block.nVersion with
|
||||
// -blockversion=N to test forking scenarios
|
||||
if (Params().NetworkIDString() != CBaseChainParams::MAIN)
|
||||
if (Params().NetworkIDString() != CBaseChainParams::MAIN) {
|
||||
pblock->nVersion = gArgs.GetArg("-blockversion", pblock->nVersion);
|
||||
}
|
||||
|
||||
pblock->nTime = GetAdjustedTime();
|
||||
const int64_t nMedianTimePast = pindexPrev->GetMedianTimePast();
|
||||
|
||||
nLockTimeCutoff = (STANDARD_LOCKTIME_VERIFY_FLAGS & LOCKTIME_MEDIAN_TIME_PAST)
|
||||
? nMedianTimePast
|
||||
: pblock->GetBlockTime();
|
||||
m_lock_time_cutoff = pindexPrev->GetMedianTimePast();
|
||||
|
||||
if (fDIP0003Active_context) {
|
||||
for (const Consensus::LLMQParams& params : llmq::GetEnabledQuorumParams(pindexPrev)) {
|
||||
@ -281,8 +281,7 @@ void BlockAssembler::onlyUnconfirmed(CTxMemPool::setEntries& testSet)
|
||||
// Only test txs not already in the block
|
||||
if (inBlock.count(*iit)) {
|
||||
testSet.erase(iit++);
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
iit++;
|
||||
}
|
||||
}
|
||||
@ -290,10 +289,13 @@ void BlockAssembler::onlyUnconfirmed(CTxMemPool::setEntries& testSet)
|
||||
|
||||
bool BlockAssembler::TestPackage(uint64_t packageSize, unsigned int packageSigOps) const
|
||||
{
|
||||
if (nBlockSize + packageSize >= nBlockMaxSize)
|
||||
if (nBlockSize + packageSize >= nBlockMaxSize) {
|
||||
return false;
|
||||
if (nBlockSigOps + packageSigOps >= nBlockMaxSigOps)
|
||||
}
|
||||
|
||||
if (nBlockSigOps + packageSigOps >= nBlockMaxSigOps) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -303,11 +305,14 @@ bool BlockAssembler::TestPackage(uint64_t packageSize, unsigned int packageSigOp
|
||||
bool BlockAssembler::TestPackageTransactions(const CTxMemPool::setEntries& package) const
|
||||
{
|
||||
for (CTxMemPool::txiter it : package) {
|
||||
if (!IsFinalTx(it->GetTx(), nHeight, nLockTimeCutoff))
|
||||
if (!IsFinalTx(it->GetTx(), nHeight, m_lock_time_cutoff)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
const auto& txid = it->GetTx().GetHash();
|
||||
if (!m_isman.RejectConflictingBlocks() || !m_isman.IsInstantSendEnabled() || m_isman.IsLocked(txid)) continue;
|
||||
if (!m_isman.RejectConflictingBlocks() || !m_isman.IsInstantSendEnabled() || m_isman.IsLocked(txid)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!it->GetTx().vin.empty() && !m_clhandler.IsTxSafeForMining(txid)) {
|
||||
return false;
|
||||
@ -346,8 +351,9 @@ int BlockAssembler::UpdatePackagesForAdded(const CTxMemPool::setEntries& already
|
||||
m_mempool.CalculateDescendants(it, descendants);
|
||||
// Insert all descendants (not yet in block) into the modified set
|
||||
for (CTxMemPool::txiter desc : descendants) {
|
||||
if (alreadyAdded.count(desc))
|
||||
if (alreadyAdded.count(desc)) {
|
||||
continue;
|
||||
}
|
||||
++nDescendantsUpdated;
|
||||
modtxiter mit = mapModifiedTx.find(desc);
|
||||
if (mit == mapModifiedTx.end()) {
|
||||
@ -373,7 +379,7 @@ int BlockAssembler::UpdatePackagesForAdded(const CTxMemPool::setEntries& already
|
||||
// guaranteed to fail again, but as a belt-and-suspenders check we put it in
|
||||
// failedTx and avoid re-evaluation, since the re-evaluation would be using
|
||||
// cached size/sigops/fee values that are not actually correct.
|
||||
bool BlockAssembler::SkipMapTxEntry(CTxMemPool::txiter it, indexed_modified_transaction_set &mapModifiedTx, CTxMemPool::setEntries &failedTx)
|
||||
bool BlockAssembler::SkipMapTxEntry(CTxMemPool::txiter it, indexed_modified_transaction_set& mapModifiedTx, CTxMemPool::setEntries& failedTx)
|
||||
{
|
||||
AssertLockHeld(m_mempool.cs);
|
||||
|
||||
@ -402,7 +408,7 @@ void BlockAssembler::SortForBlock(const CTxMemPool::setEntries& package, std::ve
|
||||
// Each time through the loop, we compare the best transaction in
|
||||
// mapModifiedTxs with the next transaction in the mempool to decide what
|
||||
// transaction package to work on next.
|
||||
void BlockAssembler::addPackageTxs(int &nPackagesSelected, int &nDescendantsUpdated, const CBlockIndex* const pindexPrev)
|
||||
void BlockAssembler::addPackageTxs(int& nPackagesSelected, int& nDescendantsUpdated, const CBlockIndex* const pindexPrev)
|
||||
{
|
||||
AssertLockHeld(m_mempool.cs);
|
||||
|
||||
@ -555,7 +561,7 @@ void BlockAssembler::addPackageTxs(int &nPackagesSelected, int &nDescendantsUpda
|
||||
std::vector<CTxMemPool::txiter> sortedEntries;
|
||||
SortForBlock(ancestors, sortedEntries);
|
||||
|
||||
for (size_t i=0; i<sortedEntries.size(); ++i) {
|
||||
for (size_t i = 0; i < sortedEntries.size(); ++i) {
|
||||
AddToBlock(sortedEntries[i]);
|
||||
// Erase from the modified set, if present
|
||||
mapModifiedTx.erase(sortedEntries[i]);
|
||||
@ -572,13 +578,12 @@ void IncrementExtraNonce(CBlock* pblock, const CBlockIndex* pindexPrev, unsigned
|
||||
{
|
||||
// Update nExtraNonce
|
||||
static uint256 hashPrevBlock;
|
||||
if (hashPrevBlock != pblock->hashPrevBlock)
|
||||
{
|
||||
if (hashPrevBlock != pblock->hashPrevBlock) {
|
||||
nExtraNonce = 0;
|
||||
hashPrevBlock = pblock->hashPrevBlock;
|
||||
}
|
||||
++nExtraNonce;
|
||||
unsigned int nHeight = pindexPrev->nHeight+1; // Height first in coinbase required for block.version=2
|
||||
unsigned int nHeight = pindexPrev->nHeight + 1; // Height first in coinbase required for block.version=2
|
||||
CMutableTransaction txCoinbase(*pblock->vtx[0]);
|
||||
txCoinbase.vin[0].scriptSig = (CScript() << nHeight << CScriptNum(nExtraNonce));
|
||||
assert(txCoinbase.vin[0].scriptSig.size() <= 100);
|
@ -3,8 +3,8 @@
|
||||
// Distributed under the MIT software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
#ifndef BITCOIN_MINER_H
|
||||
#define BITCOIN_MINER_H
|
||||
#ifndef BITCOIN_NODE_MINER_H
|
||||
#define BITCOIN_NODE_MINER_H
|
||||
|
||||
#include <primitives/block.h>
|
||||
#include <txmempool.h>
|
||||
@ -99,10 +99,11 @@ struct modifiedentry_iter {
|
||||
// This is sufficient to sort an ancestor package in an order that is valid
|
||||
// to appear in a block.
|
||||
struct CompareTxIterByAncestorCount {
|
||||
bool operator()(const CTxMemPool::txiter &a, const CTxMemPool::txiter &b) const
|
||||
bool operator()(const CTxMemPool::txiter& a, const CTxMemPool::txiter& b) const
|
||||
{
|
||||
if (a->GetCountWithAncestors() != b->GetCountWithAncestors())
|
||||
if (a->GetCountWithAncestors() != b->GetCountWithAncestors()) {
|
||||
return a->GetCountWithAncestors() < b->GetCountWithAncestors();
|
||||
}
|
||||
return CompareIteratorByHash()(a, b);
|
||||
}
|
||||
};
|
||||
@ -162,7 +163,7 @@ private:
|
||||
|
||||
// Chain context for the block
|
||||
int nHeight;
|
||||
int64_t nLockTimeCutoff;
|
||||
int64_t m_lock_time_cutoff;
|
||||
|
||||
BlockManager& m_blockman;
|
||||
CCreditPoolManager& m_cpoolman;
|
||||
@ -234,4 +235,4 @@ private:
|
||||
void IncrementExtraNonce(CBlock* pblock, const CBlockIndex* pindexPrev, unsigned int& nExtraNonce);
|
||||
int64_t UpdateTime(CBlockHeader* pblock, const Consensus::Params& consensusParams, const CBlockIndex* pindexPrev);
|
||||
|
||||
#endif // BITCOIN_MINER_H
|
||||
#endif // BITCOIN_NODE_MINER_H
|
@ -6,7 +6,7 @@
|
||||
#ifndef BITCOIN_POLICY_FEERATE_H
|
||||
#define BITCOIN_POLICY_FEERATE_H
|
||||
|
||||
#include <amount.h>
|
||||
#include <consensus/amount.h>
|
||||
#include <serialize.h>
|
||||
|
||||
#include <string>
|
||||
|
@ -5,7 +5,7 @@
|
||||
#ifndef BITCOIN_POLICY_FEES_H
|
||||
#define BITCOIN_POLICY_FEES_H
|
||||
|
||||
#include <amount.h>
|
||||
#include <consensus/amount.h>
|
||||
#include <policy/feerate.h>
|
||||
#include <uint256.h>
|
||||
#include <random.h>
|
||||
|
@ -66,8 +66,7 @@ static constexpr unsigned int STANDARD_SCRIPT_VERIFY_FLAGS = MANDATORY_SCRIPT_VE
|
||||
static constexpr unsigned int STANDARD_NOT_MANDATORY_VERIFY_FLAGS = STANDARD_SCRIPT_VERIFY_FLAGS & ~MANDATORY_SCRIPT_VERIFY_FLAGS;
|
||||
|
||||
/** Used as the flags parameter to sequence and nLocktime checks in non-consensus code. */
|
||||
static constexpr unsigned int STANDARD_LOCKTIME_VERIFY_FLAGS = LOCKTIME_VERIFY_SEQUENCE |
|
||||
LOCKTIME_MEDIAN_TIME_PAST;
|
||||
static constexpr unsigned int STANDARD_LOCKTIME_VERIFY_FLAGS = LOCKTIME_VERIFY_SEQUENCE;
|
||||
|
||||
CAmount GetDustThreshold(const CTxOut& txout, const CFeeRate& dustRelayFee);
|
||||
|
||||
|
@ -5,6 +5,7 @@
|
||||
|
||||
#include <primitives/transaction.h>
|
||||
|
||||
#include <consensus/amount.h>
|
||||
#include <hash.h>
|
||||
#include <tinyformat.h>
|
||||
#include <util/strencodings.h>
|
||||
|
@ -6,7 +6,7 @@
|
||||
#ifndef BITCOIN_PRIMITIVES_TRANSACTION_H
|
||||
#define BITCOIN_PRIMITIVES_TRANSACTION_H
|
||||
|
||||
#include <amount.h>
|
||||
#include <consensus/amount.h>
|
||||
#include <script/script.h>
|
||||
#include <serialize.h>
|
||||
#include <uint256.h>
|
||||
|
@ -5,7 +5,7 @@
|
||||
#ifndef BITCOIN_QT_BITCOINAMOUNTFIELD_H
|
||||
#define BITCOIN_QT_BITCOINAMOUNTFIELD_H
|
||||
|
||||
#include <amount.h>
|
||||
#include <consensus/amount.h>
|
||||
|
||||
#include <QValidator>
|
||||
#include <QWidget>
|
||||
|
@ -11,7 +11,7 @@
|
||||
|
||||
#include <qt/optionsdialog.h>
|
||||
|
||||
#include <amount.h>
|
||||
#include <consensus/amount.h>
|
||||
|
||||
#include <QLabel>
|
||||
#include <QMainWindow>
|
||||
|
@ -6,6 +6,8 @@
|
||||
#include <qt/bitcoinunits.h>
|
||||
#include <chainparams.h>
|
||||
|
||||
#include <consensus/amount.h>
|
||||
|
||||
#include <QSettings>
|
||||
#include <QStringList>
|
||||
|
||||
|
@ -6,7 +6,7 @@
|
||||
#ifndef BITCOIN_QT_BITCOINUNITS_H
|
||||
#define BITCOIN_QT_BITCOINUNITS_H
|
||||
|
||||
#include <amount.h>
|
||||
#include <consensus/amount.h>
|
||||
|
||||
#include <QAbstractListModel>
|
||||
#include <QString>
|
||||
|
@ -5,7 +5,7 @@
|
||||
#ifndef BITCOIN_QT_COINCONTROLDIALOG_H
|
||||
#define BITCOIN_QT_COINCONTROLDIALOG_H
|
||||
|
||||
#include <amount.h>
|
||||
#include <consensus/amount.h>
|
||||
|
||||
#include <QAbstractButton>
|
||||
#include <QAction>
|
||||
|
@ -5,7 +5,7 @@
|
||||
#ifndef BITCOIN_QT_GUIUTIL_H
|
||||
#define BITCOIN_QT_GUIUTIL_H
|
||||
|
||||
#include <amount.h>
|
||||
#include <consensus/amount.h>
|
||||
#include <fs.h>
|
||||
#include <qt/guiconstants.h>
|
||||
#include <net.h>
|
||||
|
@ -5,7 +5,6 @@
|
||||
#ifndef BITCOIN_QT_OPTIONSMODEL_H
|
||||
#define BITCOIN_QT_OPTIONSMODEL_H
|
||||
|
||||
#include <amount.h>
|
||||
#include <qt/guiconstants.h>
|
||||
|
||||
#include <cstdint>
|
||||
|
@ -9,7 +9,7 @@
|
||||
#include <config/bitcoin-config.h>
|
||||
#endif
|
||||
|
||||
#include <amount.h>
|
||||
#include <consensus/amount.h>
|
||||
#include <serialize.h>
|
||||
|
||||
#include <string>
|
||||
|
@ -5,7 +5,7 @@
|
||||
#ifndef BITCOIN_QT_TRANSACTIONFILTERPROXY_H
|
||||
#define BITCOIN_QT_TRANSACTIONFILTERPROXY_H
|
||||
|
||||
#include <amount.h>
|
||||
#include <consensus/amount.h>
|
||||
|
||||
#include <QDateTime>
|
||||
#include <QSortFilterProxyModel>
|
||||
|
@ -5,7 +5,7 @@
|
||||
#ifndef BITCOIN_QT_TRANSACTIONRECORD_H
|
||||
#define BITCOIN_QT_TRANSACTIONRECORD_H
|
||||
|
||||
#include <amount.h>
|
||||
#include <consensus/amount.h>
|
||||
#include <uint256.h>
|
||||
#include <key_io.h>
|
||||
|
||||
|
@ -8,7 +8,7 @@
|
||||
#include <primitives/transaction.h>
|
||||
#include <qt/sendcoinsrecipient.h>
|
||||
|
||||
#include <amount.h>
|
||||
#include <consensus/amount.h>
|
||||
|
||||
#include <QObject>
|
||||
|
||||
|
@ -5,7 +5,7 @@
|
||||
#ifndef BITCOIN_QT_WALLETVIEW_H
|
||||
#define BITCOIN_QT_WALLETVIEW_H
|
||||
|
||||
#include <amount.h>
|
||||
#include <consensus/amount.h>
|
||||
#include <qt/governancelist.h>
|
||||
#include <qt/masternodelist.h>
|
||||
|
||||
|
@ -6,11 +6,11 @@
|
||||
|
||||
#include <rpc/blockchain.h>
|
||||
|
||||
#include <amount.h>
|
||||
#include <blockfilter.h>
|
||||
#include <chain.h>
|
||||
#include <chainparams.h>
|
||||
#include <coins.h>
|
||||
#include <consensus/amount.h>
|
||||
#include <core_io.h>
|
||||
#include <consensus/params.h>
|
||||
#include <consensus/validation.h>
|
||||
@ -2905,7 +2905,7 @@ static RPCHelpMan getblockfilter()
|
||||
"\nRetrieve a BIP 157 content filter for a particular block.\n",
|
||||
{
|
||||
{"blockhash", RPCArg::Type::STR, RPCArg::Optional::NO, "The hash of the block"},
|
||||
{"filtertype", RPCArg::Type::STR, RPCArg::Default{"basic"}, "The type name of the filter"},
|
||||
{"filtertype", RPCArg::Type::STR, RPCArg::Default{BlockFilterTypeName(BlockFilterType::BASIC_FILTER)}, "The type name of the filter"},
|
||||
},
|
||||
RPCResult{
|
||||
RPCResult::Type::OBJ, "", "",
|
||||
@ -2920,7 +2920,7 @@ static RPCHelpMan getblockfilter()
|
||||
[&](const RPCHelpMan& self, const JSONRPCRequest& request) -> UniValue
|
||||
{
|
||||
uint256 block_hash(ParseHashV(request.params[0], "blockhash"));
|
||||
std::string filtertype_name = "basic";
|
||||
std::string filtertype_name = BlockFilterTypeName(BlockFilterType::BASIC_FILTER);
|
||||
if (!request.params[1].isNull()) {
|
||||
filtertype_name = request.params[1].get_str();
|
||||
}
|
||||
|
@ -5,7 +5,7 @@
|
||||
#ifndef BITCOIN_RPC_BLOCKCHAIN_H
|
||||
#define BITCOIN_RPC_BLOCKCHAIN_H
|
||||
|
||||
#include <amount.h>
|
||||
#include <consensus/amount.h>
|
||||
#include <core_io.h>
|
||||
#include <streams.h>
|
||||
#include <sync.h>
|
||||
|
@ -6,15 +6,15 @@
|
||||
#ifndef BITCOIN_RPC_INDEX_UTIL_H
|
||||
#define BITCOIN_RPC_INDEX_UTIL_H
|
||||
|
||||
#include <cstdint>
|
||||
#include <vector>
|
||||
|
||||
#include <amount.h>
|
||||
#include <consensus/amount.h>
|
||||
#include <addressindex.h>
|
||||
#include <spentindex.h>
|
||||
#include <sync.h>
|
||||
#include <threadsafety.h>
|
||||
|
||||
#include <cstdint>
|
||||
#include <vector>
|
||||
|
||||
class CBlockTreeDB;
|
||||
class CTxMemPool;
|
||||
class uint160;
|
||||
|
@ -4,9 +4,9 @@
|
||||
// Distributed under the MIT software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
#include <amount.h>
|
||||
#include <chain.h>
|
||||
#include <chainparams.h>
|
||||
#include <consensus/amount.h>
|
||||
#include <consensus/consensus.h>
|
||||
#include <consensus/params.h>
|
||||
#include <consensus/validation.h>
|
||||
@ -19,9 +19,9 @@
|
||||
#include <llmq/chainlocks.h>
|
||||
#include <llmq/instantsend.h>
|
||||
#include <evo/evodb.h>
|
||||
#include <miner.h>
|
||||
#include <net.h>
|
||||
#include <node/context.h>
|
||||
#include <node/miner.h>
|
||||
#include <policy/fees.h>
|
||||
#include <pow.h>
|
||||
#include <rpc/blockchain.h>
|
||||
|
@ -7,6 +7,7 @@
|
||||
#include <chain.h>
|
||||
#include <chainparams.h>
|
||||
#include <coins.h>
|
||||
#include <consensus/amount.h>
|
||||
#include <consensus/tx_verify.h>
|
||||
#include <consensus/validation.h>
|
||||
#include <core_io.h>
|
||||
|
@ -6,6 +6,7 @@
|
||||
#include <rpc/rawtransaction_util.h>
|
||||
|
||||
#include <coins.h>
|
||||
#include <consensus/amount.h>
|
||||
#include <core_io.h>
|
||||
#include <interfaces/chain.h>
|
||||
#include <key_io.h>
|
||||
|
@ -6,7 +6,6 @@
|
||||
#ifndef BITCOIN_RPC_SERVER_H
|
||||
#define BITCOIN_RPC_SERVER_H
|
||||
|
||||
#include <amount.h>
|
||||
#include <rpc/request.h>
|
||||
#include <rpc/util.h>
|
||||
|
||||
|
@ -3,6 +3,7 @@
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
#include <chainparamsbase.h>
|
||||
#include <consensus/amount.h>
|
||||
#include <key_io.h>
|
||||
#include <outputtype.h>
|
||||
#include <pubkey.h>
|
||||
|
@ -5,6 +5,7 @@
|
||||
|
||||
#include <script/sign.h>
|
||||
|
||||
#include <consensus/amount.h>
|
||||
#include <key.h>
|
||||
#include <policy/policy.h>
|
||||
#include <primitives/transaction.h>
|
||||
|
@ -9,7 +9,7 @@
|
||||
#define BITCOIN_SPENTINDEX_H
|
||||
|
||||
#include <addressindex.h>
|
||||
#include <amount.h>
|
||||
#include <consensus/amount.h>
|
||||
#include <script/script.h>
|
||||
#include <serialize.h>
|
||||
#include <uint256.h>
|
||||
|
@ -2,7 +2,7 @@
|
||||
// Distributed under the MIT software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
#include <amount.h>
|
||||
#include <consensus/amount.h>
|
||||
#include <policy/feerate.h>
|
||||
|
||||
#include <limits>
|
||||
|
@ -9,8 +9,8 @@
|
||||
#include <consensus/validation.h>
|
||||
#include <deploymentstatus.h>
|
||||
#include <messagesigner.h>
|
||||
#include <miner.h>
|
||||
#include <netbase.h>
|
||||
#include <node/miner.h>
|
||||
#include <script/interpreter.h>
|
||||
#include <script/sign.h>
|
||||
#include <script/signingprovider.h>
|
||||
|
@ -6,7 +6,7 @@
|
||||
#include <chainparams.h>
|
||||
#include <consensus/validation.h>
|
||||
#include <index/blockfilterindex.h>
|
||||
#include <miner.h>
|
||||
#include <node/miner.h>
|
||||
#include <pow.h>
|
||||
#include <script/standard.h>
|
||||
#include <spork.h>
|
||||
|
@ -2,9 +2,9 @@
|
||||
// Distributed under the MIT software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
#include <bloom.h>
|
||||
#include <bls/bls.h>
|
||||
#include <clientversion.h>
|
||||
#include <common/bloom.h>
|
||||
#include <key.h>
|
||||
#include <key_io.h>
|
||||
#include <merkleblock.h>
|
||||
|
@ -7,7 +7,7 @@
|
||||
#include <chainparams.h>
|
||||
#include <consensus/validation.h>
|
||||
#include <deploymentstatus.h>
|
||||
#include <miner.h>
|
||||
#include <node/miner.h>
|
||||
#include <script/interpreter.h>
|
||||
#include <spork.h>
|
||||
#include <validation.h>
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
#include <test/util/setup_common.h>
|
||||
|
||||
#include <amount.h>
|
||||
#include <consensus/amount.h>
|
||||
#include <consensus/tx_check.h>
|
||||
#include <consensus/validation.h>
|
||||
#include <evo/assetlocktx.h>
|
||||
|
@ -2,7 +2,7 @@
|
||||
// Distributed under the MIT software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
#include <bloom.h>
|
||||
#include <common/bloom.h>
|
||||
#include <primitives/transaction.h>
|
||||
#include <test/fuzz/FuzzedDataProvider.h>
|
||||
#include <test/fuzz/fuzz.h>
|
||||
|
@ -2,10 +2,10 @@
|
||||
// Distributed under the MIT software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
#include <amount.h>
|
||||
#include <chainparams.h>
|
||||
#include <chainparamsbase.h>
|
||||
#include <coins.h>
|
||||
#include <consensus/amount.h>
|
||||
#include <consensus/tx_check.h>
|
||||
#include <consensus/tx_verify.h>
|
||||
#include <consensus/validation.h>
|
||||
|
@ -2,7 +2,7 @@
|
||||
// Distributed under the MIT software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
#include <amount.h>
|
||||
#include <consensus/amount.h>
|
||||
#include <policy/feerate.h>
|
||||
#include <test/fuzz/FuzzedDataProvider.h>
|
||||
#include <test/fuzz/fuzz.h>
|
||||
|
@ -2,7 +2,7 @@
|
||||
// Distributed under the MIT software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
#include <amount.h>
|
||||
#include <consensus/amount.h>
|
||||
#include <policy/fees.h>
|
||||
#include <test/fuzz/FuzzedDataProvider.h>
|
||||
#include <test/fuzz/fuzz.h>
|
||||
|
@ -5,6 +5,7 @@
|
||||
#include <arith_uint256.h>
|
||||
#include <chainparams.h>
|
||||
#include <compressor.h>
|
||||
#include <consensus/amount.h>
|
||||
#include <consensus/merkle.h>
|
||||
#include <core_io.h>
|
||||
#include <crypto/common.h>
|
||||
|
@ -2,7 +2,7 @@
|
||||
// Distributed under the MIT software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
#include <bloom.h>
|
||||
#include <common/bloom.h>
|
||||
#include <test/fuzz/FuzzedDataProvider.h>
|
||||
#include <test/fuzz/fuzz.h>
|
||||
#include <test/fuzz/util.h>
|
||||
|
@ -2,6 +2,7 @@
|
||||
// Distributed under the MIT software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
#include <consensus/amount.h>
|
||||
#include <pubkey.h>
|
||||
#include <script/interpreter.h>
|
||||
#include <streams.h>
|
||||
|
@ -3,7 +3,7 @@
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
#include <consensus/validation.h>
|
||||
#include <miner.h>
|
||||
#include <node/miner.h>
|
||||
#include <test/fuzz/FuzzedDataProvider.h>
|
||||
#include <test/fuzz/fuzz.h>
|
||||
#include <test/fuzz/util.h>
|
||||
|
@ -5,12 +5,12 @@
|
||||
#ifndef BITCOIN_TEST_FUZZ_UTIL_H
|
||||
#define BITCOIN_TEST_FUZZ_UTIL_H
|
||||
|
||||
#include <amount.h>
|
||||
#include <arith_uint256.h>
|
||||
#include <attributes.h>
|
||||
#include <chainparamsbase.h>
|
||||
#include <coins.h>
|
||||
#include <compat.h>
|
||||
#include <consensus/amount.h>
|
||||
#include <consensus/consensus.h>
|
||||
#include <key.h>
|
||||
#include <merkleblock.h>
|
||||
|
@ -13,7 +13,7 @@
|
||||
#include <llmq/chainlocks.h>
|
||||
#include <llmq/context.h>
|
||||
#include <llmq/instantsend.h>
|
||||
#include <miner.h>
|
||||
#include <node/miner.h>
|
||||
#include <policy/policy.h>
|
||||
#include <pow.h>
|
||||
#include <script/standard.h>
|
||||
@ -34,10 +34,10 @@
|
||||
namespace miner_tests {
|
||||
struct MinerTestingSetup : public TestingSetup {
|
||||
void TestPackageSelection(const CChainParams& chainparams, const CScript& scriptPubKey, const std::vector<CTransactionRef>& txFirst) EXCLUSIVE_LOCKS_REQUIRED(::cs_main, m_node.mempool->cs);
|
||||
bool TestSequenceLocks(const CTransaction& tx, int flags) EXCLUSIVE_LOCKS_REQUIRED(::cs_main, m_node.mempool->cs)
|
||||
bool TestSequenceLocks(const CTransaction& tx) EXCLUSIVE_LOCKS_REQUIRED(::cs_main, m_node.mempool->cs)
|
||||
{
|
||||
CCoinsViewMemPool view_mempool(&m_node.chainman->ActiveChainstate().CoinsTip(), *m_node.mempool);
|
||||
return CheckSequenceLocks(m_node.chainman->ActiveChain().Tip(), view_mempool, tx, flags);
|
||||
return CheckSequenceLocksAtTip(m_node.chainman->ActiveChain().Tip(), view_mempool, tx);
|
||||
}
|
||||
BlockAssembler AssemblerForTest(const CChainParams& params);
|
||||
};
|
||||
@ -428,8 +428,8 @@ BOOST_AUTO_TEST_CASE(CreateNewBlock_validity)
|
||||
// }
|
||||
|
||||
// non-final txs in mempool
|
||||
SetMockTime(m_node.chainman->ActiveChain().Tip()->GetMedianTimePast()+1);
|
||||
int flags = LOCKTIME_VERIFY_SEQUENCE|LOCKTIME_MEDIAN_TIME_PAST;
|
||||
SetMockTime(m_node.chainman->ActiveChain().Tip()->GetMedianTimePast() + 1);
|
||||
const int flags{LOCKTIME_VERIFY_SEQUENCE};
|
||||
// height map
|
||||
std::vector<int> prevheights;
|
||||
|
||||
@ -448,8 +448,8 @@ BOOST_AUTO_TEST_CASE(CreateNewBlock_validity)
|
||||
tx.nLockTime = 0;
|
||||
hash = tx.GetHash();
|
||||
m_node.mempool->addUnchecked(entry.Fee(HIGHFEE).Time(GetTime()).SpendsCoinbase(true).FromTx(tx));
|
||||
BOOST_CHECK(CheckFinalTx(m_node.chainman->ActiveChain().Tip(), CTransaction(tx), flags)); // Locktime passes
|
||||
BOOST_CHECK(!TestSequenceLocks(CTransaction(tx), flags)); // Sequence locks fail
|
||||
BOOST_CHECK(CheckFinalTxAtTip(m_node.chainman->ActiveChain().Tip(), CTransaction{tx})); // Locktime passes
|
||||
BOOST_CHECK(!TestSequenceLocks(CTransaction{tx})); // Sequence locks fail
|
||||
|
||||
{
|
||||
CBlockIndex* active_chain_tip = m_node.chainman->ActiveChain().Tip();
|
||||
@ -462,8 +462,8 @@ BOOST_AUTO_TEST_CASE(CreateNewBlock_validity)
|
||||
prevheights[0] = baseheight + 2;
|
||||
hash = tx.GetHash();
|
||||
m_node.mempool->addUnchecked(entry.Time(GetTime()).FromTx(tx));
|
||||
BOOST_CHECK(CheckFinalTx(m_node.chainman->ActiveChain().Tip(), CTransaction(tx), flags)); // Locktime passes
|
||||
BOOST_CHECK(!TestSequenceLocks(CTransaction(tx), flags)); // Sequence locks fail
|
||||
BOOST_CHECK(CheckFinalTxAtTip(m_node.chainman->ActiveChain().Tip(), CTransaction{tx})); // Locktime passes
|
||||
BOOST_CHECK(!TestSequenceLocks(CTransaction{tx})); // Sequence locks fail
|
||||
|
||||
for (int i = 0; i < CBlockIndex::nMedianTimeSpan; i++)
|
||||
m_node.chainman->ActiveChain().Tip()->GetAncestor(m_node.chainman->ActiveChain().Tip()->nHeight - i)->nTime += 512; //Trick the MedianTimePast
|
||||
@ -483,8 +483,8 @@ BOOST_AUTO_TEST_CASE(CreateNewBlock_validity)
|
||||
tx.nLockTime = m_node.chainman->ActiveChain().Tip()->nHeight + 1;
|
||||
hash = tx.GetHash();
|
||||
m_node.mempool->addUnchecked(entry.Time(GetTime()).FromTx(tx));
|
||||
BOOST_CHECK(!CheckFinalTx(m_node.chainman->ActiveChain().Tip(), CTransaction(tx), flags)); // Locktime fails
|
||||
BOOST_CHECK(TestSequenceLocks(CTransaction(tx), flags)); // Sequence locks pass
|
||||
BOOST_CHECK(!CheckFinalTxAtTip(m_node.chainman->ActiveChain().Tip(), CTransaction{tx})); // Locktime fails
|
||||
BOOST_CHECK(TestSequenceLocks(CTransaction{tx})); // Sequence locks pass
|
||||
BOOST_CHECK(IsFinalTx(CTransaction(tx), m_node.chainman->ActiveChain().Tip()->nHeight + 2, m_node.chainman->ActiveChain().Tip()->GetMedianTimePast())); // Locktime passes on 2nd block
|
||||
|
||||
// absolute time locked
|
||||
@ -494,8 +494,8 @@ BOOST_AUTO_TEST_CASE(CreateNewBlock_validity)
|
||||
prevheights[0] = baseheight + 4;
|
||||
hash = tx.GetHash();
|
||||
m_node.mempool->addUnchecked(entry.Time(GetTime()).FromTx(tx));
|
||||
BOOST_CHECK(!CheckFinalTx(m_node.chainman->ActiveChain().Tip(), CTransaction(tx), flags)); // Locktime fails
|
||||
BOOST_CHECK(TestSequenceLocks(CTransaction(tx), flags)); // Sequence locks pass
|
||||
BOOST_CHECK(!CheckFinalTxAtTip(m_node.chainman->ActiveChain().Tip(), CTransaction{tx})); // Locktime fails
|
||||
BOOST_CHECK(TestSequenceLocks(CTransaction{tx})); // Sequence locks pass
|
||||
BOOST_CHECK(IsFinalTx(CTransaction(tx), m_node.chainman->ActiveChain().Tip()->nHeight + 2, m_node.chainman->ActiveChain().Tip()->GetMedianTimePast() + 1)); // Locktime passes 1 second later
|
||||
|
||||
// mempool-dependent transactions (not added)
|
||||
@ -503,14 +503,14 @@ BOOST_AUTO_TEST_CASE(CreateNewBlock_validity)
|
||||
prevheights[0] = m_node.chainman->ActiveChain().Tip()->nHeight + 1;
|
||||
tx.nLockTime = 0;
|
||||
tx.vin[0].nSequence = 0;
|
||||
BOOST_CHECK(CheckFinalTx(m_node.chainman->ActiveChain().Tip(), CTransaction(tx), flags)); // Locktime passes
|
||||
BOOST_CHECK(TestSequenceLocks(CTransaction(tx), flags)); // Sequence locks pass
|
||||
BOOST_CHECK(CheckFinalTxAtTip(m_node.chainman->ActiveChain().Tip(), CTransaction{tx})); // Locktime passes
|
||||
BOOST_CHECK(TestSequenceLocks(CTransaction{tx})); // Sequence locks pass
|
||||
tx.vin[0].nSequence = 1;
|
||||
BOOST_CHECK(!TestSequenceLocks(CTransaction(tx), flags)); // Sequence locks fail
|
||||
BOOST_CHECK(!TestSequenceLocks(CTransaction{tx})); // Sequence locks fail
|
||||
tx.vin[0].nSequence = CTxIn::SEQUENCE_LOCKTIME_TYPE_FLAG;
|
||||
BOOST_CHECK(TestSequenceLocks(CTransaction(tx), flags)); // Sequence locks pass
|
||||
BOOST_CHECK(TestSequenceLocks(CTransaction{tx})); // Sequence locks pass
|
||||
tx.vin[0].nSequence = CTxIn::SEQUENCE_LOCKTIME_TYPE_FLAG | 1;
|
||||
BOOST_CHECK(!TestSequenceLocks(CTransaction(tx), flags)); // Sequence locks fail
|
||||
BOOST_CHECK(!TestSequenceLocks(CTransaction{tx})); // Sequence locks fail
|
||||
|
||||
BOOST_CHECK(pblocktemplate = AssemblerForTest(chainparams).CreateNewBlock(scriptPubKey));
|
||||
|
||||
|
@ -197,7 +197,9 @@ BOOST_AUTO_TEST_CASE(streams_serializedata_xor)
|
||||
|
||||
BOOST_AUTO_TEST_CASE(streams_buffered_file)
|
||||
{
|
||||
FILE* file = fsbridge::fopen("streams_test_tmp", "w+b");
|
||||
fs::path streams_test_filename = m_args.GetDataDirBase() / "streams_test_tmp";
|
||||
FILE* file = fsbridge::fopen(streams_test_filename, "w+b");
|
||||
|
||||
// The value at each offset is the offset.
|
||||
for (uint8_t j = 0; j < 40; ++j) {
|
||||
fwrite(&j, 1, 1, file);
|
||||
@ -325,7 +327,7 @@ BOOST_AUTO_TEST_CASE(streams_buffered_file)
|
||||
// We can explicitly close the file, or the destructor will do it.
|
||||
bf.fclose();
|
||||
|
||||
fs::remove("streams_test_tmp");
|
||||
fs::remove(streams_test_filename);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(streams_buffered_file_skip)
|
||||
@ -382,8 +384,9 @@ BOOST_AUTO_TEST_CASE(streams_buffered_file_rand)
|
||||
// Make this test deterministic.
|
||||
SeedInsecureRand(SeedRand::ZEROS);
|
||||
|
||||
fs::path streams_test_filename = m_args.GetDataDirBase() / "streams_test_tmp";
|
||||
for (int rep = 0; rep < 50; ++rep) {
|
||||
FILE* file = fsbridge::fopen("streams_test_tmp", "w+b");
|
||||
FILE* file = fsbridge::fopen(streams_test_filename, "w+b");
|
||||
size_t fileSize = InsecureRandRange(256);
|
||||
for (uint8_t i = 0; i < fileSize; ++i) {
|
||||
fwrite(&i, 1, 1, file);
|
||||
@ -494,7 +497,7 @@ BOOST_AUTO_TEST_CASE(streams_buffered_file_rand)
|
||||
maxPos = currentPos;
|
||||
}
|
||||
}
|
||||
fs::remove("streams_test_tmp");
|
||||
fs::remove(streams_test_filename);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(streams_hashed)
|
||||
|
@ -8,8 +8,8 @@
|
||||
#include <consensus/merkle.h>
|
||||
#include <evo/evodb.h>
|
||||
#include <key_io.h>
|
||||
#include <miner.h>
|
||||
#include <node/context.h>
|
||||
#include <node/miner.h>
|
||||
#include <pow.h>
|
||||
#include <script/standard.h>
|
||||
#include <spork.h>
|
||||
|
@ -27,10 +27,10 @@
|
||||
#include <llmq/snapshot.h>
|
||||
#include <masternode/meta.h>
|
||||
#include <masternode/sync.h>
|
||||
#include <miner.h>
|
||||
#include <net.h>
|
||||
#include <net_processing.h>
|
||||
#include <noui.h>
|
||||
#include <node/miner.h>
|
||||
#include <policy/fees.h>
|
||||
#include <pow.h>
|
||||
#include <rpc/blockchain.h>
|
||||
|
@ -8,7 +8,7 @@
|
||||
#include <consensus/consensus.h>
|
||||
#include <consensus/merkle.h>
|
||||
#include <consensus/validation.h>
|
||||
#include <miner.h>
|
||||
#include <node/miner.h>
|
||||
#include <pow.h>
|
||||
#include <random.h>
|
||||
#include <script/standard.h>
|
||||
|
@ -2,6 +2,7 @@
|
||||
// Distributed under the MIT software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
#include <consensus/amount.h>
|
||||
#include <net.h>
|
||||
#include <uint256.h>
|
||||
#include <validation.h>
|
||||
|
@ -15,17 +15,17 @@
|
||||
#include <vector>
|
||||
|
||||
#include <addressindex.h>
|
||||
#include <spentindex.h>
|
||||
#include <amount.h>
|
||||
#include <coins.h>
|
||||
#include <consensus/amount.h>
|
||||
#include <gsl/pointers.h>
|
||||
#include <indirectmap.h>
|
||||
#include <netaddress.h>
|
||||
#include <policy/feerate.h>
|
||||
#include <policy/packages.h>
|
||||
#include <primitives/transaction.h>
|
||||
#include <random.h>
|
||||
#include <netaddress.h>
|
||||
#include <pubkey.h>
|
||||
#include <random.h>
|
||||
#include <spentindex.h>
|
||||
#include <sync.h>
|
||||
#include <util/epochguard.h>
|
||||
#include <util/hasher.h>
|
||||
|
@ -5,7 +5,7 @@
|
||||
|
||||
#include <util/moneystr.h>
|
||||
|
||||
#include <amount.h>
|
||||
#include <consensus/amount.h>
|
||||
#include <tinyformat.h>
|
||||
#include <util/strencodings.h>
|
||||
#include <util/string.h>
|
||||
|
@ -9,8 +9,8 @@
|
||||
#ifndef BITCOIN_UTIL_MONEYSTR_H
|
||||
#define BITCOIN_UTIL_MONEYSTR_H
|
||||
|
||||
#include <amount.h>
|
||||
#include <attributes.h>
|
||||
#include <consensus/amount.h>
|
||||
|
||||
#include <optional>
|
||||
#include <string>
|
||||
|
@ -18,12 +18,12 @@
|
||||
#include <attributes.h>
|
||||
#include <compat.h>
|
||||
#include <compat/assumptions.h>
|
||||
#include <consensus/amount.h>
|
||||
#include <fs.h>
|
||||
#include <logging.h>
|
||||
#include <sync.h>
|
||||
#include <util/settings.h>
|
||||
#include <util/time.h>
|
||||
#include <amount.h>
|
||||
|
||||
#include <exception>
|
||||
#include <map>
|
||||
|
@ -10,6 +10,7 @@
|
||||
#include <chain.h>
|
||||
#include <chainparams.h>
|
||||
#include <checkqueue.h>
|
||||
#include <consensus/amount.h>
|
||||
#include <consensus/consensus.h>
|
||||
#include <consensus/merkle.h>
|
||||
#include <consensus/tx_check.h>
|
||||
@ -144,20 +145,12 @@ const CBlockIndex* CChainState::FindForkInGlobalIndex(const CBlockLocator& locat
|
||||
|
||||
bool CheckInputScripts(const CTransaction& tx, TxValidationState &state, const CCoinsViewCache &inputs, unsigned int flags, bool cacheSigStore, bool cacheFullScriptStore, PrecomputedTransactionData& txdata, std::vector<CScriptCheck> *pvChecks = nullptr);
|
||||
|
||||
bool CheckFinalTx(const CBlockIndex* active_chain_tip, const CTransaction &tx, int flags)
|
||||
bool CheckFinalTxAtTip(const CBlockIndex* active_chain_tip, const CTransaction& tx)
|
||||
{
|
||||
AssertLockHeld(cs_main);
|
||||
assert(active_chain_tip); // TODO: Make active_chain_tip a reference
|
||||
|
||||
// By convention a negative value for flags indicates that the
|
||||
// current network-enforced consensus rules should be used. In
|
||||
// a future soft-fork scenario that would mean checking which
|
||||
// rules would be enforced for the next block and setting the
|
||||
// appropriate flags. At the present time no soft-forks are
|
||||
// scheduled, so no flags are set.
|
||||
flags = std::max(flags, 0);
|
||||
|
||||
// CheckFinalTx() uses active_chain_tip.Height()+1 to evaluate
|
||||
// CheckFinalTxAtTip() uses active_chain_tip.Height()+1 to evaluate
|
||||
// nLockTime because when IsFinalTx() is called within
|
||||
// AcceptBlock(), the height of the block *being*
|
||||
// evaluated is what is used. Thus if we want to know if a
|
||||
@ -169,18 +162,15 @@ bool CheckFinalTx(const CBlockIndex* active_chain_tip, const CTransaction &tx, i
|
||||
// less than the median time of the previous block they're contained in.
|
||||
// When the next block is created its previous block will be the current
|
||||
// chain tip, so we use that to calculate the median time passed to
|
||||
// IsFinalTx() if LOCKTIME_MEDIAN_TIME_PAST is set.
|
||||
const int64_t nBlockTime = (flags & LOCKTIME_MEDIAN_TIME_PAST)
|
||||
? active_chain_tip->GetMedianTimePast()
|
||||
: GetAdjustedTime();
|
||||
// IsFinalTx().
|
||||
const int64_t nBlockTime{active_chain_tip->GetMedianTimePast()};
|
||||
|
||||
return IsFinalTx(tx, nBlockHeight, nBlockTime);
|
||||
}
|
||||
|
||||
bool CheckSequenceLocks(CBlockIndex* tip,
|
||||
bool CheckSequenceLocksAtTip(CBlockIndex* tip,
|
||||
const CCoinsView& coins_view,
|
||||
const CTransaction& tx,
|
||||
int flags,
|
||||
LockPoints* lp,
|
||||
bool useExistingLockPoints)
|
||||
{
|
||||
@ -188,7 +178,7 @@ bool CheckSequenceLocks(CBlockIndex* tip,
|
||||
|
||||
CBlockIndex index;
|
||||
index.pprev = tip;
|
||||
// CheckSequenceLocks() uses active_chainstate.m_chain.Height()+1 to evaluate
|
||||
// CheckSequenceLocksAtTip() uses active_chainstate.m_chain.Height()+1 to evaluate
|
||||
// height based locks because when SequenceLocks() is called within
|
||||
// ConnectBlock(), the height of the block *being*
|
||||
// evaluated is what is used.
|
||||
@ -218,7 +208,7 @@ bool CheckSequenceLocks(CBlockIndex* tip,
|
||||
prevheights[txinIndex] = coin.nHeight;
|
||||
}
|
||||
}
|
||||
lockPair = CalculateSequenceLocks(tx, flags, prevheights, index);
|
||||
lockPair = CalculateSequenceLocks(tx, STANDARD_LOCKTIME_VERIFY_FLAGS, prevheights, index);
|
||||
if (lp) {
|
||||
lp->height = lockPair.first;
|
||||
lp->time = lockPair.second;
|
||||
@ -234,7 +224,7 @@ bool CheckSequenceLocks(CBlockIndex* tip,
|
||||
// lockPair from CalculateSequenceLocks against tip+1. We know
|
||||
// EvaluateSequenceLocks will fail if there was a non-zero sequence
|
||||
// lock on a mempool input, so we can use the return value of
|
||||
// CheckSequenceLocks to indicate the LockPoints validity
|
||||
// CheckSequenceLocksAtTip to indicate the LockPoints validity
|
||||
int maxInputHeight = 0;
|
||||
for (const int height : prevheights) {
|
||||
// Can ignore mempool inputs since we'll fail if they had non-zero locks
|
||||
@ -383,26 +373,26 @@ void CChainState::MaybeUpdateMempoolForReorg(
|
||||
// Also updates valid entries' cached LockPoints if needed.
|
||||
// If false, the tx is still valid and its lockpoints are updated.
|
||||
// If true, the tx would be invalid in the next block; remove this entry and all of its descendants.
|
||||
const auto filter_final_and_mature = [this, flags=STANDARD_LOCKTIME_VERIFY_FLAGS](CTxMemPool::txiter it)
|
||||
const auto filter_final_and_mature = [this](CTxMemPool::txiter it)
|
||||
EXCLUSIVE_LOCKS_REQUIRED(m_mempool->cs, ::cs_main) {
|
||||
AssertLockHeld(m_mempool->cs);
|
||||
AssertLockHeld(::cs_main);
|
||||
const CTransaction& tx = it->GetTx();
|
||||
|
||||
// The transaction must be final.
|
||||
if (!CheckFinalTx(m_chain.Tip(), tx, flags)) return true;
|
||||
if (!CheckFinalTxAtTip(m_chain.Tip(), tx)) return true;
|
||||
LockPoints lp = it->GetLockPoints();
|
||||
const bool validLP{TestLockPointValidity(m_chain, lp)};
|
||||
CCoinsViewMemPool view_mempool(&CoinsTip(), *m_mempool);
|
||||
// CheckSequenceLocks checks if the transaction will be final in the next block to be
|
||||
// CheckSequenceLocksAtTip checks if the transaction will be final in the next block to be
|
||||
// created on top of the new chain. We use useExistingLockPoints=false so that, instead of
|
||||
// using the information in lp (which might now refer to a block that no longer exists in
|
||||
// the chain), it will update lp to contain LockPoints relevant to the new chain.
|
||||
if (!CheckSequenceLocks(m_chain.Tip(), view_mempool, tx, flags, &lp, validLP)) {
|
||||
// If CheckSequenceLocks fails, remove the tx and don't depend on the LockPoints.
|
||||
if (!CheckSequenceLocksAtTip(m_chain.Tip(), view_mempool, tx, &lp, validLP)) {
|
||||
// If CheckSequenceLocksAtTip fails, remove the tx and don't depend on the LockPoints.
|
||||
return true;
|
||||
} else if (!validLP) {
|
||||
// If CheckSequenceLocks succeeded, it also updated the LockPoints.
|
||||
// If CheckSequenceLocksAtTip succeeded, it also updated the LockPoints.
|
||||
// Now update the mempool entry lockpoints as well.
|
||||
m_mempool->mapTx.modify(it, [&lp](CTxMemPoolEntry& e) { e.UpdateLockPoints(lp); });
|
||||
}
|
||||
@ -642,8 +632,9 @@ bool MemPoolAccept::PreChecks(ATMPArgs& args, Workspace& ws)
|
||||
// Only accept nLockTime-using transactions that can be mined in the next
|
||||
// block; we don't want our mempool filled up with transactions that can't
|
||||
// be mined yet.
|
||||
if (!CheckFinalTx(m_active_chainstate.m_chain.Tip(), tx, STANDARD_LOCKTIME_VERIFY_FLAGS))
|
||||
if (!CheckFinalTxAtTip(m_active_chainstate.m_chain.Tip(), tx)) {
|
||||
return state.Invalid(TxValidationResult::TX_PREMATURE_SPEND, "non-final");
|
||||
}
|
||||
|
||||
// is it already in the memory pool?
|
||||
if (m_pool.exists(hash)) {
|
||||
@ -719,8 +710,9 @@ bool MemPoolAccept::PreChecks(ATMPArgs& args, Workspace& ws)
|
||||
// be mined yet.
|
||||
// Pass in m_view which has all of the relevant inputs cached. Note that, since m_view's
|
||||
// backend was removed, it no longer pulls coins from the mempool.
|
||||
if (!CheckSequenceLocks(m_active_chainstate.m_chain.Tip(), m_view, tx, STANDARD_LOCKTIME_VERIFY_FLAGS, &lp))
|
||||
if (!CheckSequenceLocksAtTip(m_active_chainstate.m_chain.Tip(), m_view, tx, &lp)) {
|
||||
return state.Invalid(TxValidationResult::TX_PREMATURE_SPEND, "non-BIP68-final");
|
||||
}
|
||||
|
||||
// The mempool holds txs for the next block, so pass height+1 to CheckTxInputs
|
||||
if (!Consensus::CheckTxInputs(tx, state, m_view, m_active_chainstate.m_chain.Height() + 1, ws.m_base_fees)) {
|
||||
@ -3688,15 +3680,15 @@ static bool ContextualCheckBlock(const CBlock& block, BlockValidationState& stat
|
||||
const int nHeight = pindexPrev == nullptr ? 0 : pindexPrev->nHeight + 1;
|
||||
|
||||
// Enforce BIP113 (Median Time Past).
|
||||
int nLockTimeFlags = 0;
|
||||
bool enforce_locktime_median_time_past{false};
|
||||
if (DeploymentActiveAfter(pindexPrev, consensusParams, Consensus::DEPLOYMENT_CSV)) {
|
||||
assert(pindexPrev != nullptr);
|
||||
nLockTimeFlags |= LOCKTIME_MEDIAN_TIME_PAST;
|
||||
enforce_locktime_median_time_past = true;
|
||||
}
|
||||
|
||||
int64_t nLockTimeCutoff = (nLockTimeFlags & LOCKTIME_MEDIAN_TIME_PAST)
|
||||
? pindexPrev->GetMedianTimePast()
|
||||
: block.GetBlockTime();
|
||||
const int64_t nLockTimeCutoff{enforce_locktime_median_time_past ?
|
||||
pindexPrev->GetMedianTimePast() :
|
||||
block.GetBlockTime()};
|
||||
|
||||
bool fDIP0001Active_context = nHeight >= consensusParams.DIP0001Height;
|
||||
bool fDIP0003Active_context = nHeight >= consensusParams.DIP0003Height;
|
||||
|
@ -11,10 +11,10 @@
|
||||
#include <config/bitcoin-config.h>
|
||||
#endif
|
||||
|
||||
#include <amount.h>
|
||||
#include <arith_uint256.h>
|
||||
#include <attributes.h>
|
||||
#include <chain.h>
|
||||
#include <consensus/amount.h>
|
||||
#include <fs.h>
|
||||
#include <node/blockstorage.h>
|
||||
#include <policy/feerate.h>
|
||||
@ -275,16 +275,12 @@ bool GetUTXOCoin(CChainState& active_chainstate, const COutPoint& outpoint, Coin
|
||||
int GetUTXOHeight(CChainState& active_chainstate, const COutPoint& outpoint);
|
||||
int GetUTXOConfirmations(CChainState& active_chainstate, const COutPoint& outpoint);
|
||||
|
||||
/** Transaction validation functions */
|
||||
/* Transaction policy functions */
|
||||
|
||||
/**
|
||||
* Check if transaction will be final in the next block to be created.
|
||||
*
|
||||
* Calls IsFinalTx() with current block height and appropriate block time.
|
||||
*
|
||||
* See consensus/consensus.h for flag definitions.
|
||||
*/
|
||||
bool CheckFinalTx(const CBlockIndex* active_chain_tip, const CTransaction &tx, int flags = -1) EXCLUSIVE_LOCKS_REQUIRED(cs_main);
|
||||
bool CheckFinalTxAtTip(const CBlockIndex* active_chain_tip, const CTransaction& tx) EXCLUSIVE_LOCKS_REQUIRED(::cs_main);
|
||||
|
||||
/**
|
||||
* Check if transaction will be BIP68 final in the next block to be created on top of tip.
|
||||
@ -301,14 +297,11 @@ bool CheckFinalTx(const CBlockIndex* active_chain_tip, const CTransaction &tx, i
|
||||
* Optionally stores in LockPoints the resulting height and time calculated and the hash
|
||||
* of the block needed for calculation or skips the calculation and uses the LockPoints
|
||||
* passed in for evaluation.
|
||||
* The LockPoints should not be considered valid if CheckSequenceLocks returns false.
|
||||
*
|
||||
* See consensus/consensus.h for flag definitions.
|
||||
* The LockPoints should not be considered valid if CheckSequenceLocksAtTip returns false.
|
||||
*/
|
||||
bool CheckSequenceLocks(CBlockIndex* tip,
|
||||
bool CheckSequenceLocksAtTip(CBlockIndex* tip,
|
||||
const CCoinsView& coins_view,
|
||||
const CTransaction& tx,
|
||||
int flags,
|
||||
LockPoints* lp = nullptr,
|
||||
bool useExistingLockPoints = false);
|
||||
|
||||
|
@ -5,7 +5,7 @@
|
||||
#ifndef BITCOIN_WALLET_COINSELECTION_H
|
||||
#define BITCOIN_WALLET_COINSELECTION_H
|
||||
|
||||
#include <amount.h>
|
||||
#include <consensus/amount.h>
|
||||
#include <policy/feerate.h>
|
||||
#include <primitives/transaction.h>
|
||||
#include <random.h>
|
||||
|
@ -6,7 +6,7 @@
|
||||
#ifndef BITCOIN_WALLET_FEES_H
|
||||
#define BITCOIN_WALLET_FEES_H
|
||||
|
||||
#include <amount.h>
|
||||
#include <consensus/amount.h>
|
||||
|
||||
class CCoinControl;
|
||||
class CFeeRate;
|
||||
|
@ -4,8 +4,8 @@
|
||||
|
||||
#include <interfaces/wallet.h>
|
||||
|
||||
#include <amount.h>
|
||||
#include <coinjoin/client.h>
|
||||
#include <consensus/amount.h>
|
||||
#include <interfaces/chain.h>
|
||||
#include <interfaces/coinjoin.h>
|
||||
#include <interfaces/handler.h>
|
||||
|
@ -4,8 +4,8 @@
|
||||
// Distributed under the MIT software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
#include <amount.h>
|
||||
#include <chainparams.h>
|
||||
#include <consensus/amount.h>
|
||||
#include <core_io.h>
|
||||
#include <httpserver.h>
|
||||
#include <interfaces/chain.h>
|
||||
|
@ -4,12 +4,12 @@
|
||||
|
||||
#include <test/util/setup_common.h>
|
||||
|
||||
#include <amount.h>
|
||||
#include <coinjoin/client.h>
|
||||
#include <coinjoin/coinjoin.h>
|
||||
#include <coinjoin/context.h>
|
||||
#include <coinjoin/options.h>
|
||||
#include <coinjoin/util.h>
|
||||
#include <consensus/amount.h>
|
||||
#include <node/context.h>
|
||||
#include <util/translation.h>
|
||||
#include <validation.h>
|
||||
|
@ -2,13 +2,14 @@
|
||||
// Distributed under the MIT software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
#include <amount.h>
|
||||
#include <test/util/setup_common.h>
|
||||
|
||||
#include <consensus/amount.h>
|
||||
#include <node/context.h>
|
||||
#include <primitives/transaction.h>
|
||||
#include <random.h>
|
||||
#include <test/util/setup_common.h>
|
||||
#include <validation.h>
|
||||
#include <util/translation.h>
|
||||
#include <validation.h>
|
||||
#include <wallet/coincontrol.h>
|
||||
#include <wallet/coinselection.h>
|
||||
#include <wallet/test/wallet_test_fixture.h>
|
||||
|
@ -8,6 +8,7 @@
|
||||
|
||||
#include <chain.h>
|
||||
#include <chainparams.h>
|
||||
#include <consensus/amount.h>
|
||||
#include <consensus/consensus.h>
|
||||
#include <consensus/validation.h>
|
||||
#include <crypto/common.h>
|
||||
|
@ -7,7 +7,7 @@
|
||||
#ifndef BITCOIN_WALLET_WALLET_H
|
||||
#define BITCOIN_WALLET_WALLET_H
|
||||
|
||||
#include <amount.h>
|
||||
#include <consensus/amount.h>
|
||||
#include <fs.h>
|
||||
#include <governance/common.h>
|
||||
#include <interfaces/chain.h>
|
||||
|
@ -6,7 +6,6 @@
|
||||
#ifndef BITCOIN_WALLET_WALLETDB_H
|
||||
#define BITCOIN_WALLET_WALLETDB_H
|
||||
|
||||
#include <amount.h>
|
||||
#include <script/sign.h>
|
||||
#include <wallet/db.h>
|
||||
#include <wallet/walletutil.h>
|
||||
|
@ -52,10 +52,10 @@ EXPECTED_CIRCULAR_DEPENDENCIES=(
|
||||
"qt/appearancewidget -> qt/guiutil -> qt/optionsdialog -> qt/appearancewidget"
|
||||
"qt/guiutil -> qt/optionsdialog -> qt/optionsmodel -> qt/guiutil"
|
||||
|
||||
"bloom -> evo/assetlocktx -> llmq/quorums -> net -> bloom"
|
||||
"bloom -> evo/assetlocktx -> llmq/signing -> net_processing -> merkleblock -> bloom"
|
||||
"banman -> bloom -> evo/assetlocktx -> llmq/quorums -> net -> banman"
|
||||
"banman -> bloom -> evo/assetlocktx -> llmq/signing -> net_processing -> banman"
|
||||
"common/bloom -> evo/assetlocktx -> llmq/quorums -> net -> common/bloom"
|
||||
"common/bloom -> evo/assetlocktx -> llmq/signing -> net_processing -> merkleblock -> common/bloom"
|
||||
"banman -> common/bloom -> evo/assetlocktx -> llmq/quorums -> net -> banman"
|
||||
"banman -> common/bloom -> evo/assetlocktx -> llmq/signing -> net_processing -> banman"
|
||||
|
||||
"llmq/chainlocks -> validation -> llmq/chainlocks"
|
||||
"coinjoin/coinjoin -> llmq/chainlocks -> net -> coinjoin/coinjoin"
|
||||
|
@ -21,7 +21,7 @@ unsigned-integer-overflow:addrman.cpp
|
||||
unsigned-integer-overflow:arith_uint256.h
|
||||
unsigned-integer-overflow:basic_string.h
|
||||
unsigned-integer-overflow:bench/bench.h
|
||||
unsigned-integer-overflow:bloom.cpp
|
||||
unsigned-integer-overflow:common/bloom.cpp
|
||||
unsigned-integer-overflow:chain.cpp
|
||||
unsigned-integer-overflow:chain.h
|
||||
unsigned-integer-overflow:coded_stream.h
|
||||
@ -48,7 +48,7 @@ implicit-integer-sign-change:*/include/c++/
|
||||
implicit-integer-sign-change:*/new_allocator.h
|
||||
implicit-integer-sign-change:addrman.h
|
||||
implicit-integer-sign-change:bech32.cpp
|
||||
implicit-integer-sign-change:bloom.cpp
|
||||
implicit-integer-sign-change:common/bloom.cpp
|
||||
implicit-integer-sign-change:chain.cpp
|
||||
implicit-integer-sign-change:chain.h
|
||||
implicit-integer-sign-change:coins.h
|
||||
|
Loading…
Reference in New Issue
Block a user