This class groups transactions that have been confirmed in blocks into buckets, based on either their fee or their priority. Then for each bucket, the class calculates what percentage of the transactions were confirmed within various numbers of blocks. It does this by keeping an exponentially decaying moving history for each bucket and confirm block count of the percentage of transactions in that bucket that were confirmed within that number of blocks. -Eliminate txs which didn't have all inputs available at entry from fee/pri calcs -Add dynamic breakpoints and tracking of confirmation delays in mempool transactions -Remove old CMinerPolicyEstimator and CBlockAverage code -New smartfees.py -Pass a flag to the estimation code, using IsInitialBlockDownload as a proxy for when we are still catching up and we shouldn't be counting how many blocks it takes for transactions to be included. -Add a policyestimator unit test
427 lines
9.9 KiB
Makefile
427 lines
9.9 KiB
Makefile
DIST_SUBDIRS = secp256k1
|
|
AM_LDFLAGS = $(PTHREAD_CFLAGS) $(LIBTOOL_LDFLAGS)
|
|
|
|
|
|
if EMBEDDED_LEVELDB
|
|
LEVELDB_CPPFLAGS += -I$(srcdir)/leveldb/include
|
|
LEVELDB_CPPFLAGS += -I$(srcdir)/leveldb/helpers/memenv
|
|
LIBLEVELDB += $(builddir)/leveldb/libleveldb.a
|
|
LIBMEMENV += $(builddir)/leveldb/libmemenv.a
|
|
|
|
# NOTE: This dependency is not strictly necessary, but without it make may try to build both in parallel, which breaks the LevelDB build system in a race
|
|
$(LIBLEVELDB): $(LIBMEMENV)
|
|
|
|
$(LIBLEVELDB) $(LIBMEMENV):
|
|
@echo "Building LevelDB ..." && $(MAKE) -C $(@D) $(@F) CXX="$(CXX)" \
|
|
CC="$(CC)" PLATFORM=$(TARGET_OS) AR="$(AR)" $(LEVELDB_TARGET_FLAGS) \
|
|
OPT="$(CXXFLAGS) $(CPPFLAGS)"
|
|
endif
|
|
|
|
BITCOIN_CONFIG_INCLUDES=-I$(builddir)/config
|
|
BITCOIN_INCLUDES=-I$(builddir) -I$(builddir)/obj $(BOOST_CPPFLAGS) $(LEVELDB_CPPFLAGS) $(CRYPTO_CFLAGS) $(SSL_CFLAGS)
|
|
|
|
BITCOIN_INCLUDES += -I$(srcdir)/secp256k1/include
|
|
|
|
LIBBITCOIN_SERVER=libbitcoin_server.a
|
|
LIBBITCOIN_WALLET=libbitcoin_wallet.a
|
|
LIBBITCOIN_COMMON=libbitcoin_common.a
|
|
LIBBITCOIN_CLI=libbitcoin_cli.a
|
|
LIBBITCOIN_UTIL=libbitcoin_util.a
|
|
LIBBITCOIN_CRYPTO=crypto/libbitcoin_crypto.a
|
|
LIBBITCOIN_UNIVALUE=univalue/libbitcoin_univalue.a
|
|
LIBBITCOINQT=qt/libbitcoinqt.a
|
|
LIBSECP256K1=secp256k1/libsecp256k1.la
|
|
|
|
$(LIBSECP256K1): $(wildcard secp256k1/src/*) $(wildcard secp256k1/include/*)
|
|
$(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) -C $(@D) $(@F)
|
|
|
|
# Make is not made aware of per-object dependencies to avoid limiting building parallelization
|
|
# But to build the less dependent modules first, we manually select their order here:
|
|
EXTRA_LIBRARIES = \
|
|
crypto/libbitcoin_crypto.a \
|
|
libbitcoin_util.a \
|
|
libbitcoin_common.a \
|
|
univalue/libbitcoin_univalue.a \
|
|
libbitcoin_server.a \
|
|
libbitcoin_cli.a
|
|
if ENABLE_WALLET
|
|
BITCOIN_INCLUDES += $(BDB_CPPFLAGS)
|
|
EXTRA_LIBRARIES += libbitcoin_wallet.a
|
|
endif
|
|
|
|
if BUILD_BITCOIN_LIBS
|
|
lib_LTLIBRARIES = libbitcoinconsensus.la
|
|
LIBBITCOIN_CONSENSUS=libbitcoinconsensus.la
|
|
else
|
|
LIBBITCOIN_CONSENSUS=
|
|
endif
|
|
|
|
bin_PROGRAMS =
|
|
TESTS =
|
|
|
|
if BUILD_BITCOIND
|
|
bin_PROGRAMS += bitcoind
|
|
endif
|
|
|
|
if BUILD_BITCOIN_UTILS
|
|
bin_PROGRAMS += bitcoin-cli bitcoin-tx
|
|
endif
|
|
|
|
.PHONY: FORCE
|
|
# bitcoin core #
|
|
BITCOIN_CORE_H = \
|
|
addrman.h \
|
|
alert.h \
|
|
amount.h \
|
|
arith_uint256.h \
|
|
base58.h \
|
|
bloom.h \
|
|
chain.h \
|
|
chainparamsbase.h \
|
|
chainparams.h \
|
|
chainparamsseeds.h \
|
|
checkpoints.h \
|
|
checkqueue.h \
|
|
clientversion.h \
|
|
coincontrol.h \
|
|
coins.h \
|
|
compat.h \
|
|
compressor.h \
|
|
consensus/params.h \
|
|
core_io.h \
|
|
wallet/db.h \
|
|
eccryptoverify.h \
|
|
ecwrapper.h \
|
|
hash.h \
|
|
init.h \
|
|
key.h \
|
|
keystore.h \
|
|
leveldbwrapper.h \
|
|
limitedmap.h \
|
|
main.h \
|
|
merkleblock.h \
|
|
miner.h \
|
|
mruset.h \
|
|
netbase.h \
|
|
net.h \
|
|
noui.h \
|
|
policy/fees.h \
|
|
pow.h \
|
|
primitives/block.h \
|
|
primitives/transaction.h \
|
|
protocol.h \
|
|
pubkey.h \
|
|
random.h \
|
|
rpcclient.h \
|
|
rpcprotocol.h \
|
|
rpcserver.h \
|
|
script/interpreter.h \
|
|
script/script_error.h \
|
|
script/script.h \
|
|
script/sigcache.h \
|
|
script/sign.h \
|
|
script/standard.h \
|
|
serialize.h \
|
|
streams.h \
|
|
support/allocators/secure.h \
|
|
support/allocators/zeroafterfree.h \
|
|
support/cleanse.h \
|
|
support/pagelocker.h \
|
|
sync.h \
|
|
threadsafety.h \
|
|
timedata.h \
|
|
tinyformat.h \
|
|
txdb.h \
|
|
txmempool.h \
|
|
ui_interface.h \
|
|
uint256.h \
|
|
undo.h \
|
|
util.h \
|
|
utilmoneystr.h \
|
|
utilstrencodings.h \
|
|
utiltime.h \
|
|
validationinterface.h \
|
|
version.h \
|
|
wallet/crypter.h \
|
|
wallet/walletdb.h \
|
|
wallet/wallet.h \
|
|
wallet/wallet_ismine.h \
|
|
compat/byteswap.h \
|
|
compat/endian.h \
|
|
compat/sanity.h
|
|
|
|
JSON_H = \
|
|
json/json_spirit.h \
|
|
json/json_spirit_error_position.h \
|
|
json/json_spirit_reader.h \
|
|
json/json_spirit_reader_template.h \
|
|
json/json_spirit_stream_reader.h \
|
|
json/json_spirit_utils.h \
|
|
json/json_spirit_value.h \
|
|
json/json_spirit_writer.h \
|
|
json/json_spirit_writer_template.h
|
|
|
|
obj/build.h: FORCE
|
|
@$(MKDIR_P) $(builddir)/obj
|
|
@$(top_srcdir)/share/genbuild.sh $(abs_top_builddir)/src/obj/build.h \
|
|
$(abs_top_srcdir)
|
|
libbitcoin_util_a-clientversion.$(OBJEXT): obj/build.h
|
|
|
|
# server: shared between bitcoind and bitcoin-qt
|
|
libbitcoin_server_a_CPPFLAGS = $(BITCOIN_INCLUDES) $(MINIUPNPC_CPPFLAGS)
|
|
libbitcoin_server_a_SOURCES = \
|
|
addrman.cpp \
|
|
alert.cpp \
|
|
bloom.cpp \
|
|
chain.cpp \
|
|
checkpoints.cpp \
|
|
init.cpp \
|
|
leveldbwrapper.cpp \
|
|
main.cpp \
|
|
merkleblock.cpp \
|
|
miner.cpp \
|
|
net.cpp \
|
|
noui.cpp \
|
|
policy/fees.cpp \
|
|
pow.cpp \
|
|
rest.cpp \
|
|
rpcblockchain.cpp \
|
|
rpcmining.cpp \
|
|
rpcmisc.cpp \
|
|
rpcnet.cpp \
|
|
rpcrawtransaction.cpp \
|
|
rpcserver.cpp \
|
|
script/sigcache.cpp \
|
|
timedata.cpp \
|
|
txdb.cpp \
|
|
txmempool.cpp \
|
|
validationinterface.cpp \
|
|
$(JSON_H) \
|
|
$(BITCOIN_CORE_H)
|
|
|
|
# wallet: shared between bitcoind and bitcoin-qt, but only linked
|
|
# when wallet enabled
|
|
libbitcoin_wallet_a_CPPFLAGS = $(BITCOIN_INCLUDES)
|
|
libbitcoin_wallet_a_SOURCES = \
|
|
wallet/crypter.cpp \
|
|
wallet/db.cpp \
|
|
wallet/rpcdump.cpp \
|
|
wallet/rpcwallet.cpp \
|
|
wallet/wallet.cpp \
|
|
wallet/wallet_ismine.cpp \
|
|
wallet/walletdb.cpp \
|
|
$(BITCOIN_CORE_H)
|
|
|
|
# crypto primitives library
|
|
crypto_libbitcoin_crypto_a_CPPFLAGS = $(BITCOIN_CONFIG_INCLUDES)
|
|
crypto_libbitcoin_crypto_a_SOURCES = \
|
|
crypto/sha1.cpp \
|
|
crypto/sha256.cpp \
|
|
crypto/sha512.cpp \
|
|
crypto/hmac_sha256.cpp \
|
|
crypto/hmac_sha512.cpp \
|
|
crypto/ripemd160.cpp \
|
|
crypto/common.h \
|
|
crypto/sha256.h \
|
|
crypto/sha512.h \
|
|
crypto/hmac_sha256.h \
|
|
crypto/hmac_sha512.h \
|
|
crypto/sha1.h \
|
|
crypto/ripemd160.h
|
|
|
|
# univalue JSON library
|
|
univalue_libbitcoin_univalue_a_SOURCES = \
|
|
univalue/univalue.cpp \
|
|
univalue/univalue_read.cpp \
|
|
univalue/univalue_write.cpp \
|
|
univalue/univalue_escapes.h \
|
|
univalue/univalue.h
|
|
|
|
# common: shared between bitcoind, and bitcoin-qt and non-server tools
|
|
libbitcoin_common_a_CPPFLAGS = $(BITCOIN_INCLUDES)
|
|
libbitcoin_common_a_SOURCES = \
|
|
arith_uint256.cpp \
|
|
amount.cpp \
|
|
base58.cpp \
|
|
chainparams.cpp \
|
|
coins.cpp \
|
|
compressor.cpp \
|
|
primitives/block.cpp \
|
|
primitives/transaction.cpp \
|
|
core_read.cpp \
|
|
core_write.cpp \
|
|
eccryptoverify.cpp \
|
|
ecwrapper.cpp \
|
|
hash.cpp \
|
|
key.cpp \
|
|
keystore.cpp \
|
|
netbase.cpp \
|
|
protocol.cpp \
|
|
pubkey.cpp \
|
|
script/interpreter.cpp \
|
|
script/script.cpp \
|
|
script/sign.cpp \
|
|
script/standard.cpp \
|
|
script/script_error.cpp \
|
|
$(BITCOIN_CORE_H)
|
|
|
|
# util: shared between all executables.
|
|
# This library *must* be included to make sure that the glibc
|
|
# backward-compatibility objects and their sanity checks are linked.
|
|
libbitcoin_util_a_CPPFLAGS = $(BITCOIN_INCLUDES)
|
|
libbitcoin_util_a_SOURCES = \
|
|
support/pagelocker.cpp \
|
|
chainparamsbase.cpp \
|
|
clientversion.cpp \
|
|
compat/glibc_sanity.cpp \
|
|
compat/glibcxx_sanity.cpp \
|
|
compat/strnlen.cpp \
|
|
random.cpp \
|
|
rpcprotocol.cpp \
|
|
support/cleanse.cpp \
|
|
sync.cpp \
|
|
uint256.cpp \
|
|
util.cpp \
|
|
utilmoneystr.cpp \
|
|
utilstrencodings.cpp \
|
|
utiltime.cpp \
|
|
$(BITCOIN_CORE_H)
|
|
|
|
if GLIBC_BACK_COMPAT
|
|
libbitcoin_util_a_SOURCES += compat/glibc_compat.cpp
|
|
endif
|
|
|
|
# cli: shared between bitcoin-cli and bitcoin-qt
|
|
libbitcoin_cli_a_CPPFLAGS = $(BITCOIN_INCLUDES)
|
|
libbitcoin_cli_a_SOURCES = \
|
|
rpcclient.cpp \
|
|
$(BITCOIN_CORE_H)
|
|
|
|
nodist_libbitcoin_util_a_SOURCES = $(srcdir)/obj/build.h
|
|
#
|
|
|
|
# bitcoind binary #
|
|
bitcoind_SOURCES = bitcoind.cpp
|
|
bitcoind_CPPFLAGS = $(BITCOIN_INCLUDES)
|
|
bitcoind_LDFLAGS = $(RELDFLAGS) $(AM_LDFLAGS) $(LIBTOOL_APP_LDFLAGS)
|
|
|
|
if TARGET_WINDOWS
|
|
bitcoind_SOURCES += bitcoind-res.rc
|
|
endif
|
|
|
|
bitcoind_LDADD = \
|
|
$(LIBBITCOIN_SERVER) \
|
|
$(LIBBITCOIN_COMMON) \
|
|
$(LIBBITCOIN_UNIVALUE) \
|
|
$(LIBBITCOIN_UTIL) \
|
|
$(LIBBITCOIN_CRYPTO) \
|
|
$(LIBLEVELDB) \
|
|
$(LIBMEMENV) \
|
|
$(LIBSECP256K1)
|
|
|
|
if ENABLE_WALLET
|
|
bitcoind_LDADD += libbitcoin_wallet.a
|
|
endif
|
|
|
|
bitcoind_LDADD += $(BOOST_LIBS) $(BDB_LIBS) $(SSL_LIBS) $(CRYPTO_LIBS) $(MINIUPNPC_LIBS)
|
|
#
|
|
|
|
# bitcoin-cli binary #
|
|
bitcoin_cli_SOURCES = bitcoin-cli.cpp
|
|
bitcoin_cli_CPPFLAGS = $(BITCOIN_INCLUDES)
|
|
bitcoin_cli_LDFLAGS = $(RELDFLAGS) $(AM_LDFLAGS) $(LIBTOOL_APP_LDFLAGS)
|
|
|
|
if TARGET_WINDOWS
|
|
bitcoin_cli_SOURCES += bitcoin-cli-res.rc
|
|
endif
|
|
|
|
bitcoin_cli_LDADD = \
|
|
$(LIBBITCOIN_CLI) \
|
|
$(LIBBITCOIN_UTIL) \
|
|
$(LIBSECP256K1)
|
|
|
|
bitcoin_cli_LDADD += $(BOOST_LIBS) $(SSL_LIBS) $(CRYPTO_LIBS)
|
|
#
|
|
|
|
# bitcoin-tx binary #
|
|
bitcoin_tx_SOURCES = bitcoin-tx.cpp
|
|
bitcoin_tx_CPPFLAGS = $(BITCOIN_INCLUDES)
|
|
bitcoin_tx_LDFLAGS = $(RELDFLAGS) $(AM_LDFLAGS) $(LIBTOOL_APP_LDFLAGS)
|
|
|
|
bitcoin_tx_LDADD = \
|
|
$(LIBBITCOIN_UNIVALUE) \
|
|
$(LIBBITCOIN_COMMON) \
|
|
$(LIBBITCOIN_UTIL) \
|
|
$(LIBBITCOIN_CRYPTO) \
|
|
$(LIBSECP256K1)
|
|
|
|
bitcoin_tx_LDADD += $(BOOST_LIBS) $(CRYPTO_LIBS)
|
|
#
|
|
|
|
# bitcoinconsensus library #
|
|
if BUILD_BITCOIN_LIBS
|
|
include_HEADERS = script/bitcoinconsensus.h
|
|
libbitcoinconsensus_la_SOURCES = \
|
|
crypto/hmac_sha512.cpp \
|
|
crypto/ripemd160.cpp \
|
|
crypto/sha1.cpp \
|
|
crypto/sha256.cpp \
|
|
crypto/sha512.cpp \
|
|
eccryptoverify.cpp \
|
|
ecwrapper.cpp \
|
|
hash.cpp \
|
|
primitives/transaction.cpp \
|
|
pubkey.cpp \
|
|
script/bitcoinconsensus.cpp \
|
|
script/interpreter.cpp \
|
|
script/script.cpp \
|
|
uint256.cpp \
|
|
utilstrencodings.cpp
|
|
|
|
if GLIBC_BACK_COMPAT
|
|
libbitcoinconsensus_la_SOURCES += compat/glibc_compat.cpp
|
|
endif
|
|
|
|
libbitcoinconsensus_la_LDFLAGS = -no-undefined $(RELDFLAGS)
|
|
libbitcoinconsensus_la_LIBADD = $(CRYPTO_LIBS)
|
|
libbitcoinconsensus_la_CPPFLAGS = $(CRYPTO_CFLAGS) -I$(builddir)/obj -DBUILD_BITCOIN_INTERNAL
|
|
|
|
endif
|
|
#
|
|
|
|
CLEANFILES = leveldb/libleveldb.a leveldb/libmemenv.a *.gcda *.gcno
|
|
|
|
DISTCLEANFILES = obj/build.h
|
|
|
|
EXTRA_DIST = leveldb
|
|
|
|
clean-local:
|
|
-$(MAKE) -C leveldb clean
|
|
-$(MAKE) -C secp256k1 clean
|
|
rm -f leveldb/*/*.gcno leveldb/helpers/memenv/*.gcno
|
|
-rm -f config.h
|
|
|
|
.rc.o:
|
|
@test -f $(WINDRES)
|
|
$(AM_V_GEN) $(WINDRES) -DWINDRES_PREPROC -i $< -o $@
|
|
|
|
.mm.o:
|
|
$(AM_V_CXX) $(OBJCXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
|
|
$(CPPFLAGS) $(AM_CXXFLAGS) $(QT_INCLUDES) $(CXXFLAGS) -c -o $@ $<
|
|
|
|
%.pb.cc %.pb.h: %.proto
|
|
@test -f $(PROTOC)
|
|
$(AM_V_GEN) $(PROTOC) --cpp_out=$(@D) --proto_path=$(abspath $(<D) $<)
|
|
|
|
if ENABLE_TESTS
|
|
include Makefile.test.include
|
|
endif
|
|
|
|
if ENABLE_QT
|
|
include Makefile.qt.include
|
|
endif
|
|
|
|
if ENABLE_QT_TESTS
|
|
include Makefile.qttest.include
|
|
endif
|