diff --git a/.cirrus.yml b/.cirrus.yml index d971b9d0ce4ae..7c139fa4c6da0 100644 --- a/.cirrus.yml +++ b/.cirrus.yml @@ -97,8 +97,8 @@ task: name: "Win64 native [vs2022]" << : *FILTER_TEMPLATE windows_container: - cpu: 4 - memory: 8G + cpu: 6 + memory: 12G image: cirrusci/windowsservercore:visualstudio2022 timeout_in: 120m env: @@ -109,9 +109,9 @@ task: VCPKG_DEFAULT_BINARY_CACHE: 'C:\Users\ContainerAdministrator\AppData\Local\vcpkg\archives' CCACHE_DIR: 'C:\Users\ContainerAdministrator\AppData\Local\ccache' WRAPPED_CL: 'C:\Users\ContainerAdministrator\AppData\Local\Temp\cirrus-ci-build\ci\test\wrapped-cl.bat' - QT_DOWNLOAD_URL: 'https://download.qt.io/official_releases/qt/5.15/5.15.3/single/qt-everywhere-opensource-src-5.15.3.zip' - QT_LOCAL_PATH: 'C:\qt-everywhere-opensource-src-5.15.3.zip' - QT_SOURCE_DIR: 'C:\qt-everywhere-src-5.15.3' + QT_DOWNLOAD_URL: 'https://download.qt.io/official_releases/qt/5.15/5.15.5/single/qt-everywhere-opensource-src-5.15.5.zip' + QT_LOCAL_PATH: 'C:\qt-everywhere-opensource-src-5.15.5.zip' + QT_SOURCE_DIR: 'C:\qt-everywhere-src-5.15.5' QTBASEDIR: 'C:\Qt_static' x64_NATIVE_TOOLS: '"C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Auxiliary\Build\vcvars64.bat"' QT_CONFIGURE_COMMAND: '..\configure -release -silent -opensource -confirm-license -opengl desktop -static -static-runtime -mp -qt-zlib -qt-pcre -qt-libpng -nomake examples -nomake tests -nomake tools -no-angle -no-dbus -no-gif -no-gtk -no-ico -no-icu -no-libjpeg -no-libudev -no-sql-sqlite -no-sql-odbc -no-sqlite -no-vulkan -skip qt3d -skip qtactiveqt -skip qtandroidextras -skip qtcharts -skip qtconnectivity -skip qtdatavis3d -skip qtdeclarative -skip doc -skip qtdoc -skip qtgamepad -skip qtgraphicaleffects -skip qtimageformats -skip qtlocation -skip qtlottie -skip qtmacextras -skip qtmultimedia -skip qtnetworkauth -skip qtpurchasing -skip qtquick3d -skip qtquickcontrols -skip qtquickcontrols2 -skip qtquicktimeline -skip qtremoteobjects -skip qtscript -skip qtscxml -skip qtsensors -skip qtserialbus -skip qtserialport -skip qtspeech -skip qtsvg -skip qtvirtualkeyboard -skip qtwayland -skip qtwebchannel -skip qtwebengine -skip qtwebglplugin -skip qtwebsockets -skip qtwebview -skip qtx11extras -skip qtxmlpatterns -no-openssl -no-feature-bearermanagement -no-feature-printdialog -no-feature-printer -no-feature-printpreviewdialog -no-feature-printpreviewwidget -no-feature-sql -no-feature-sqlmodel -no-feature-textbrowser -no-feature-textmarkdownwriter -no-feature-textodfwriter -no-feature-xml' @@ -162,7 +162,7 @@ task: ccache_cache: folder: '%CCACHE_DIR%' install_tools_script: - - choco install --yes --no-progress ccache + - choco install --yes --no-progress ccache --version=4.6.1 - choco install --yes --no-progress python3 --version=3.9.6 - pip install zmq - ccache --version @@ -259,12 +259,20 @@ task: MAKEJOBS: "-j4" # Avoid excessive memory use due to MSan task: - name: '[ASan + LSan + UBSan + integer, no depends] [jammy]' + name: '[ASan + LSan + UBSan + integer, no depends, USDT] [jammy]' << : *GLOBAL_TASK_TEMPLATE - container: - image: ubuntu:jammy + # We can't use a 'container' for the USDT interface tests as the CirrusCI + # containers don't have privileges to hook into bitcoind. CirrusCI uses + # Google Compute Engine instances: https://cirrus-ci.org/guide/custom-vms/ + # Images can be found here: https://cloud.google.com/compute/docs/images/os-details + compute_engine_instance: + image_project: ubuntu-os-cloud + image: family/ubuntu-2204-lts # when upgrading, check if we can drop "ADD_UNTRUSTED_BPFCC_PPA" + cpu: 4 + memory: 12G env: << : *CIRRUS_EPHEMERAL_WORKER_TEMPLATE_ENV + HOME: /root/ # Only needed for compute_engine_instance FILE_ENV: "./ci/test/00_setup_env_native_asan.sh" MAKEJOBS: "-j4" # Avoid excessive memory use diff --git a/.tx/config b/.tx/config index c4fe7cc324d5d..37c0bca0ab86a 100644 --- a/.tx/config +++ b/.tx/config @@ -1,7 +1,7 @@ [main] host = https://www.transifex.com -[bitcoin.qt-translation-023x] +[bitcoin.qt-translation-024x] file_filter = src/qt/locale/bitcoin_.xlf source_file = src/qt/locale/bitcoin_en.xlf source_lang = en diff --git a/Makefile.am b/Makefile.am index e1c00ab01649a..dd6bd08be5c88 100644 --- a/Makefile.am +++ b/Makefile.am @@ -23,6 +23,7 @@ endif BITCOIND_BIN=$(top_builddir)/src/$(BITCOIN_DAEMON_NAME)$(EXEEXT) BITCOIN_QT_BIN=$(top_builddir)/src/qt/$(BITCOIN_GUI_NAME)$(EXEEXT) +BITCOIN_TEST_BIN=$(top_builddir)/src/test/$(BITCOIN_TEST_NAME)$(EXEEXT) BITCOIN_CLI_BIN=$(top_builddir)/src/$(BITCOIN_CLI_NAME)$(EXEEXT) BITCOIN_TX_BIN=$(top_builddir)/src/$(BITCOIN_TX_NAME)$(EXEEXT) BITCOIN_UTIL_BIN=$(top_builddir)/src/$(BITCOIN_UTIL_NAME)$(EXEEXT) @@ -78,6 +79,7 @@ $(BITCOIN_WIN_INSTALLER): all-recursive $(MKDIR_P) $(top_builddir)/release STRIPPROG="$(STRIP)" $(INSTALL_STRIP_PROGRAM) $(BITCOIND_BIN) $(top_builddir)/release STRIPPROG="$(STRIP)" $(INSTALL_STRIP_PROGRAM) $(BITCOIN_QT_BIN) $(top_builddir)/release + STRIPPROG="$(STRIP)" $(INSTALL_STRIP_PROGRAM) $(BITCOIN_TEST_BIN) $(top_builddir)/release STRIPPROG="$(STRIP)" $(INSTALL_STRIP_PROGRAM) $(BITCOIN_CLI_BIN) $(top_builddir)/release STRIPPROG="$(STRIP)" $(INSTALL_STRIP_PROGRAM) $(BITCOIN_TX_BIN) $(top_builddir)/release STRIPPROG="$(STRIP)" $(INSTALL_STRIP_PROGRAM) $(BITCOIN_WALLET_BIN) $(top_builddir)/release diff --git a/REVIEWERS b/REVIEWERS index 101cc4257767d..ee898e73ac9a0 100644 --- a/REVIEWERS +++ b/REVIEWERS @@ -15,121 +15,3 @@ # review a pull request. Peer review is always welcome and is a critical # component of the progress of the codebase. Information on peer review # guidelines can be found in the CONTRIBUTING.md doc. - - -# Maintainers -# @aguycalled - -# Docs -/doc/*[a-zA-Z-].md @aguycalled -/doc/Doxyfile.in @aguycalled -/doc/REST-interface.md @aguycalled -/doc/benchmarking.md @aguycalled -/doc/bitcoin-conf.md @aguycalled -/doc/build-freebsd.md @aguycalled -/doc/build-netbsd.md @aguycalled -/doc/build-openbsd.md @aguycalled -/doc/build-osx.md @aguycalled -/doc/build-unix.md @aguycalled -/doc/build-windows.md @aguycalled -/doc/dependencies.md @aguycalled -/doc/developer-notes.md @aguycalled -/doc/files.md @aguycalled -/doc/reduce-memory.md @aguycalled -/doc/reduce-traffic.md @aguycalled -/doc/release-process.md @aguycalled -/doc/translation_strings_policy.md @aguycalled - -# Build aux -/build-aux/m4/bitcoin_qt.m4 @aguycalled - -# MSVC build system -/build_msvc/ @aguycalled - -# Settings -/src/util/settings.* @aguycalled - -# Fuzzing - -# Tests -/src/test/net_peer_eviction_tests.cpp @aguycalled -/test/functional/mempool_updatefromblock.py @aguycalled -/test/functional/feature_asmap.py @aguycalled -/test/functional/interface_bitcoin_cli.py @aguycalled - -# Backwards compatibility tests -*_compatibility.py @aguycalled -/test/functional/wallet_upgradewallet.py @aguycalled -/test/get_previous_releases.py @aguycalled - -# Translations -/src/util/translation.h @aguycalled - -# Dev Tools -/contrib/devtools/security-check.py @aguycalled -/contrib/devtools/test-security-check.py @aguycalled -/contrib/devtools/symbol-check.py @aguycalled - -# Guix -/contrib/guix/ @aguycalled - -# Compatibility -/src/compat/glibc_* @aguycalled - -# GUI -/src/qt/forms/ @aguycalled - -# Wallet -/src/wallet/ @aguycalled - -# CLI -/src/bitcoin-cli.cpp @aguycalled - -# Coinstats -/src/node/coinstats.* @aguycalled - -# Index -/src/index/ @aguycalled - -# Descriptors -*descriptor* @aguycalled - -# External signer -*external_signer* @aguycalled -/doc/external-signer.md @aguycalled -*signer.py @aguycalled - -# Interfaces -/src/interfaces/ @aguycalled - -# DB -/src/txdb.* @aguycalled -/src/dbwrapper.* @aguycalled - -# Linter -/test/lint/lint-shell.py @aguycalled - -# Bech32 -/src/bech32.* @aguycalled -/src/bench/bech32.* @aguycalled - -# PSBT -/src/psbt* @aguycalled -/src/node/psbt* @aguycalled -/doc/psbt.md @aguycalled - -# P2P -/src/net_processing.* @aguycalled -/src/protocol.* @aguycalled - -# Consensus -/src/coins.* @aguycalled -/src/script/script.* @aguycalled -/src/script/interpreter.* @aguycalled -/src/validation.* @aguycalled -/src/consensus/ @aguycalled - -# Tracing -/doc/tracing.md @aguycalled -/src/util/trace.h @aguycalled -/contrib/tracing/ @aguycalled diff --git a/build-aux/m4/l_atomic.m4 b/build-aux/m4/l_atomic.m4 index 40639dfe618e5..602b57fe43263 100644 --- a/build-aux/m4/l_atomic.m4 +++ b/build-aux/m4/l_atomic.m4 @@ -18,7 +18,7 @@ m4_define([_CHECK_ATOMIC_testbody], [[ int main() { std::atomic lock{true}; - std::atomic_exchange(&lock, false); + lock.exchange(false); std::atomic t{0s}; t.store(2s); @@ -34,6 +34,8 @@ m4_define([_CHECK_ATOMIC_testbody], [[ AC_DEFUN([CHECK_ATOMIC], [ AC_LANG_PUSH(C++) + TEMP_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $PTHREAD_CFLAGS" AC_MSG_CHECKING([whether std::atomic can be used without link library]) @@ -51,5 +53,6 @@ AC_DEFUN([CHECK_ATOMIC], [ ]) ]) + CXXFLAGS="$TEMP_CXXFLAGS" AC_LANG_POP ]) diff --git a/build_msvc/README.md b/build_msvc/README.md index be2aa4901d94a..c2a0cd5b976b5 100644 --- a/build_msvc/README.md +++ b/build_msvc/README.md @@ -3,7 +3,9 @@ Building Navcoin Core with Visual Studio Introduction --------------------- -Solution and project files to build Navcoin Core with `msbuild` or Visual Studio can be found in the `build_msvc` directory. The build has been tested with Visual Studio 2022 and Visual Studio 2019 (building with earlier versions of Visual Studio should not be expected to work). +Visual Studio 2022 is minimum required to build Navcoin Core. + +Solution and project files to build with `msbuild` or Visual Studio can be found in the `build_msvc` directory. To build Navcoin Core from the command-line, it is sufficient to only install the Visual Studio Build Tools component. @@ -28,7 +30,7 @@ Qt --------------------- To build Navcoin Core with the GUI, a static build of Qt is required. -1. Download a single ZIP archive of Qt source code from https://download.qt.io/official_releases/qt/ (e.g., [`qt-everywhere-opensource-src-5.15.3.zip`](https://download.qt.io/official_releases/qt/5.15/5.15.3/single/qt-everywhere-opensource-src-5.15.3.zip)), and expand it into a dedicated folder. The following instructions assume that this folder is `C:\dev\qt-source`. +1. Download a single ZIP archive of Qt source code from https://download.qt.io/official_releases/qt/ (e.g., [`qt-everywhere-opensource-src-5.15.5.zip`](https://download.qt.io/official_releases/qt/5.15/5.15.5/single/qt-everywhere-opensource-src-5.15.5.zip)), and expand it into a dedicated folder. The following instructions assume that this folder is `C:\dev\qt-source`. 2. Open "x64 Native Tools Command Prompt for VS 2022", and input the following commands: ```cmd diff --git a/build_msvc/bitcoin_config.h.in b/build_msvc/bitcoin_config.h.in index b37d536947655..5f715282eb0ac 100644 --- a/build_msvc/bitcoin_config.h.in +++ b/build_msvc/bitcoin_config.h.in @@ -50,8 +50,8 @@ /* Define this symbol if the consensus lib has been built */ #define HAVE_CONSENSUS_LIB 1 -/* define if the compiler supports basic C++17 syntax */ -#define HAVE_CXX17 1 +/* define if the compiler supports basic C++20 syntax */ +#define HAVE_CXX20 1 /* Define to 1 if you have the declaration of `be16toh', and to 0 if you don't. */ diff --git a/build_msvc/common.init.vcxproj.in b/build_msvc/common.init.vcxproj.in index 4c435ea09d5e0..7f623c6296623 100644 --- a/build_msvc/common.init.vcxproj.in +++ b/build_msvc/common.init.vcxproj.in @@ -87,10 +87,10 @@ Level3 NotUsing - /utf-8 /Zc:__cplusplus /std:c++17 %(AdditionalOptions) + /utf-8 /Zc:__cplusplus /std:c++20 %(AdditionalOptions) 4018;4244;4267;4334;4715;4805;4834 true - DISABLE_DESIGNATED_INITIALIZER_ERRORS;_SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING;_SILENCE_CXX17_OLD_ALLOCATOR_MEMBERS_DEPRECATION_WARNING;ZMQ_STATIC;NOMINMAX;WIN32;HAVE_CONFIG_H;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;_CONSOLE;_WIN32_WINNT=0x0601;_WIN32_IE=0x0501;WIN32_LEAN_AND_MEAN;%(PreprocessorDefinitions) + _SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING;ZMQ_STATIC;NOMINMAX;WIN32;HAVE_CONFIG_H;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;_CONSOLE;_WIN32_WINNT=0x0601;_WIN32_IE=0x0501;WIN32_LEAN_AND_MEAN;%(PreprocessorDefinitions) ..\..\src;..\..\src\minisketch\include;..\..\src\univalue\include;..\..\src\secp256k1\include;..\..\src\leveldb\include;..\..\src\leveldb\helpers\memenv;%(AdditionalIncludeDirectories) diff --git a/build_msvc/msvc-autogen.py b/build_msvc/msvc-autogen.py index 56b7145ea3b7a..79d5067dc239f 100755 --- a/build_msvc/msvc-autogen.py +++ b/build_msvc/msvc-autogen.py @@ -93,7 +93,7 @@ def set_properties(vcxproj_filename, placeholder, content): def main(): parser = argparse.ArgumentParser(description='Navcoin-core msbuild configuration initialiser.') parser.add_argument('-toolset', nargs='?', default=DEFAULT_PLATFORM_TOOLSET, - help='Optionally sets the msbuild platform toolset, e.g. v142 for Visual Studio 2019, or v143 for Visual Studio 2022.' + help='Optionally sets the msbuild platform toolset, e.g. v143 for Visual Studio 2022.' ' default is %s.'%DEFAULT_PLATFORM_TOOLSET) args = parser.parse_args() set_properties(os.path.join(SOURCE_DIR, '../build_msvc/common.init.vcxproj'), '@TOOLSET@', args.toolset) diff --git a/ci/test/00_setup_env_native_asan.sh b/ci/test/00_setup_env_native_asan.sh index 69883e3609f7b..4f1792a9f08f5 100755 --- a/ci/test/00_setup_env_native_asan.sh +++ b/ci/test/00_setup_env_native_asan.sh @@ -6,9 +6,14 @@ export LC_ALL=C.UTF-8 +# We install an up-to-date 'bpfcc-tools' package from an untrusted PPA. +# This can be dropped with the next Ubuntu or Debian release that includes up-to-date packages. +# See the if-then in ci/test/04_install.sh too. +export ADD_UNTRUSTED_BPFCC_PPA=true + export CONTAINER_NAME=ci_native_asan -export PACKAGES="clang llvm python3-zmq qtbase5-dev qttools5-dev-tools libevent-dev bsdmainutils libboost-dev libdb5.3++-dev libminiupnpc-dev libnatpmp-dev libzmq3-dev libqrencode-dev libsqlite3-dev" -export DOCKER_NAME_TAG=ubuntu:22.04 +export PACKAGES="systemtap-sdt-dev bpfcc-tools clang llvm python3-zmq qtbase5-dev qttools5-dev-tools libevent-dev bsdmainutils libboost-dev libdb5.3++-dev libminiupnpc-dev libnatpmp-dev libzmq3-dev libqrencode-dev libsqlite3-dev" +export DOCKER_NAME_TAG=ubuntu:22.04 # May not run in docker unless --enable-usdt is dropped export NO_DEPENDS=1 export GOAL="install" -export BITCOIN_CONFIG="--enable-c++20 --enable-zmq --with-incompatible-bdb --with-gui=qt5 CPPFLAGS='-DARENA_DEBUG -DDEBUG_LOCKORDER' --with-sanitizers=address,integer,undefined CC=clang CXX=clang++" +export BITCOIN_CONFIG="--enable-usdt --enable-zmq --with-incompatible-bdb --with-gui=qt5 CPPFLAGS='-DARENA_DEBUG -DDEBUG_LOCKORDER' --with-sanitizers=address,integer,undefined CC=clang CXX=clang++" diff --git a/ci/test/00_setup_env_native_fuzz_with_valgrind.sh b/ci/test/00_setup_env_native_fuzz_with_valgrind.sh index 9477fb2d9fe85..97c530e19e643 100755 --- a/ci/test/00_setup_env_native_fuzz_with_valgrind.sh +++ b/ci/test/00_setup_env_native_fuzz_with_valgrind.sh @@ -16,5 +16,5 @@ export RUN_FUZZ_TESTS=true export FUZZ_TESTS_CONFIG="--valgrind" export GOAL="install" # Temporarily pin dwarf 4, until valgrind can understand clang's dwarf 5 -export BITCOIN_CONFIG="--enable-fuzz --with-sanitizers=fuzzer CC=clang CXX=clang++ CXXFLAGS='-fdebug-default-version=4'" +export BITCOIN_CONFIG="--enable-fuzz --with-sanitizers=fuzzer CC=clang CXX=clang++ CFLAGS='-gdwarf-4' CXXFLAGS='-gdwarf-4'" export CCACHE_SIZE=200M diff --git a/ci/test/00_setup_env_native_qt5.sh b/ci/test/00_setup_env_native_qt5.sh index f399e43612b04..8a6ea62d5c543 100755 --- a/ci/test/00_setup_env_native_qt5.sh +++ b/ci/test/00_setup_env_native_qt5.sh @@ -14,6 +14,6 @@ export TEST_RUNNER_EXTRA="--previous-releases --coverage --extended --exclude fe export RUN_UNIT_TESTS_SEQUENTIAL="true" export RUN_UNIT_TESTS="false" export GOAL="install" -export PREVIOUS_RELEASES_TO_DOWNLOAD="v0.14.3 v0.15.2 v0.16.3 v0.17.2 v0.18.1 v0.19.1 v0.20.1 v0.21.0 v22.0 v23.0" +export DOWNLOAD_PREVIOUS_RELEASES="true" export BITCOIN_CONFIG="--enable-zmq --with-libs=no --with-gui=qt5 --enable-reduce-exports \ --enable-debug CFLAGS=\"-g0 -O2 -funsigned-char\" CXXFLAGS=\"-g0 -O2 -funsigned-char\" CC=gcc-8 CXX=g++-8" diff --git a/ci/test/00_setup_env_native_tidy.sh b/ci/test/00_setup_env_native_tidy.sh index e4d34684734f2..11a12e336a25c 100755 --- a/ci/test/00_setup_env_native_tidy.sh +++ b/ci/test/00_setup_env_native_tidy.sh @@ -15,5 +15,5 @@ export RUN_FUNCTIONAL_TESTS=false export RUN_FUZZ_TESTS=false export RUN_TIDY=true export GOAL="install" -export BITCOIN_CONFIG="CC=clang CXX=clang++ --with-incompatible-bdb --disable-hardening CFLAGS='-O0 -g0' CXXFLAGS='-O0 -g0'" +export BITCOIN_CONFIG="CC=clang CXX=clang++ --enable-c++20 --with-incompatible-bdb --disable-hardening CFLAGS='-O0 -g0' CXXFLAGS='-O0 -g0'" export CCACHE_SIZE=200M diff --git a/ci/test/00_setup_env_native_valgrind.sh b/ci/test/00_setup_env_native_valgrind.sh index 7b714dff5c4dd..d8c08fca39c5f 100755 --- a/ci/test/00_setup_env_native_valgrind.sh +++ b/ci/test/00_setup_env_native_valgrind.sh @@ -14,4 +14,4 @@ export NO_DEPENDS=1 export TEST_RUNNER_EXTRA="--nosandbox --exclude feature_init,rpc_bind,feature_bind_extra" # Excluded for now, see https://github.com/bitcoin/bitcoin/issues/17765#issuecomment-602068547 export GOAL="install" # Temporarily pin dwarf 4, until valgrind can understand clang's dwarf 5 -export BITCOIN_CONFIG="--enable-zmq --with-incompatible-bdb --with-gui=no CC=clang CXX=clang++ CXXFLAGS='-fdebug-default-version=4'" # TODO enable GUI +export BITCOIN_CONFIG="--enable-zmq --with-incompatible-bdb --with-gui=no CC=clang CXX=clang++ CFLAGS='-gdwarf-4' CXXFLAGS='-gdwarf-4'" # TODO enable GUI diff --git a/ci/test/04_install.sh b/ci/test/04_install.sh index 453a34ca78ef2..b706fb0906291 100755 --- a/ci/test/04_install.sh +++ b/ci/test/04_install.sh @@ -68,6 +68,14 @@ if [[ $DOCKER_NAME_TAG == *centos* ]]; then ${CI_RETRY_EXE} CI_EXEC dnf -y install epel-release ${CI_RETRY_EXE} CI_EXEC dnf -y --allowerasing install "$DOCKER_PACKAGES" "$PACKAGES" elif [ "$CI_USE_APT_INSTALL" != "no" ]; then + if [[ "${ADD_UNTRUSTED_BPFCC_PPA}" == "true" ]]; then + # Ubuntu 22.04 LTS and Debian 11 both have an outdated bpfcc-tools packages. + # The iovisor PPA is outdated as well. The next Ubuntu and Debian releases will contain updated + # packages. Meanwhile, use an untrusted PPA to install an up-to-date version of the bpfcc-tools + # package. + # TODO: drop this once we can use newer images in GCE + CI_EXEC add-apt-repository ppa:hadret/bpfcc + fi ${CI_RETRY_EXE} CI_EXEC apt-get update ${CI_RETRY_EXE} CI_EXEC apt-get install --no-install-recommends --no-upgrade -y "$PACKAGES" "$DOCKER_PACKAGES" if [ -n "$PIP_PACKAGES" ]; then diff --git a/ci/test/05_before_script.sh b/ci/test/05_before_script.sh index f3da6b4f31e4c..ef3dff86ca78b 100755 --- a/ci/test/05_before_script.sh +++ b/ci/test/05_before_script.sh @@ -47,6 +47,6 @@ if [ -z "$NO_DEPENDS" ]; then fi CI_EXEC "$SHELL_OPTS" make "$MAKEJOBS" -C depends HOST="$HOST" "$DEP_OPTS" LOG=1 fi -if [ -n "$PREVIOUS_RELEASES_TO_DOWNLOAD" ]; then - CI_EXEC test/get_previous_releases.py -b -t "$PREVIOUS_RELEASES_DIR" "${PREVIOUS_RELEASES_TO_DOWNLOAD}" +if [ "$DOWNLOAD_PREVIOUS_RELEASES" = "true" ]; then + CI_EXEC test/get_previous_releases.py -b -t "$PREVIOUS_RELEASES_DIR" fi diff --git a/ci/test/06_script_a.sh b/ci/test/06_script_a.sh index f446fc5f27b52..72871f1ba9d49 100755 --- a/ci/test/06_script_a.sh +++ b/ci/test/06_script_a.sh @@ -11,16 +11,19 @@ if [ -z "$NO_WERROR" ]; then BITCOIN_CONFIG_ALL="${BITCOIN_CONFIG_ALL} --enable-werror" fi +CI_EXEC "ccache --zero-stats --max-size=$CCACHE_SIZE" +PRINT_CCACHE_STATISTICS="ccache --version | head -n 1 && ccache --show-stats" + if [ -n "$ANDROID_TOOLS_URL" ]; then CI_EXEC make distclean || true CI_EXEC ./autogen.sh CI_EXEC ./configure "$BITCOIN_CONFIG_ALL" "$BITCOIN_CONFIG" || ( (CI_EXEC cat config.log) && false) CI_EXEC "make $MAKEJOBS && cd src/qt && ANDROID_HOME=${ANDROID_HOME} ANDROID_NDK_HOME=${ANDROID_NDK_HOME} make apk" + CI_EXEC "${PRINT_CCACHE_STATISTICS}" exit 0 fi BITCOIN_CONFIG_ALL="${BITCOIN_CONFIG_ALL} --enable-external-signer --bindir=$BASE_OUTDIR/bin --libdir=$BASE_OUTDIR/lib" -CI_EXEC "ccache --zero-stats --max-size=$CCACHE_SIZE" if [ -n "$CONFIG_SHELL" ]; then CI_EXEC "$CONFIG_SHELL" -c "./autogen.sh" @@ -57,6 +60,6 @@ fi CI_EXEC "${MAYBE_BEAR}" "${MAYBE_TOKEN}" make "$MAKEJOBS" "$GOAL" || ( echo "Build failure. Verbose build follows." && CI_EXEC make "$GOAL" V=1 ; false ) -CI_EXEC "ccache --version | head -n 1 && ccache --show-stats" +CI_EXEC "${PRINT_CCACHE_STATISTICS}" CI_EXEC du -sh "${DEPENDS_DIR}"/*/ CI_EXEC du -sh "${PREVIOUS_RELEASES_DIR}" diff --git a/ci/test/06_script_b.sh b/ci/test/06_script_b.sh index 75d08b404718a..2104693bee049 100755 --- a/ci/test/06_script_b.sh +++ b/ci/test/06_script_b.sh @@ -35,17 +35,38 @@ if [ "$RUN_FUNCTIONAL_TESTS" = "true" ]; then fi if [ "${RUN_TIDY}" = "true" ]; then + set -eo pipefail export P_CI_DIR="${BASE_BUILD_DIR}/navcoin-$HOST/src/" - CI_EXEC run-clang-tidy "${MAKEJOBS}" + ( CI_EXEC run-clang-tidy -quiet "${MAKEJOBS}" ) | grep -C5 "error" export P_CI_DIR="${BASE_BUILD_DIR}/navcoin-$HOST/" CI_EXEC "python3 ${DIR_IWYU}/include-what-you-use/iwyu_tool.py"\ " src/compat"\ + " src/dbwrapper.cpp"\ " src/init"\ + " src/kernel"\ + " src/node/chainstate.cpp"\ + " src/node/mempool_args.cpp"\ + " src/node/validation_cache_args.cpp"\ " src/policy/feerate.cpp"\ " src/policy/packages.cpp"\ " src/policy/settings.cpp"\ + " src/primitives/transaction.cpp"\ " src/rpc/fees.cpp"\ " src/rpc/signmessage.cpp"\ + " src/test/fuzz/txorphan.cpp"\ + " src/threadinterrupt.cpp"\ + " src/util/bip32.cpp"\ + " src/util/bytevectorhash.cpp"\ + " src/util/error.cpp"\ + " src/util/getuniquepath.cpp"\ + " src/util/hasher.cpp"\ + " src/util/message.cpp"\ + " src/util/moneystr.cpp"\ + " src/util/serfloat.cpp"\ + " src/util/spanparsing.cpp"\ + " src/util/strencodings.cpp"\ + " src/util/syserror.cpp"\ + " src/util/url.cpp"\ " -p . ${MAKEJOBS} -- -Xiwyu --cxx17ns -Xiwyu --mapping_file=${BASE_BUILD_DIR}/navcoin-$HOST/contrib/devtools/iwyu/bitcoin.core.imp" fi diff --git a/ci/test/wrap-qemu.sh b/ci/test/wrap-qemu.sh index fcd56f533e22f..eb31edbce8c45 100755 --- a/ci/test/wrap-qemu.sh +++ b/ci/test/wrap-qemu.sh @@ -6,7 +6,7 @@ export LC_ALL=C.UTF-8 -for b_name in {"${BASE_OUTDIR}/bin"/*,src/secp256k1/*tests,src/minisketch/test{,-verify},src/univalue/{no_nul,test_json,unitester,object}}; do +for b_name in {"${BASE_OUTDIR}/bin"/*,src/secp256k1/*tests,src/minisketch/test{,-verify},src/univalue/{test_json,unitester,object}}; do # shellcheck disable=SC2044 for b in $(find "${BASE_ROOT_DIR}" -executable -type f -name "$(basename "$b_name")"); do echo "Wrap $b ..." diff --git a/ci/test/wrap-wine.sh b/ci/test/wrap-wine.sh index 525db9eded561..1662f8f6a335f 100755 --- a/ci/test/wrap-wine.sh +++ b/ci/test/wrap-wine.sh @@ -6,7 +6,7 @@ export LC_ALL=C.UTF-8 -for b_name in {"${BASE_OUTDIR}/bin"/*,src/secp256k1/*tests,src/minisketch/test{,-verify},src/univalue/{no_nul,test_json,unitester,object}}.exe; do +for b_name in {"${BASE_OUTDIR}/bin"/*,src/secp256k1/*tests,src/minisketch/test{,-verify},src/univalue/{test_json,unitester,object}}.exe; do # shellcheck disable=SC2044 for b in $(find "${BASE_ROOT_DIR}" -executable -type f -name "$(basename "$b_name")"); do if (file "$b" | grep "Windows"); then diff --git a/configure.ac b/configure.ac index de0a8e7d59911..85019cf72762d 100644 --- a/configure.ac +++ b/configure.ac @@ -19,8 +19,19 @@ if test "$PKG_CONFIG" = ""; then AC_MSG_ERROR([pkg-config not found]) fi +# When compiling with depends, the `PKG_CONFIG_PATH` and `PKG_CONFIG_LIBDIR` variables, +# being set in a `config.site` file, are not exported to let the `--config-cache` option +# work properly. +if test -n "$PKG_CONFIG_PATH"; then + PKG_CONFIG="env PKG_CONFIG_PATH=$PKG_CONFIG_PATH $PKG_CONFIG" +fi +if test -n "$PKG_CONFIG_LIBDIR"; then + PKG_CONFIG="env PKG_CONFIG_LIBDIR=$PKG_CONFIG_LIBDIR $PKG_CONFIG" +fi + BITCOIN_DAEMON_NAME=navcoind BITCOIN_GUI_NAME=navcoin-qt +BITCOIN_TEST_NAME=test_navcoin BITCOIN_CLI_NAME=navcoin-cli BITCOIN_TX_NAME=navcoin-tx BITCOIN_UTIL_NAME=navcoin-util @@ -87,9 +98,6 @@ else AX_CXX_COMPILE_STDCXX([20], [noext], [mandatory]) fi -dnl Check if -latomic is required for -CHECK_ATOMIC - dnl check if additional link flags are required for std::filesystem CHECK_FILESYSTEM @@ -325,7 +333,7 @@ AC_ARG_ENABLE([werror], [enable_werror=no]) AC_ARG_ENABLE([external-signer], - [AS_HELP_STRING([--enable-external-signer],[compile external signer support (default is yes, requires Boost::Process)])], + [AS_HELP_STRING([--enable-external-signer],[compile external signer support (default is auto, requires Boost::Process)])], [use_external_signer=$enableval], [use_external_signer=auto]) @@ -511,7 +519,7 @@ if test "$enable_clmul" = "yes"; then fi TEMP_CXXFLAGS="$CXXFLAGS" -CXXFLAGS="$CXXFLAGS $SSE42_CXXFLAGS" +CXXFLAGS="$SSE42_CXXFLAGS $CXXFLAGS" AC_MSG_CHECKING([for SSE4.2 intrinsics]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include @@ -533,7 +541,7 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ CXXFLAGS="$TEMP_CXXFLAGS" TEMP_CXXFLAGS="$CXXFLAGS" -CXXFLAGS="$CXXFLAGS $SSE41_CXXFLAGS" +CXXFLAGS="$SSE41_CXXFLAGS $CXXFLAGS" AC_MSG_CHECKING([for SSE4.1 intrinsics]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include @@ -548,7 +556,7 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ CXXFLAGS="$TEMP_CXXFLAGS" TEMP_CXXFLAGS="$CXXFLAGS" -CXXFLAGS="$CXXFLAGS $AVX2_CXXFLAGS" +CXXFLAGS="$AVX2_CXXFLAGS $CXXFLAGS" AC_MSG_CHECKING([for AVX2 intrinsics]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include @@ -563,7 +571,7 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ CXXFLAGS="$TEMP_CXXFLAGS" TEMP_CXXFLAGS="$CXXFLAGS" -CXXFLAGS="$CXXFLAGS $X86_SHANI_CXXFLAGS" +CXXFLAGS="$X86_SHANI_CXXFLAGS $CXXFLAGS" AC_MSG_CHECKING([for x86 SHA-NI intrinsics]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include @@ -584,7 +592,7 @@ AX_CHECK_COMPILE_FLAG([-march=armv8-a+crc+crypto], [ARM_CRC_CXXFLAGS="-march=arm AX_CHECK_COMPILE_FLAG([-march=armv8-a+crc+crypto], [ARM_SHANI_CXXFLAGS="-march=armv8-a+crc+crypto"], [], [$CXXFLAG_WERROR]) TEMP_CXXFLAGS="$CXXFLAGS" -CXXFLAGS="$CXXFLAGS $ARM_CRC_CXXFLAGS" +CXXFLAGS="$ARM_CRC_CXXFLAGS $CXXFLAGS" AC_MSG_CHECKING([for ARMv8 CRC32 intrinsics]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include @@ -603,7 +611,7 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ CXXFLAGS="$TEMP_CXXFLAGS" TEMP_CXXFLAGS="$CXXFLAGS" -CXXFLAGS="$CXXFLAGS $ARM_SHANI_CXXFLAGS" +CXXFLAGS="$ARM_SHANI_CXXFLAGS $CXXFLAGS" AC_MSG_CHECKING([for ARMv8 SHA-NI intrinsics]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include @@ -887,6 +895,9 @@ AC_C_BIGENDIAN dnl Check for pthread compile/link requirements AX_PTHREAD +dnl Check if -latomic is required for +CHECK_ATOMIC + dnl The following macro will add the necessary defines to bitcoin-config.h, but dnl they also need to be passed down to any subprojects. Pull the results out of dnl the cache and add them to CPPFLAGS. @@ -1907,6 +1918,7 @@ AC_SUBST(COPYRIGHT_HOLDERS_SUBSTITUTION, "_COPYRIGHT_HOLDERS_SUBSTITUTION") AC_SUBST(COPYRIGHT_HOLDERS_FINAL, "_COPYRIGHT_HOLDERS_FINAL") AC_SUBST(BITCOIN_DAEMON_NAME) AC_SUBST(BITCOIN_GUI_NAME) +AC_SUBST(BITCOIN_TEST_NAME) AC_SUBST(BITCOIN_CLI_NAME) AC_SUBST(BITCOIN_TX_NAME) AC_SUBST(BITCOIN_UTIL_NAME) @@ -1978,6 +1990,9 @@ AC_CONFIG_LINKS([test/functional/test_runner.py:test/functional/test_runner.py]) AC_CONFIG_LINKS([test/fuzz/test_runner.py:test/fuzz/test_runner.py]) AC_CONFIG_LINKS([test/util/test_runner.py:test/util/test_runner.py]) AC_CONFIG_LINKS([test/util/rpcauth-test.py:test/util/rpcauth-test.py]) +AC_CONFIG_LINKS([src/qt/Makefile:src/qt/Makefile]) +AC_CONFIG_LINKS([src/qt/test/Makefile:src/qt/test/Makefile]) +AC_CONFIG_LINKS([src/test/Makefile:src/test/Makefile]) dnl boost's m4 checks do something really nasty: they export these vars. As a dnl result, they leak into secp256k1's configure and crazy things happen. @@ -2049,5 +2064,6 @@ echo " CPPFLAGS = $DEBUG_CPPFLAGS $HARDENED_CPPFLAGS $CORE_CPPFLAGS $CPP echo " CXX = $CXX" echo " CXXFLAGS = $LTO_CXXFLAGS $DEBUG_CXXFLAGS $HARDENED_CXXFLAGS $WARN_CXXFLAGS $NOWARN_CXXFLAGS $ERROR_CXXFLAGS $GPROF_CXXFLAGS $CORE_CXXFLAGS $CXXFLAGS" echo " LDFLAGS = $LTO_LDFLAGS $PTHREAD_LIBS $HARDENED_LDFLAGS $GPROF_LDFLAGS $CORE_LDFLAGS $LDFLAGS" +echo " AR = $AR" echo " ARFLAGS = $ARFLAGS" echo diff --git a/contrib/builder-keys/keys.txt b/contrib/builder-keys/keys.txt index c70069b440b03..f8377cce33254 100644 --- a/contrib/builder-keys/keys.txt +++ b/contrib/builder-keys/keys.txt @@ -19,6 +19,7 @@ BF6273FAEF7CC0BA1F562E50989F6B3048A116B5 Dev Random (devrandom) D35176BE9264832E4ACA8986BF0792FBE95DC863 fivepiece (fivepiece) 6F993B250557E7B016ADE5713BDCDA2D87A881D9 Fuzzbawls (Fuzzbawls) 01CDF4627A3B88AAE4A571C87588242FBE38D3A8 Gavin Andresen (gavinandresen) +6B002C6EA3F91B1B0DF0C9BC8F617F1200A6D25C Gloria Zhao (glozow) D1DBF2C4B96F2DEBF4C16654410108112E7EA81F Hennadii Stepanov (hebasto) A2FD494D0021AA9B4FA58F759102B7AE654A4A5A Ilyas Ridhuan (IlyasRidhuan) 2688F5A9A4BE0F295E921E8A25F27A38A47AD566 James O'Beirne (jamesob) diff --git a/contrib/devtools/iwyu/bitcoin.core.imp b/contrib/devtools/iwyu/bitcoin.core.imp index ce7786f58c24b..919ffab102ddb 100644 --- a/contrib/devtools/iwyu/bitcoin.core.imp +++ b/contrib/devtools/iwyu/bitcoin.core.imp @@ -3,4 +3,5 @@ { include: [ "", private, "", public ] }, { include: [ "", private, "", public ] }, { include: [ "", private, "", public ] }, + { include: [ "", private, "", public ] }, ] diff --git a/contrib/guix/INSTALL.md b/contrib/guix/INSTALL.md index 68aae18731d04..a9a41ddff6b4b 100644 --- a/contrib/guix/INSTALL.md +++ b/contrib/guix/INSTALL.md @@ -72,11 +72,11 @@ writing (July 2021). Guix is expected to be more widely packaged over time. For an up-to-date view on Guix's package status/version across distros, please see: https://repology.org/project/guix/versions -### Debian 11 (Bullseye)/Ubuntu 21.04 (Hirsute Hippo) +### Debian / Ubuntu Guix v1.2.0 is available as a distribution package starting in [Debian 11](https://packages.debian.org/bullseye/guix) and [Ubuntu -21.04](https://packages.ubuntu.com/hirsute/guix). +21.04](https://packages.ubuntu.com/search?keywords=guix). Note that if you intend on using Guix without using any substitutes (more details [here][security-model]), v1.2.0 has a known problem when building GnuTLS diff --git a/contrib/guix/README.md b/contrib/guix/README.md index af5607c710d34..ed6ac8d5895b2 100644 --- a/contrib/guix/README.md +++ b/contrib/guix/README.md @@ -382,7 +382,7 @@ https://ci.guix.gnu.org is automatically used unless the `--no-substitutes` flag is supplied. This default list of substitute servers is overridable both on a `guix-daemon` level and when you invoke `guix` commands. See examples below for the various ways of adding dongcarl's substitute server after having [authorized -his signing key](#authorize-the-signing-keys). +his signing key](#step-1-authorize-the-signing-keys). Change the **default list** of substitute servers by starting `guix-daemon` with the `--substitute-urls` option (you will likely need to edit your init script): diff --git a/contrib/guix/libexec/build.sh b/contrib/guix/libexec/build.sh index ad3129184c9aa..2795a90036970 100755 --- a/contrib/guix/libexec/build.sh +++ b/contrib/guix/libexec/build.sh @@ -223,6 +223,7 @@ CONFIGFLAGS="--enable-reduce-exports --disable-bench --disable-gui-tests --disab # CFLAGS HOST_CFLAGS="-O2 -g" +HOST_CFLAGS+=$(find /gnu/store -maxdepth 1 -mindepth 1 -type d -exec echo -n " -ffile-prefix-map={}=/usr" \;) case "$HOST" in *linux*) HOST_CFLAGS+=" -ffile-prefix-map=${PWD}=." ;; *mingw*) HOST_CFLAGS+=" -fno-ident" ;; @@ -368,6 +369,8 @@ mkdir -p "$DISTSRC" # has not been run before buildling, this file will be a stub cp "${DISTSRC}/share/examples/bitcoin.conf" "${DISTNAME}/" + cp -r "${DISTSRC}/share/rpcauth" "${DISTNAME}/share/" + # Finally, deterministically produce {non-,}debug binary tarballs ready # for release case "$HOST" in diff --git a/contrib/guix/manifest.scm b/contrib/guix/manifest.scm index df51d659e8ad1..7c45a5b86608e 100644 --- a/contrib/guix/manifest.scm +++ b/contrib/guix/manifest.scm @@ -132,12 +132,19 @@ chain for " target " development.")) (define base-gcc gcc-10) (define base-linux-kernel-headers linux-libre-headers-5.15) +;; https://gcc.gnu.org/install/configure.html +(define (hardened-gcc gcc) + (package-with-extra-configure-variable ( + package-with-extra-configure-variable gcc + "--enable-default-ssp" "yes") + "--enable-default-pie" "yes")) + (define* (make-bitcoin-cross-toolchain target #:key (base-gcc-for-libc base-gcc) (base-kernel-headers base-linux-kernel-headers) - (base-libc (make-glibc-without-werror glibc-2.24)) - (base-gcc (make-gcc-rpath-link base-gcc))) + (base-libc (make-glibc-with-bind-now (make-glibc-without-werror glibc-2.24))) + (base-gcc (make-gcc-rpath-link (hardened-gcc base-gcc)))) "Convenience wrapper around MAKE-CROSS-TOOLCHAIN with default values desirable for building Bitcoin Core release binaries." (make-cross-toolchain target @@ -147,7 +154,10 @@ desirable for building Bitcoin Core release binaries." base-gcc)) (define (make-gcc-with-pthreads gcc) - (package-with-extra-configure-variable gcc "--enable-threads" "posix")) + (package-with-extra-configure-variable + (package-with-extra-patches gcc + (search-our-patches "gcc-10-remap-guix-store.patch")) + "--enable-threads" "posix")) (define (make-mingw-w64-cross-gcc cross-gcc) (package-with-extra-patches cross-gcc @@ -184,7 +194,8 @@ chain for " target " development.")) (define (make-nsis-for-gcc-10 base-nsis) (package-with-extra-patches base-nsis - (search-our-patches "nsis-gcc-10-memmove.patch"))) + (search-our-patches "nsis-gcc-10-memmove.patch" + "nsis-disable-installer-reloc.patch"))) (define (fix-ppc64-nx-default lief) (package-with-extra-patches lief @@ -253,7 +264,7 @@ thus should be able to compile on most platforms where these exist.") (license license:gpl3+))) ; license is with openssl exception (define-public python-elfesteem - (let ((commit "87bbd79ab7e361004c98cc8601d4e5f029fd8bd5")) + (let ((commit "2eb1e5384ff7a220fd1afacd4a0170acff54fe56")) (package (name "python-elfesteem") (version (git-version "0.1" "1" commit)) @@ -266,8 +277,7 @@ thus should be able to compile on most platforms where these exist.") (file-name (git-file-name name commit)) (sha256 (base32 - "1nyvjisvyxyxnd0023xjf5846xd03lwawp5pfzr8vrky7wwm5maz")) - (patches (search-our-patches "elfsteem-value-error-python-39.patch")))) + "07x6p8clh11z8s1n2kdxrqwqm2almgc5qpkcr9ckb6y5ivjdr5r6")))) (build-system python-build-system) ;; There are no tests, but attempting to run python setup.py test leads to ;; PYTHONPATH problems, just disable the test @@ -400,6 +410,11 @@ thus should be able to compile on most platforms where these exist.") (string-append indent "@unittest.skip(\"Disabled by Guix\")\n" line))) + (substitute* "tests/test_validate.py" + (("^(.*)def test_revocation_mode_soft" line indent) + (string-append indent + "@unittest.skip(\"Disabled by Guix\")\n" + line))) #t)) (replace 'check (lambda _ @@ -518,6 +533,12 @@ inspecting signatures in Mach-O binaries.") (define (make-glibc-without-werror glibc) (package-with-extra-configure-variable glibc "enable_werror" "no")) +(define (make-glibc-with-stack-protector glibc) + (package-with-extra-configure-variable glibc "--enable-stack-protector" "all")) + +(define (make-glibc-with-bind-now glibc) + (package-with-extra-configure-variable glibc "--enable-bind-now" "yes")) + (define-public glibc-2.24 (package (inherit glibc-2.31) @@ -535,7 +556,8 @@ inspecting signatures in Mach-O binaries.") "glibc-versioned-locpath.patch" "glibc-2.24-elfm-loadaddr-dynamic-rewrite.patch" "glibc-2.24-no-build-time-cxx-header-run.patch" - "glibc-2.24-fcommon.patch")))))) + "glibc-2.24-fcommon.patch" + "glibc-2.24-guix-prefix.patch")))))) (define-public glibc-2.27/bitcoin-patched (package @@ -552,7 +574,8 @@ inspecting signatures in Mach-O binaries.") "1b2n1gxv9f4fd5yy68qjbnarhf8mf4vmlxk10i3328c1w5pmp0ca")) (patches (search-our-patches "glibc-ldd-x86_64.patch" "glibc-2.27-riscv64-Use-__has_include-to-include-asm-syscalls.h.patch" - "glibc-2.27-dont-redefine-nss-database.patch")))))) + "glibc-2.27-dont-redefine-nss-database.patch" + "glibc-2.27-guix-prefix.patch")))))) (packages->manifest (append @@ -603,8 +626,8 @@ inspecting signatures in Mach-O binaries.") ((string-contains target "-linux-") (list (cond ((string-contains target "riscv64-") (make-bitcoin-cross-toolchain target - #:base-libc (make-glibc-without-werror glibc-2.27/bitcoin-patched) - #:base-kernel-headers base-linux-kernel-headers)) + #:base-libc (make-glibc-with-stack-protector + (make-glibc-with-bind-now (make-glibc-without-werror glibc-2.27/bitcoin-patched))))) (else (make-bitcoin-cross-toolchain target))))) ((string-contains target "darwin") diff --git a/contrib/guix/patches/elfsteem-value-error-python-39.patch b/contrib/guix/patches/elfsteem-value-error-python-39.patch deleted file mode 100644 index 21e1228afd83c..0000000000000 --- a/contrib/guix/patches/elfsteem-value-error-python-39.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/examples/otool.py b/examples/otool.py -index 2b8efc0..d797b2e 100755 ---- a/examples/otool.py -+++ b/examples/otool.py -@@ -342,7 +342,7 @@ if __name__ == '__main__': - try: - e = macho_init.MACHO(raw, - parseSymbols = False) -- except ValueError, err: -+ except ValueError as err: - print("%s:" %file) - print(" %s" % err) - continue diff --git a/contrib/guix/patches/gcc-10-remap-guix-store.patch b/contrib/guix/patches/gcc-10-remap-guix-store.patch new file mode 100644 index 0000000000000..a47ef7a2df130 --- /dev/null +++ b/contrib/guix/patches/gcc-10-remap-guix-store.patch @@ -0,0 +1,25 @@ +From aad25427e74f387412e8bc9a9d7bbc6c496c792f Mon Sep 17 00:00:00 2001 +From: Andrew Chow +Date: Wed, 6 Jul 2022 16:49:41 -0400 +Subject: [PATCH] guix: remap guix store paths to /usr + +--- + libgcc/Makefile.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/libgcc/Makefile.in b/libgcc/Makefile.in +index 851e7657d07..476c2becd1c 100644 +--- a/libgcc/Makefile.in ++++ b/libgcc/Makefile.in +@@ -854,7 +854,7 @@ endif + # libgcc_eh.a, only LIB2ADDEH matters. If we do, only LIB2ADDEHSTATIC and + # LIB2ADDEHSHARED matter. (Usually all three are identical.) + +-c_flags := -fexceptions ++c_flags := -fexceptions $(shell find /gnu/store -maxdepth 1 -mindepth 1 -type d -exec echo -n " -ffile-prefix-map={}=/usr" \;) + + ifeq ($(enable_shared),yes) + +-- +2.37.0 + diff --git a/contrib/guix/patches/glibc-2.24-guix-prefix.patch b/contrib/guix/patches/glibc-2.24-guix-prefix.patch new file mode 100644 index 0000000000000..cba2f59a8dcdb --- /dev/null +++ b/contrib/guix/patches/glibc-2.24-guix-prefix.patch @@ -0,0 +1,25 @@ +Without ffile-prefix-map, the debug symbols will contain paths for the +guix store which will include the hashes of each package. However, the +hash for the same package will differ when on different architectures. +In order to be reproducible regardless of the architecture used to build +the package, map all guix store prefixes to something fixed, e.g. /usr. + +We might be able to drop this in favour of using --with-nonshared-cflags +when we being using newer versions of glibc. + +--- a/Makeconfig ++++ b/Makeconfig +@@ -950,6 +950,10 @@ object-suffixes-for-libc += .oS + # shared objects. We don't want to use CFLAGS-os because users may, for + # example, make that processor-specific. + CFLAGS-.oS = $(CFLAGS-.o) $(PIC-ccflag) ++ ++# Map Guix store paths to /usr ++CFLAGS-.oS += `find /gnu/store -maxdepth 1 -mindepth 1 -type d -exec echo -n " -fdebug-prefix-map={}=/usr" \;` ++ + CPPFLAGS-.oS = $(CPPFLAGS-.o) -DPIC -DLIBC_NONSHARED=1 + libtype.oS = lib%_nonshared.a + endif +-- +2.35.1 + diff --git a/contrib/guix/patches/glibc-2.27-guix-prefix.patch b/contrib/guix/patches/glibc-2.27-guix-prefix.patch new file mode 100644 index 0000000000000..cdb3971f7a049 --- /dev/null +++ b/contrib/guix/patches/glibc-2.27-guix-prefix.patch @@ -0,0 +1,25 @@ +Without ffile-prefix-map, the debug symbols will contain paths for the +guix store which will include the hashes of each package. However, the +hash for the same package will differ when on different architectures. +In order to be reproducible regardless of the architecture used to build +the package, map all guix store prefixes to something fixed, e.g. /usr. + +We might be able to drop this in favour of using --with-nonshared-cflags +when we being using newer versions of glibc. + +--- a/Makeconfig ++++ b/Makeconfig +@@ -992,6 +992,10 @@ object-suffixes := + CPPFLAGS-.o = $(pic-default) + # libc.a must be compiled with -fPIE/-fpie for static PIE. + CFLAGS-.o = $(filter %frame-pointer,$(+cflags)) $(pie-default) ++ ++# Map Guix store paths to /usr ++CFLAGS-.o += `find /gnu/store -maxdepth 1 -mindepth 1 -type d -exec echo -n " -fdebug-prefix-map={}=/usr" \;` ++ + libtype.o := lib%.a + object-suffixes += .o + ifeq (yes,$(build-shared)) +-- +2.35.1 + diff --git a/contrib/guix/patches/nsis-disable-installer-reloc.patch b/contrib/guix/patches/nsis-disable-installer-reloc.patch new file mode 100644 index 0000000000000..4914527e56beb --- /dev/null +++ b/contrib/guix/patches/nsis-disable-installer-reloc.patch @@ -0,0 +1,30 @@ +Patch NSIS so that it's installer stubs, produced at NSIS build time, +do not contain .reloc sections, which will exist by default when using +binutils/ld 2.36+. + +This ultimately fixes an issue when running the installer with the +"Force randomization for images (Mandatory ASLR)" setting active. + +This patch has not yet been sent upstream, because it's not clear if this +is the best fix, for the underlying issue, which seems to be that makensis +doesn't account for .reloc sections when it builds installers. + +The existence of a reloc section shouldn't be a problem, and, if anything, +is actually a requirement for working ASLR. All other Windows binaries we +produce contain them, and function correctly when under the same +"Force randomization for images (Mandatory ASLR)" setting. + +See: +https://github.com/bitcoin/bitcoin/issues/25726 +https://sourceforge.net/p/nsis/bugs/1131/ + +--- a/SCons/Config/gnu ++++ b/SCons/Config/gnu +@@ -102,6 +102,7 @@ stub_env.Append(LINKFLAGS = ['-mwindows']) # build windows executables + stub_env.Append(LINKFLAGS = ['$NODEFLIBS_FLAG']) # no standard libraries + stub_env.Append(LINKFLAGS = ['$ALIGN_FLAG']) # 512 bytes align + stub_env.Append(LINKFLAGS = ['$MAP_FLAG']) # generate map file ++stub_env.Append(LINKFLAGS = ['-Wl,--disable-reloc-section']) + + conf = FlagsConfigure(stub_env) + conf.CheckCompileFlag('-fno-tree-loop-distribute-patterns') # GCC 10: Don't generate msvcrt!memmove calls (bug #1248) diff --git a/contrib/seeds/makeseeds.py b/contrib/seeds/makeseeds.py index 37c6f5fd7c9f6..eda58c370f293 100755 --- a/contrib/seeds/makeseeds.py +++ b/contrib/seeds/makeseeds.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# Copyright (c) 2013-2020 The Bitcoin Core developers +# Copyright (c) 2013-2022 The Bitcoin Core developers # Distributed under the MIT software license, see the accompanying # file COPYING or http://www.opensource.org/licenses/mit-license.php. # @@ -7,10 +7,10 @@ # import argparse +import collections import ipaddress import re import sys -import collections from typing import List, Dict, Union from asmap import ASMap, net_to_prefix @@ -38,7 +38,8 @@ r"0.20.(0|1|2|99)|" r"0.21.(0|1|2|99)|" r"22.(0|99)|" - r"23.99" + r"23.(0|99)|" + r"24.99" r")") def parseline(line: str) -> Union[dict, None]: diff --git a/contrib/seeds/nodes_main.txt b/contrib/seeds/nodes_main.txt index d8e34bdb602af..f8572b26c7f24 100644 --- a/contrib/seeds/nodes_main.txt +++ b/contrib/seeds/nodes_main.txt @@ -1,688 +1,856 @@ -2.37.30.144:8777 -2.138.174.158:8333 -2.152.78.124:8333 -5.8.18.154:8333 -5.45.74.50:8333 -5.79.123.3:8333 -5.102.168.217:22220 -5.103.137.146:9333 -5.128.87.126:8333 -5.172.132.200:8333 -5.188.62.18:8333 -5.254.101.226:8334 -8.210.18.56:8333 -8.210.92.32:8333 -14.13.34.225:16181 -14.39.151.167:8333 -18.196.79.108:8333 -18.218.139.58:48333 -20.184.15.116:8433 -23.175.0.220:8333 -23.233.107.21:8333 -24.35.68.229:8333 -24.37.3.26:8333 -24.102.91.203:8333 -24.116.153.115:8333 -24.134.6.165:8333 -24.155.218.13:8333 -24.160.137.173:8333 -24.177.106.85:8333 -24.184.0.146:8333 -24.194.222.116:8333 -24.205.215.192:8333 -27.124.108.19:8333 -31.14.40.64:8333 -31.47.202.112:8333 -31.165.115.7:8333 -34.65.45.157:8333 -34.78.48.104:8333 -34.80.134.68:8333 -34.101.132.198:8333 -34.227.68.216:8333 -35.137.212.22:8333 -35.231.190.134:8333 -37.1.217.35:8333 -37.15.62.32:8333 -37.143.118.174:8333 -37.200.59.67:8333 -37.205.9.165:8333 -38.23.180.228:8333 -38.65.119.26:8333 -38.141.134.140:8333 -39.109.122.127:8444 -41.79.70.146:8333 -41.193.122.191:8333 -43.225.62.107:8333 -45.35.73.152:8333 -45.43.97.103:8333 -45.63.10.52:20008 -45.84.153.40:8333 -45.95.64.225:8333 -45.129.180.214:8333 -45.154.255.162:8333 -45.226.80.102:8333 -46.6.10.230:8333 -46.23.87.218:8333 -46.32.50.98:8333 -46.47.84.85:8333 -46.48.126.58:8333 -46.146.248.89:8333 -46.165.221.209:9333 -46.166.142.2:8333 -46.166.162.45:20001 -46.173.50.58:8333 -46.175.178.3:8333 -46.188.30.118:8333 -46.219.120.59:3673 -46.229.238.187:8333 -47.93.230.171:8333 -47.100.162.210:18332 -47.144.106.249:8333 -47.188.70.205:8333 -47.227.226.242:8333 -50.2.13.164:8333 -50.5.46.195:8333 -50.45.128.28:8333 -51.148.153.60:8333 -51.154.62.103:8333 -51.154.131.18:8333 -51.158.150.155:8333 -51.159.2.218:8333 -54.198.19.34:8333 -58.105.168.41:8333 -58.158.0.86:8333 -60.251.129.61:8336 -61.239.91.250:8333 -62.28.190.194:8333 -62.152.58.16:9421 -62.171.129.32:8333 -62.251.54.163:8333 -63.247.147.166:8333 -64.33.68.176:8333 -64.156.192.61:8333 -64.187.175.226:8333 -64.233.245.39:8333 -64.237.82.149:8333 -65.101.247.26:8333 -66.29.129.218:8333 -66.49.204.11:8333 -66.58.243.215:8333 -66.85.234.129:8333 -66.130.120.52:8333 -67.10.121.145:8333 -67.210.228.203:8333 -67.213.87.21:8333 -68.181.4.12:8333 -69.7.124.146:8333 -69.8.175.201:8333 -69.59.18.22:8333 -69.119.193.9:8333 -69.130.201.27:8333 -69.131.101.176:8333 -70.15.194.32:8333 -70.64.27.12:8333 -72.29.170.151:8333 -72.74.34.99:8333 -72.133.177.119:8333 -73.166.84.222:8333 -74.67.240.204:8333 -74.91.115.229:8333 -74.118.137.119:8333 -74.213.251.203:8333 -74.220.255.190:8333 -76.11.60.155:8333 -76.66.144.127:8333 -77.70.16.245:8333 -77.85.204.149:8333 -77.105.87.97:8333 -77.120.113.69:8433 -77.120.113.71:8433 -77.120.122.116:8433 -77.120.122.118:8433 -77.162.190.90:8333 -77.167.245.239:55544 -77.232.41.189:8333 -78.20.227.249:8333 -78.21.167.8:8333 -78.27.139.13:8333 -78.43.208.25:8333 -78.63.28.146:8333 -78.72.228.239:8333 -78.108.102.8:8333 -78.129.0.39:8333 -78.129.169.69:8333 -79.77.182.180:8333 -79.77.182.183:8333 -79.107.178.59:8333 -80.55.225.158:8333 -80.64.211.102:8333 -80.64.211.103:8333 -80.71.57.50:8333 -80.81.3.27:8333 -80.82.55.43:8333 -80.88.172.227:64264 -80.89.203.172:8001 -80.93.213.246:8333 -80.147.82.165:8333 -80.229.28.60:8333 -80.247.233.40:8333 -80.255.8.93:8333 -81.7.17.202:8333 -81.10.241.165:8333 -81.21.86.157:8333 -81.171.22.143:8333 -81.237.206.224:8343 -82.69.23.195:8333 -82.96.96.40:8333 -82.116.50.101:8333 -82.136.99.122:8333 -82.149.97.25:17567 -82.154.24.209:8333 -82.165.241.50:8333 -82.197.218.253:8333 -82.202.68.231:8333 -83.137.41.10:8333 -83.208.6.211:8333 -83.217.8.31:44420 -83.220.110.48:8333 -83.222.138.85:8333 -83.243.191.199:8333 -84.22.139.57:8333 -84.27.155.17:8333 -84.75.28.247:8333 -84.112.60.16:8333 -84.211.7.56:8333 -84.237.7.249:8333 -85.23.51.177:8333 -85.24.145.198:8333 -85.184.138.108:8333 -85.194.238.134:8333 -85.195.54.110:8333 -85.208.71.36:8333 -85.208.71.39:8333 -85.214.136.45:8333 -85.214.161.252:8333 -85.227.245.128:8333 -86.18.34.243:8333 -86.20.50.170:8333 -86.49.105.90:8333 -86.76.7.132:8333 -86.100.26.188:8333 -86.106.143.143:55373 -86.120.58.66:8333 -86.133.251.239:8901 -86.149.8.23:8901 -87.78.197.234:8333 -87.120.8.5:20008 -87.121.37.156:8333 -88.82.181.44:8333 -88.87.93.52:1691 -88.98.235.134:8333 -88.136.187.214:8333 -88.147.244.250:8333 -88.148.153.148:8333 -88.212.45.166:8333 -88.212.55.138:8333 -89.38.96.153:9273 -89.47.161.135:8333 -89.88.62.190:8333 -89.158.32.44:8333 -89.163.145.240:8333 -89.163.249.234:3673 -89.176.196.80:8333 -89.216.21.96:8333 -90.84.227.255:8333 -90.146.130.214:8333 -90.250.9.1:8333 -91.93.194.154:8333 -91.106.188.229:8333 -91.126.40.109:8333 -91.137.127.123:8333 -91.147.232.98:8333 -91.152.123.18:8333 -91.178.17.120:8333 -91.204.99.178:8333 -91.223.175.14:8333 -92.42.110.242:8333 -92.53.90.84:8333 -92.221.155.228:8333 -93.57.81.162:8333 -93.95.88.13:8333 -93.103.13.1:8333 -93.123.180.164:8333 -93.190.117.26:8333 -94.105.125.240:8333 -94.110.23.215:8333 -94.154.159.99:8333 -94.189.161.119:8333 -94.203.255.70:8333 -94.232.173.93:8333 -95.79.122.99:8333 -95.80.1.110:8333 -95.83.73.31:8333 -95.110.133.223:8333 -95.110.234.93:8333 -95.164.65.194:8333 -95.165.8.182:8333 -95.174.219.101:8333 -95.191.130.100:8333 -95.214.53.154:8333 -95.215.205.180:8333 -96.43.130.234:8333 -98.25.201.31:8333 -98.128.247.182:8333 -98.171.21.129:8333 -99.147.135.161:8333 -101.100.163.118:8327 -102.132.245.16:8333 -102.182.204.96:8333 -102.182.235.245:8333 -103.14.245.250:8333 -103.47.192.15:8333 -103.84.84.250:8335 -103.99.168.130:8333 -103.99.168.140:8333 -103.198.192.14:20008 -103.232.104.227:8333 -104.143.2.195:8333 -104.172.235.227:8333 -104.238.220.199:8333 -107.11.115.68:8333 -107.173.166.43:8333 -108.4.212.83:8333 -109.136.73.97:8333 -109.173.98.23:8333 -109.190.68.116:8333 -109.235.246.60:8333 -109.248.206.13:8333 -110.12.64.96:8333 -111.90.140.46:8333 -111.90.159.184:50001 -113.107.201.131:8333 -115.47.141.250:8885 -116.58.171.67:8333 -116.87.57.218:8333 -116.202.161.56:8333 -117.51.159.130:8333 -118.103.126.140:28333 -121.45.190.210:8333 -121.99.193.25:8333 -122.112.148.153:8339 -122.148.135.234:8333 -128.0.190.26:8333 -128.65.194.136:8333 -129.126.172.115:8333 -129.226.125.10:8333 -131.188.40.191:8333 -134.195.185.52:8333 -135.180.44.61:8333 -136.52.114.123:8333 -136.56.170.96:8333 -137.116.213.143:8333 -137.226.34.46:8333 -138.43.233.57:8333 -139.130.41.82:8333 -140.190.12.129:8333 -142.4.105.77:8333 -142.54.181.218:8333 -143.177.231.247:8333 -143.178.64.10:8333 -144.34.161.65:18333 -146.4.124.134:8333 -146.83.56.69:8333 -146.90.193.68:8333 -146.196.55.156:28833 -148.66.50.50:8335 -148.251.1.20:8343 -151.48.95.212:8333 -151.252.193.245:8333 -152.44.137.83:8333 -152.115.191.196:8333 -154.221.31.86:8333 -156.17.103.2:8088 -157.138.20.22:8333 -158.58.188.37:8333 -158.140.209.79:8333 -159.89.230.128:8333 -159.246.25.52:8333 -160.20.59.250:8433 -162.0.234.190:8333 -162.62.26.218:8333 -162.250.188.194:8333 -162.251.70.82:8333 -163.158.206.255:8333 -164.68.105.105:8333 -165.228.174.117:8333 -166.62.82.103:32771 -166.70.49.26:8333 -166.78.241.9:8333 -166.78.241.25:8333 -167.71.73.244:8333 -167.179.147.155:8333 -168.91.238.8:8333 -172.105.21.216:8333 -172.117.105.95:8333 -173.23.103.30:8000 -173.205.92.151:54805 -173.205.92.154:54805 -173.205.92.157:54805 -173.208.152.218:8333 -173.241.227.243:8333 -174.3.4.232:8333 -174.17.11.22:8333 -174.88.241.167:8333 -174.114.102.41:8333 -174.114.250.86:8333 -174.142.191.136:8333 -175.39.72.87:8333 -176.12.16.135:8333 -176.37.23.30:8333 -176.62.179.221:8333 -176.74.136.237:8333 -176.99.6.226:8333 -176.212.185.153:8333 -177.81.236.117:8333 -178.19.106.26:8333 -178.21.118.178:8333 -178.33.232.69:8333 -178.79.84.139:8333 -178.124.162.209:8333 -178.132.2.246:8333 -178.150.96.46:8333 -178.162.212.44:8333 -178.193.226.120:8333 -178.236.137.63:8333 -180.150.46.187:8333 -181.164.210.228:8530 -183.110.220.210:30301 -184.95.58.166:8336 -184.164.147.82:41333 -184.171.208.109:8333 -185.17.143.220:8333 -185.21.217.49:8333 -185.25.48.184:8333 -185.28.96.16:8333 -185.31.136.246:8333 -185.64.116.15:8333 -185.68.249.91:8333 -185.108.247.190:8333 -185.141.60.36:8333 -185.148.3.227:8333 -185.148.145.74:8333 -185.159.20.143:8333 -185.167.113.59:8333 -185.185.26.141:8111 -185.189.132.178:57780 -185.204.197.112:8333 -185.209.70.17:8333 -185.220.156.193:8333 -185.238.129.113:8333 -185.239.221.5:8333 -185.244.217.39:8333 -185.254.97.164:8333 -186.33.167.11:8333 -188.32.14.31:8334 -188.42.40.234:18333 -188.134.8.36:8333 -188.138.88.14:8333 -188.156.110.239:8333 -188.165.244.143:8333 -188.213.68.38:8333 -188.214.129.65:20012 -188.242.15.74:8333 -188.244.4.78:8333 -189.39.6.82:8333 -189.207.46.32:8333 -189.212.121.74:8333 -192.3.11.20:8333 -192.65.170.15:8333 -192.146.137.44:8333 -192.182.157.119:8333 -192.187.109.141:8333 -192.227.80.83:8333 -193.10.203.23:8334 -193.32.127.160:58477 -193.32.127.162:58477 -193.58.196.212:8333 -193.106.29.106:8333 -193.138.154.43:8333 -193.178.170.232:8333 -193.196.37.62:8333 -193.222.130.14:8333 -193.234.50.227:8333 -194.14.246.205:8333 -194.135.135.69:8333 -194.147.113.201:8333 -194.165.30.20:8333 -194.219.62.23:8333 -195.56.63.4:8333 -195.134.183.188:8333 -195.208.103.30:8444 -195.208.103.31:8444 -198.1.231.6:8333 -198.12.14.136:8333 -198.84.237.70:8333 -198.178.120.5:8112 -199.48.92.184:8333 -199.68.199.19:8333 -199.182.184.204:8333 -199.189.242.141:8333 -199.247.7.208:8333 -200.122.181.37:8333 -201.191.6.103:8333 -202.107.219.130:8333 -202.108.211.135:8333 -203.94.33.112:8333 -203.130.48.117:8885 -203.132.94.196:8333 -203.162.13.181:8332 -204.191.201.43:8333 -204.229.10.90:8333 -205.178.41.124:8333 -206.55.178.157:8333 -206.126.203.8:8333 -206.174.115.96:8333 -206.223.153.52:8333 -207.188.159.25:8333 -207.229.46.80:8333 -209.58.145.157:8333 -209.126.81.147:8333 -209.145.63.150:8333 -209.209.10.30:8333 -209.237.127.227:8333 -212.99.226.36:9020 -212.185.86.84:8333 -212.227.211.87:8333 -213.5.36.58:8333 -213.89.236.219:8333 -213.93.145.183:8333 -213.214.66.182:8333 -216.41.249.178:8333 -216.146.251.8:8333 -216.249.70.22:8333 -217.11.240.4:8333 -217.15.178.7:8333 -217.24.233.116:8333 -217.64.148.98:51401 -217.113.121.169:8333 -217.170.124.170:8333 -220.132.135.54:8333 -220.221.58.25:8333 -220.233.178.199:8333 -221.219.97.105:2001 -[2001:1608:1b:f9::1]:26491 -[2001:1620:510::2]:8333 -[2001:1bc0:c1::2000]:8333 -[2001:470:1f0a:89a::2]:8333 -[2001:470:de5a::ec]:9333 -[2001:4b98:dc0:45:216:3eff:fea2:95cd]:8333 -[2001:4dd0:3564:0:fd76:c1d3:1854:5bd9]:8333 -[2001:4de8:b1b2:1:0:dead:beef:7]:8333 -[2001:638:a000:4140::ffff:191]:8333 -[2001:648:2800:131:4b1f:f6fc:20f7:f99f]:8333 -[2001:678:cc8::1:10:88]:20008 -[2001:67c:26b4:ff00::44]:8333 -[2001:67c:2db8:13::92]:8333 -[2001:7c0:2310:0:f816:3eff:fe6c:4f58]:8333 -[2001:818:ea1b:7600:f053:aade:f47b:b701]:8333 -[2001:8f1:1404:3700:8e49:715a:2e09:b634]:9444 -[2001:985:55a0:1::2]:8333 -[2001:999:270:2c2c:c8b:3a20:3f2f:318f]:8333 -[2001:b07:ac9:442b:79d6:bbbe:b37c:a783]:8333 -[2002:2f5b:a5f9::2f5b:a5f9]:8885 -[2002:b6ff:3dca::b6ff:3dca]:28364 -[2400:2410:cea2:d00:41bc:c9ea:861b:51ee]:8333 -[2400:3b00:20:c:bacb:29ff:feab:8886]:8333 -[2401:d002:3902:700:d72c:5e22:4e95:389d]:8333 -[2403:6200:88a0:fb17:f5f2:d8b5:b7ba:f4d3]:8333 -[2405:9800:b910:5f8e:1830:f630:2cc6:88fb]:8333 -[2405:9800:b970:c64c:109f:74e7:ae5f:87c7]:8333 -[2405:aa00:2::40]:8333 -[2407:8800:bc61:2202:d63d:7eff:fe6c:dc36]:8333 -[2408:8248:7004:f831::83c]:8333 -[2409:10:ca20:1df0:224:e8ff:fe1f:60d9]:8333 -[240b:11:43a1:bd00:e589:f8a7:49b:3b86]:8333 -[240d:1a:791:3400:d65d:64ff:fe28:927e]:8333 -[240d:1a:791:3400:d681:d7ff:fef6:a21e]:10050 -[2600:1700:5b2b:5f::8040]:8333 -[2600:2104:1003:c5ab:dc5e:90ff:fe18:1d08]:8333 -[2600:3c00:e002:2e32::1:14]:8333 -[2600:8805:2400:14e:12dd:b1ff:fef2:3013]:8333 -[2602:ffb8::208:72:57:200]:8333 -[2603:301f:1ebf:e000:e23f:49ff:fee7:7431]:8333 -[2603:6081:1800:6600:16dd:a9ff:feee:b2f3]:8333 -[2604:1380:1000:7400::1]:8333 -[2604:4500::2e06]:8112 -[2604:5500:c134:4000:7285:c2ff:fe4a:e143]:32797 -[2604:5500:c134:4000::3fc]:32797 -[2604:7c00:120:4b::eb24]:8333 -[2605:6400:30:f220::]:8333 -[2605:6f80:0:7:fc1b:ccff:fe8a:d822]:8333 -[2605:ae00:203::203]:8333 -[2605:c000:2a0a:1::102]:8333 -[2605:f700:c0:827:225:90ff:fee3:34a6]:8333 -[2607:9280:b:73b:250:56ff:fe14:25b5]:8333 -[2607:f2f8:ad40:bc1::1]:8333 -[2607:fa18:3a01::20]:8333 -[2620:11c:5001:1118:d267:e5ff:fee9:e673]:8333 -[2620:11c:5001:2199:d267:e5ff:fee9:e673]:8333 -[2620:6:2003:105:2d8:61ff:fe0f:853]:8333 -[2620:6e:a000:1:42:42:42:42]:8333 -[2803:cf00:af8:f200:b89e:cf34:92c7:2d26]:8333 -[2804:14c:65d1:402c:bc53:bf5d:68a:2136]:8333 -[2804:7f1:e783:d401:661c:67ff:feba:5547]:8333 -[2804:d57:5537:4800:21e:67ff:fea8:d798]:8333 -[2804:d57:5537:4800:3615:9eff:fe23:d610]:8333 -[2806:2f0:2080:62a:86f:1a01:c44f:1794]:8333 -[2a00:1028:8382:bf22:5f7f:b78f:2737:7739]:8333 -[2a00:12e0:101:99:20c:29ff:fe29:d03f]:8333 -[2a00:1328:e101:c00::163]:8333 -[2a00:1630:10:1003:0:b19:b00b:babe]:8333 -[2a00:1768:2001:27::ef6a]:8333 -[2a00:1828:a004:2::666]:8333 -[2a00:1838:2a:1400:92e2:baff:fe4a:c416]:8333 -[2a00:1c10:2:709::217]:22220 -[2a00:1f40:5001:108:5d17:7703:b0f5:4133]:8333 -[2a00:6020:15dd:ee00:c8c2:2c77:1749:35db]:8333 -[2a00:6020:b482:9200:491a:358c:d8f7:1da]:8333 -[2a00:7145:c1:1:ae29:727:2b87:f64]:5141 -[2a00:8a60:e012:a00::21]:8333 -[2a00:a040:100:f3:45a5:ac0:fea3:71e1]:8333 -[2a01:488:2000:9801::d]:8333 -[2a01:490:16:301::2]:8333 -[2a01:5200:6c:6162:7a61:746b:6f2e:736b]:8333 -[2a01:6380:fffe:73:4e3:b3cc:a871:36d1]:8333 -[2a01:7a0:2:137c::3]:8333 -[2a01:7c8:aac9:c9:5054:ff:fedf:ff95]:8333 -[2a01:7c8:d001:1c1:5054:ff:feee:3e1a]:8333 -[2a01:8740:1:ffc5::8c6a]:8333 -[2a01:cb00:d3d:7700:227:eff:fe28:c565]:8333 -[2a01:d0:0:1c::253]:8333 -[2a01:d0:bef2::12]:8333 -[2a01:e0a:9fb:b0e0:54f8:1901:6e83:62c1]:8333 -[2a01:e0a:aa7:c8c0:9679:affa:b6e5:efc7]:8333 -[2a02:13b8:f000:101::a]:8333 -[2a02:168:6328:0:2a8:2cff:fe68:e32c]:8333 -[2a02:2780:9000:70::7]:8333 -[2a02:2e02:3900:5400:a099:e1ff:feb6:d0e]:8333 -[2a02:390:9000:0:aaa1:59ff:fe43:b57b]:8333 -[2a02:58:97:7d20::60]:8333 -[2a02:6d40:305e:601:dea6:32ff:fe44:4b25]:8333 -[2a02:7a01::91:228:45:130]:8333 -[2a02:7aa0:1619::adc:8de0]:8333 -[2a02:7b40:3e4d:998d::1]:8333 -[2a02:7b40:592f:a187::1]:8333 -[2a02:8388:e5c6:d380:201:2eff:fe82:b3cc]:8333 -[2a02:9a0:102::110]:8333 -[2a02:a311:8143:8c00::4]:8353 -[2a02:af8:fab0:808:85:234:145:132]:8333 -[2a02:e00:fff0:506::1]:8444 -[2a02:e00:fff0:506::a]:8444 -[2a02:e98:20:1504::1]:8333 -[2a03:4000:47:f1::1]:8333 -[2a03:6000:870:0:46:23:87:218]:8333 -[2a03:7380:3015:524:afc5:d3bc:7c66:8f94]:8333 -[2a03:ec0:0:928:8c00:93ff:fe84:a007]:8333 -[2a03:ec0:0:928::701]:8333 -[2a04:2180:0:2::aa]:8333 -[2a04:52c0:101:29e::]:8333 -[2a04:52c0:103:c455::1]:8333 -[2a04:bc40:1dc3:8d::2:1001]:8333 -[2a05:1500:702:0:1c00:40ff:fe00:c]:8333 -[2a06:dd00:10:3:225:90ff:fe32:64cc]:8333 -[2a06:dd00:1:22:225:90ff:fe0e:bd48]:8333 -[2a07:6b47:100:464::9357:ffda]:8333 -[2a07:a880:4601:1062:b4b4:bd2a:39d4:7acf]:51401 -[2a07:abc4::1:946]:8333 -[2a07:abc4::89:234:180:194]:8333 -[2a09:2681:102::210]:8333 -[2a0a:c801:1:7::183]:8333 -[2a0b:f300:2:6::2]:8333 -[2a0c:59c0:18::a20e]:57658 -[2a0d:5600:24:a8e::a91e]:55373 -[2a0d:eb00:8005:1::13]:8333 -[2a10:4740:45:1:a013:d1ff:fe85:36e3]:8333 -[2a10:8b40:1::103]:8335 -[2c0f:f8f0:da51:0:70c3:eea9:9717:9579]:8333 +2.3.25.181:8333 # AS3215 +2.152.78.124:8333 # AS12430 +5.39.74.166:8333 # AS16276 +5.45.79.81:18332 # AS50673 +5.53.16.128:8333 # AS50923 +5.95.186.78:8333 # AS30722 +5.128.87.126:8333 # AS31200 +5.133.65.82:8333 # AS15440 +5.146.20.229:8333 # AS3209 +5.180.41.119:8333 # AS18978 +5.188.62.18:8333 # AS34665 +5.199.173.66:8333 # AS16125 +5.255.97.25:8333 # AS60404 +5.255.103.180:8333 # AS60404 +8.209.70.77:8333 # AS45102 +8.209.105.138:8333 # AS45102 +18.162.208.153:48332 # AS16509 +23.175.0.200:8333 # AS395502 +23.175.0.222:8333 # AS395502 +23.233.107.21:8333 # AS5645 +23.236.25.169:8333 # AS30029 +24.35.68.229:8333 # AS11404 +24.84.164.50:8333 # AS6327 +24.116.153.115:8333 # AS11492 +24.184.0.146:8333 # AS6128 +27.33.160.196:8333 # AS7545 +27.124.108.19:8333 # AS58511 +27.148.206.140:8333 # AS4134 +31.17.64.192:8333 # AS204028 +31.18.114.135:8333 # AS204028 +31.41.23.249:8333 # AS31287 +31.42.176.138:8333 # AS43641 +31.47.202.112:8333 # AS34385 +34.65.45.157:8333 # AS15169 +34.80.134.68:8333 # AS15169 +34.126.115.35:8333 # AS396982 +37.1.204.231:8333 # AS50673 +37.120.155.34:8333 # AS9009 +37.143.118.174:8333 # AS48926 +37.193.227.16:8333 # AS31200 +37.220.135.151:8333 # AS41206 +37.235.146.236:8333 # AS41268 +38.124.126.42:8333 # AS11550 +38.141.134.140:8333 # AS174 +38.145.151.150:8333 # AS40545 +40.115.137.28:8333 # AS8075 +41.72.154.66:8333 # AS37153 +41.79.70.146:8333 # AS37349 +42.193.55.135:8333 # AS45090 +43.225.62.107:8333 # AS63953 +45.43.97.103:8333 # AS26827 +45.85.48.58:8333 # AS208016 +45.126.26.229:8333 # AS45763 +45.134.142.40:8333 # AS60068 +45.154.252.162:8333 # AS13335 +46.13.216.169:8333 # AS6855 +46.23.87.218:8333 # AS51088 +46.40.127.164:8333 # AS43205 +46.48.126.58:8333 # AS12668 +46.59.13.35:8333 # AS8473 +46.72.238.17:8333 # AS12714 +46.128.141.184:8333 # AS16097 +46.146.248.89:8333 # AS9049 +46.165.221.209:9333 # AS28753 +46.166.142.2:8333 # AS43350 +46.175.178.3:8333 # AS28725 +47.36.144.51:8333 # AS20115 +47.180.49.158:8333 # AS5650 +49.228.131.133:2210 # AS133481 +50.2.13.164:8333 # AS62904 +50.35.71.51:8333 # AS20055 +50.53.250.162:8333 # AS20055 +51.68.36.57:8333 # AS16276 +51.138.4.135:30001 # AS8075 +51.154.62.103:8333 # AS15796 +51.158.150.155:8333 # AS12876 +54.176.63.16:8333 # AS16509 +58.158.0.86:8333 # AS2519 +59.138.115.137:8333 # AS2516 +59.167.191.60:8333 # AS4739 +60.205.205.119:8333 # AS37963 +60.234.122.245:8333 # AS9790 +60.240.210.155:8333 # AS7545 +61.239.91.250:8333 # AS9269 +62.74.143.11:8333 # AS3329 +62.138.162.12:8333 # AS20773 +62.169.74.233:8333 # AS2860 +62.171.129.32:8333 # AS51167 +62.209.198.65:8333 # AS6855 +63.247.147.166:8333 # AS30221 +64.98.76.62:8333 # AS32133 +66.29.129.218:8333 # AS22612 +66.96.235.28:8333 # AS63859 +66.130.120.52:8333 # AS5769 +66.198.209.243:8333 # AS33152 +66.208.64.128:8333 # AS10352 +66.225.231.148:8333 # AS23352 +67.55.3.200:8333 # AS33139 +67.58.232.107:8333 # AS14051 +67.211.92.2:8333 # AS11711 +67.223.119.122:8333 # AS22612 +68.48.131.251:8333 # AS7922 +68.181.4.12:8333 # AS47 +69.14.185.9:8333 # AS12083 +69.54.29.193:8333 # AS12282 +69.59.18.22:8333 # AS397444 +69.131.101.176:8333 # AS4181 +69.165.205.142:8833 # AS5645 +69.228.219.124:8333 # AS7018 +70.59.123.25:8333 # AS209 +70.62.13.150:8333 # AS7843 +70.66.248.170:8333 # AS6327 +70.112.153.229:8333 # AS7843 +70.160.240.132:8333 # AS22773 +70.190.177.204:8333 # AS22773 +71.28.189.239:8333 # AS398465 +71.234.125.198:8333 # AS1351 +72.74.123.179:8333 # AS701 +72.253.236.217:8333 # AS36149 +73.219.254.120:8333 # AS1351 +74.91.115.229:8333 # AS14586 +74.118.137.119:8333 # AS20326 +74.195.166.100:8333 # AS19108 +74.220.255.190:8333 # AS23175 +76.67.211.110:8333 # AS577 +76.169.163.14:8333 # AS20001 +77.32.121.162:8333 # AS35612 +77.53.135.74:8333 # AS45011 +77.70.16.245:8333 # AS8717 +77.85.204.149:8333 # AS8866 +77.107.38.239:8333 # AS62183 +77.120.26.102:8333 # AS25229 +77.162.190.90:8333 # AS1136 +78.20.227.249:8333 # AS6848 +78.21.167.8:8333 # AS6848 +78.27.139.13:8333 # AS6723 +78.90.91.220:8333 # AS8717 +78.108.108.25:8333 # AS8251 +78.108.108.38:8333 # AS8251 +79.77.182.183:8333 # AS13285 +79.98.159.7:11333 # AS44065 +79.189.211.201:8333 # AS5617 +80.55.225.158:8333 # AS5617 +80.83.186.35:8333 # AS33891 +80.88.172.227:64264 # AS31263 +80.209.87.103:9333 # AS31027 +80.229.28.60:8333 # AS2856 +81.7.16.182:8333 # AS35366 +81.7.17.202:8333 # AS35366 +81.19.10.2:8333 # AS24641 +81.88.221.190:8333 # AS39709 +81.171.22.143:8333 # AS60781 +81.224.44.164:8333 # AS3301 +81.224.160.81:8333 # AS3301 +82.1.68.54:8333 # AS5089 +82.21.164.47:8333 # AS5089 +82.64.116.5:8333 # AS12322 +82.66.10.11:8333 # AS12322 +82.96.96.40:8333 # AS29686 +82.116.50.101:8333 # AS30936 +82.129.68.62:8333 # AS48945 +82.136.99.122:8333 # AS8821 +82.154.24.209:8333 # AS8657 +82.197.215.125:8333 # AS25596 +83.128.132.91:8333 # AS15435 +83.137.41.10:8333 # AS31394 +83.208.6.211:8333 # AS5610 +83.208.193.242:8333 # AS5610 +83.222.138.85:8333 # AS31736 +83.240.124.68:8333 # AS31246 +83.243.191.199:8333 # AS41164 +84.9.5.211:8333 # AS5378 +84.28.57.90:8333 # AS6830 +84.38.3.249:8333 # AS196691 +84.112.60.16:8333 # AS8412 +84.215.56.119:8333 # AS41164 +84.226.243.175:8333 # AS6730 +84.245.14.73:8333 # AS25596 +84.252.157.90:18333 # AS200590 +84.255.244.61:8333 # AS34779 +85.23.24.123:8333 # AS16086 +85.52.185.29:8666 # AS12479 +85.58.120.201:8333 # AS12479 +85.93.96.18:8333 # AS29208 +85.165.8.197:8333 # AS2119 +85.173.165.66:8333 # AS12389 +85.184.143.105:8333 # AS39642 +85.191.74.103:8333 # AS39642 +85.194.238.134:8333 # AS47605 +85.195.54.110:8333 # AS35706 +85.195.196.142:8333 # AS13030 +85.208.69.11:8333 # AS25091 +85.208.69.21:8333 # AS25091 +85.208.71.36:8333 # AS42275 +85.208.71.39:8333 # AS42275 +85.214.118.71:8333 # AS6724 +85.214.161.252:8333 # AS6724 +85.216.32.73:8333 # AS51185 +85.254.98.221:8333 # AS13194 +86.58.11.152:8333 # AS3212 +86.95.8.249:8333 # AS1136 +86.100.26.188:8333 # AS39007 +86.106.143.143:55373 # AS9009 +86.124.145.184:8333 # AS8708 +86.133.251.239:8901 # AS2856 +87.79.94.221:8333 # AS8422 +87.120.8.5:20008 # AS34224 +87.125.157.220:8333 # AS12430 +88.9.76.133:8333 # AS3352 +88.90.184.68:8333 # AS2119 +88.151.101.14:5000 # AS41075 +88.151.101.253:5000 # AS41075 +88.198.92.47:8333 # AS24940 +88.208.115.70:8333 # AS29208 +88.210.15.24:8333 # AS212702 +88.212.45.166:8333 # AS42841 +89.102.206.238:8333 # AS16019 +89.103.111.34:8333 # AS16019 +89.114.143.113:8333 # AS12353 +89.134.62.74:8333 # AS21334 +89.152.8.231:8333 # AS2860 +89.161.26.78:8333 # AS39375 +89.207.131.19:8333 # AS49544 +89.248.193.229:8333 # AS49505 +90.3.48.62:8333 # AS3215 +90.146.121.97:8333 # AS12605 +90.146.130.214:8333 # AS12605 +90.196.169.58:8333 # AS5607 +90.250.9.1:8333 # AS5378 +91.93.194.154:8333 # AS34984 +91.126.40.109:8333 # AS35699 +91.204.99.178:8333 # AS20485 +91.204.149.5:8333 # AS42765 +91.206.17.195:8333 # AS13259 +91.209.51.131:8333 # AS48239 +91.215.91.254:8333 # AS48078 +92.91.27.60:8333 # AS15557 +92.221.20.232:8333 # AS29695 +92.255.85.31:8333 # AS9002 +93.4.101.37:8333 # AS15557 +93.46.81.5:8333 # AS12874 +93.57.81.162:8333 # AS12874 +93.73.39.196:8333 # AS25229 +93.90.82.226:8333 # AS47626 +93.95.88.13:8333 # AS35434 +93.123.180.164:8333 # AS35539 +93.189.145.169:8333 # AS12555 +94.17.185.107:8333 # AS12709 +94.75.198.120:8333 # AS60781 +94.114.196.169:8333 # AS3209 +94.142.213.250:55544 # AS5524 +94.154.159.99:8333 # AS62240 +94.158.246.183:8333 # AS39798 +94.239.145.32:8333 # AS5410 +95.31.12.22:8333 # AS8402 +95.31.196.15:8333 # AS3216 +95.110.133.223:8333 # AS31034 +95.110.234.93:8333 # AS31034 +95.161.12.45:8333 # AS39598 +95.191.130.100:8333 # AS12389 +95.208.158.161:8333 # AS51185 +95.213.145.218:8333 # AS49505 +95.214.53.154:8333 # AS201814 +95.214.53.160:8333 # AS201814 +96.44.156.199:8333 # AS8100 +97.75.145.12:8333 # AS22709 +102.132.192.141:8333 # AS37680 +103.14.245.250:8333 # AS24482 +103.85.38.205:8333 # AS134090 +103.88.92.78:8332 # AS17547 +103.99.168.100:8333 # AS6939 +103.99.168.140:8333 # AS6939 +103.99.170.210:8333 # AS54415 +103.99.170.220:8333 # AS54415 +103.100.44.70:8333 # AS10143 +103.178.236.27:8333 # AS49981 +103.209.12.144:8333 # AS58511 +104.59.147.15:8333 # AS7018 +104.129.171.121:8333 # AS174 +104.200.65.234:8333 # AS23033 +104.238.220.199:8333 # AS23470 +104.244.73.6:8333 # AS53667 +106.71.119.230:8333 # AS4804 +107.173.166.43:8333 # AS23352 +108.161.22.78:8333 # AS54154 +108.174.63.234:8333 # AS36352 +109.99.63.159:8333 # AS9050 +109.105.40.247:8333 # AS12570 +109.107.185.130:8333 # AS48282 +109.110.239.4:8333 # AS35432 +109.173.41.43:8333 # AS42610 +109.236.90.117:8333 # AS49981 +109.248.206.13:8333 # AS203493 +109.255.106.206:8333 # AS6830 +111.90.140.23:8333 # AS45839 +111.90.140.46:8333 # AS45839 +111.90.159.246:8333 # AS34309 +112.118.188.50:8333 # AS4760 +115.47.141.250:8885 # AS4134 +116.58.171.67:8333 # AS2514 +118.92.107.108:8333 # AS9500 +119.42.55.203:8333 # AS133159 +120.79.71.72:8333 # AS37963 +121.99.240.87:8333 # AS9790 +123.60.213.192:8333 # AS55990 +124.156.158.100:8333 # AS132203 +124.222.123.238:8333 # AS45090 +125.178.6.116:8333 # AS3786 +128.0.190.26:8333 # AS30764 +128.65.194.136:8333 # AS29222 +129.13.189.212:8333 # AS34878 +129.126.172.115:8333 # AS17547 +129.146.52.174:8333 # AS31898 +130.44.168.202:8333 # AS6079 +131.161.80.166:8333 # AS263694 +131.188.40.191:8333 # AS680 +134.195.185.52:8333 # AS13536 +135.134.238.47:8333 # AS4181 +135.180.218.58:8333 # AS46375 +135.181.215.237:8333 # AS24940 +136.29.109.180:8333 # AS19165 +136.32.238.6:8333 # AS16591 +136.56.170.96:8333 # AS16591 +137.25.38.108:8333 # AS20115 +137.226.34.46:8333 # AS680 +138.207.211.106:8333 # AS11776 +139.130.41.82:8333 # AS1221 +139.153.255.107:8333 # AS786 +140.190.12.129:8333 # AS14828 +142.54.181.218:8333 # AS32097 +143.177.229.149:8333 # AS50266 +143.178.64.10:8333 # AS50266 +144.24.245.183:8333 # AS31898 +144.126.130.178:8333 # AS40021 +146.4.124.129:8333 # AS3303 +146.71.69.103:8333 # AS7782 +146.83.56.69:8333 # AS23140 +147.194.177.165:8333 # AS15128 +149.90.214.78:8333 # AS12353 +149.102.157.156:8333 # AS13768 +151.248.156.55:8333 # AS8821 +151.252.193.245:8333 # AS29582 +153.92.93.114:8333 # AS41998 +154.211.6.2:8333 # AS140224 +156.17.103.2:8088 # AS8970 +156.146.177.221:8333 # AS1448 +157.131.143.173:8333 # AS46375 +158.58.188.37:8333 # AS57497 +158.248.39.239:8333 # AS29695 +159.89.230.128:8333 # AS14061 +159.196.3.239:8333 # AS4764 +159.224.189.250:8333 # AS13188 +160.72.51.154:8333 # AS46887 +161.29.236.55:8333 # AS4826 +161.97.119.166:8333 # AS51167 +161.246.11.230:8333 # AS9486 +162.62.18.226:8333 # AS132203 +162.250.123.179:8333 # AS19318 +162.250.191.222:8333 # AS26832 +162.254.118.20:8333 # AS6130 +163.172.81.70:8333 # AS12876 +164.90.47.8:8333 # AS53449 +165.228.174.117:8333 # AS1221 +166.70.145.151:8333 # AS6315 +168.91.238.8:8333 # AS11039 +170.253.11.25:8333 # AS15704 +171.103.170.115:8333 # AS7470 +172.93.166.135:8333 # AS22653 +172.103.217.236:8333 # AS25668 +172.105.21.216:8333 # AS63949 +172.112.153.95:8333 # AS20001 +173.3.218.91:8333 # AS6128 +173.12.119.133:8333 # AS7922 +173.34.127.181:8333 # AS812 +173.76.123.173:8333 # AS701 +173.176.198.68:8333 # AS5769 +173.208.152.218:8333 # AS32097 +173.241.227.243:8333 # AS19009 +173.246.27.7:8333 # AS1403 +173.255.240.205:8333 # AS63949 +174.30.47.15:8333 # AS209 +174.114.250.86:8333 # AS812 +174.138.35.229:8333 # AS14061 +174.142.191.136:8333 # AS32613 +176.10.143.190:8333 # AS8473 +176.74.136.237:8333 # AS35613 +176.118.220.29:8333 # AS60042 +176.126.116.7:8333 # AS20473 +176.126.167.10:8333 # AS8449 +176.212.185.153:8333 # AS9049 +176.235.209.186:8333 # AS34984 +177.81.236.117:8333 # AS28573 +177.89.205.70:8333 # AS28220 +178.48.168.12:8333 # AS21334 +178.124.162.209:8333 # AS6697 +178.159.98.133:8333 # AS202390 +178.196.89.209:8333 # AS3303 +178.236.137.63:8333 # AS44843 +178.252.123.24:8333 # AS42893 +179.43.170.186:8333 # AS51852 +180.150.46.187:8333 # AS4764 +181.117.128.140:8333 # AS19037 +184.19.19.16:8333 # AS5650 +185.21.217.48:8333 # AS200052 +185.25.48.184:8333 # AS61272 +185.31.136.246:8333 # AS47605 +185.52.93.45:8333 # AS39449 +185.64.116.15:8333 # AS31736 +185.68.249.91:8333 # AS51184 +185.98.54.20:8333 # AS39572 +185.107.83.55:8333 # AS43350 +185.140.253.169:8333 # AS200735 +185.148.145.74:8333 # AS44901 +185.165.170.19:8333 # AS3223 +185.167.113.59:8333 # AS207054 +185.185.26.141:8111 # AS201206 +185.197.163.136:8333 # AS60144 +185.209.12.76:8333 # AS212323 +185.209.70.17:8333 # AS204568 +185.227.156.226:8333 # AS209846 +185.233.189.210:8333 # AS61303 +185.239.221.5:8333 # AS61282 +185.244.100.106:8333 # AS2586 +185.254.97.164:8333 # AS44486 +186.33.167.11:8333 # AS1299 +186.176.98.37:8333 # AS262197 +186.249.217.25:8333 # AS7195 +186.250.95.132:8333 # AS262967 +188.32.14.31:8334 # AS42610 +188.35.167.14:8333 # AS34123 +188.68.45.143:8333 # AS47147 +188.117.200.212:8333 # AS25447 +188.138.88.14:8333 # AS20773 +188.151.237.158:8333 # AS1257 +188.154.236.49:8333 # AS6730 +189.123.177.128:8333 # AS4230 +190.123.27.11:8333 # AS52468 +190.145.127.254:8333 # AS14080 +192.69.53.77:8333 # AS11142 +192.146.137.44:8333 # AS25376 +192.222.24.54:8333 # AS22646 +192.222.147.141:8333 # AS1403 +193.32.127.162:60969 # AS39351 +193.111.198.187:8111 # AS24961 +193.196.37.62:8333 # AS34878 +194.13.80.185:15430 # AS47147 +194.147.113.201:8333 # AS21232 +194.165.30.20:8333 # AS35162 +194.191.239.98:8333 # AS1836 +195.56.63.4:8333 # AS5483 +195.56.63.10:8333 # AS5483 +195.123.239.185:8333 # AS64010 +195.140.226.154:8333 # AS35614 +198.1.231.6:8333 # AS30236 +198.148.112.27:8333 # AS35916 +199.126.234.237:8333 # AS395570 +199.193.174.173:8333 # AS7992 +199.247.7.208:8333 # AS20473 +200.122.181.46:8333 # AS3790 +201.191.6.103:8333 # AS11830 +201.212.36.209:8333 # AS7303 +201.221.234.200:8333 # AS27928 +202.108.211.135:8333 # AS4837 +202.169.17.178:8333 # AS137549 +202.177.24.140:8333 # AS7479 +203.130.48.117:8885 # AS54994 +203.132.94.196:8333 # AS38195 +205.178.41.124:8333 # AS11039 +206.72.201.228:8333 # AS19318 +206.192.203.0:8333 # AS7029 +206.223.153.52:8333 # AS19214 +207.134.216.145:8334 # AS395570 +207.188.154.50:8333 # AS15704 +207.229.46.80:8333 # AS852 +207.255.193.47:8333 # AS11776 +208.104.92.74:8333 # AS14615 +209.58.145.157:8333 # AS394380 +209.58.158.232:8335 # AS394380 +209.141.43.243:8333 # AS53667 +209.226.142.62:8333 # AS577 +209.237.127.227:8333 # AS1299 +209.237.133.54:8333 # AS53859 +211.248.90.50:8333 # AS4766 +212.21.18.78:8333 # AS20485 +212.34.225.118:8333 # AS44395 +212.51.146.137:8333 # AS13030 +212.227.211.87:8333 # AS8560 +213.0.69.76:8333 # AS3352 +213.5.36.58:8333 # AS49974 +213.47.64.105:8333 # AS8412 +213.89.135.151:8333 # AS1257 +213.141.154.201:8333 # AS12714 +213.159.198.45:8333 # AS8359 +213.184.244.24:8333 # AS60280 +213.214.66.182:8333 # AS43205 +213.226.123.76:8333 # AS49943 +216.146.251.8:8333 # AS54579 +216.186.238.14:8333 # AS12083 +217.5.150.114:8333 # AS3320 +217.15.178.11:8333 # AS25534 +217.24.239.109:8333 # AS9063 +217.64.47.138:8333 # AS39324 +217.73.80.104:8333 # AS44291 +217.79.181.38:8333 # AS24961 +217.92.55.246:8333 # AS3320 +217.113.121.169:8333 # AS8416 +217.115.116.250:8333 # AS30900 +217.155.244.170:8333 # AS13037 +217.170.124.170:8333 # AS35401 +220.132.135.54:8333 # AS3462 +220.233.178.199:8333 # AS38195 +222.154.111.46:8333 # AS4648 +[2001:1620:510::2]:8333 # AS13030 +[2001:19f0:6001:39aa:5400:3ff:fef0:916]:8333 # AS20473 +[2001:19f0:8001:f71:5400:4ff:fe10:6a63]:8333 # AS20473 +[2001:1bc0:c1::2000]:8333 # AS29686 +[2001:1c02:11e:3500:df25:6321:8260:d9be]:8333 # AS6830 +[2001:41d0:1004:1b79::]:8339 # AS16276 +[2001:41d0:203:3739::]:8333 # AS16276 +[2001:41d0:203:aacc::]:8333 # AS16276 +[2001:41d0:203:bb0a::]:8333 # AS16276 +[2001:41d0:2:bf8f::]:8333 # AS16276 +[2001:41d0:303:6586::]:8333 # AS16276 +[2001:41d0:602:4493::]:8333 # AS16276 +[2001:41d0:8:b9d8::1]:8333 # AS16276 +[2001:41d0:a:69a2::1]:8333 # AS16276 +[2001:41f0::62:6974:636f:696e]:8333 # AS6830 +[2001:44b8:256:5d11:216:3eff:fe39:d5d4]:8333 # AS4739 +[2001:470:1b62::]:8333 # AS6939 +[2001:470:1f07:803:20c:29ff:fe2d:5879]:8333 # AS6939 +[2001:470:1f15:106:e2d5:5eff:fe42:7ae5]:8333 # AS6939 +[2001:470:1f15:c43::11]:8333 # AS6939 +[2001:470:26:472::b7c]:8333 # AS6939 +[2001:470:75e9:1::10]:8333 # AS6939 +[2001:470:de5a::ec]:9333 # AS6939 +[2001:4ba0:babe:584::1]:8333 # AS24961 +[2001:4ba0:ffff:24::1]:8333 # AS24961 +[2001:4dd0:3564:0:30b7:1d7b:6fec:4c5c]:8333 # AS8422 +[2001:4dd0:3564:0:88e:b4ff:2ad0:699b]:8333 # AS8422 +[2001:4dd0:3564:0:9c1c:cc31:9fe8:5505]:8333 # AS8422 +[2001:4dd0:3564:0:a0c4:d41f:4c4:1bb0]:8333 # AS8422 +[2001:4dd0:3564:0:fd76:c1d3:1854:5bd9]:8333 # AS8422 +[2001:4dd0:3564:1::7676:8090]:8333 # AS8422 +[2001:4dd0:3564:1:b977:bd71:4612:8e40]:8333 # AS8422 +[2001:4dd0:af0e:3564::69:1]:8333 # AS8422 +[2001:4dd0:af0e:3564::69:90]:8333 # AS8422 +[2001:4de8:b1b2:1:0:dead:beef:7]:8333 # AS29208 +[2001:638:a000:4140::ffff:191]:8333 # AS680 +[2001:678:acc:42::]:8333 # AS60404 +[2001:67c:26b4:ff00::44]:8333 # AS25376 +[2001:67c:2db8:6::36]:8333 # AS39798 +[2001:7c0:2310:0:f816:3eff:fe0d:4ab6]:8333 # AS34878 +[2001:7c0:2310:0:f816:3eff:fe6c:4f58]:8333 # AS34878 +[2001:861:3246:a10::40]:8333 # AS5410 +[2001:b07:2e6:38d7:ba27:ebff:fe60:3dc1]:8333 # AS12874 +[2001:b07:6461:7811:489:d2da:e07:1af7]:8333 # AS12874 +[2001:b07:ac9:442b:79d6:bbbe:b37c:a783]:8333 # AS12874 +[2001:bc8:1600:0:208:a2ff:fe0c:8a2e]:8333 # AS12876 +[2001:bc8:323c:ff:a634:384f:1849:f4bc]:8333 # AS12876 +[2001:bc8:323c:ff:d217:c2ff:fe07:2cd9]:8333 # AS12876 +[2001:bc8:3bec:100::1]:8333 # AS12876 +[2002:2f5b:a5f9::2f5b:a5f9]:8885 # AS6939 +[2003:cb:8713:6102:aaa1:59ff:fe57:7779]:8333 # AS3320 +[2003:e0:370e:1400::5]:8333 # AS3320 +[2003:f6:3f10:6700:4c9f:7620:8324:d4a7]:8333 # AS3320 +[2400:2410:cea2:d00:41bc:c9ea:861b:51ee]:8333 # AS17676 +[2400:2411:a3e1:4900:2568:684b:e99:7120]:8333 # AS17676 +[2400:2411:a3e1:4900:2987:b88f:61e0:84fa]:8333 # AS17676 +[2400:3b00:20:c:bacb:29ff:feab:8886]:8333 # AS18229 +[2401:b140:1::100:210]:8333 # AS54415 +[2401:b140:1::100:220]:8333 # AS54415 +[2401:b140::42:100]:8333 # AS6939 +[2401:b140::44:130]:8333 # AS6939 +[2401:d002:3902:700:d72c:5e22:4e95:389d]:8333 # AS38195 +[2404:4408:6752:c000::1999]:8333 # AS9790 +[2404:7a85:4161:2b00:49a1:427a:fac:3409]:8333 # AS2518 +[2405:9800:b972:ab58:c05:e938:267e:271]:8333 # AS45430 +[2406:da11:169:b03:32b5:f901:9f7c:3e4b]:8333 # AS16509 +[2406:da14:335:b601:ceb7:b4fc:a855:f3a5]:8333 # AS16509 +[2406:da1e:a4e:8a03:2aad:496b:768d:e497]:8333 # AS16509 +[2407:8800:bc61:2202:a0c6:107:502b:4e3b]:8333 # AS7545 +[2409:10:ca20:1df0:224:e8ff:fe1f:60d9]:8333 # AS55391 +[2600:1700:22f1:641f:e8:39c8:eb1d:a1eb]:8333 # AS7018 +[2600:1700:9c5d:ed0::38]:8333 # AS7018 +[2600:1700:9c5d:ed0:d0d6:1d9:5cc2:ab47]:8333 # AS7018 +[2600:1702:1ce0:4010::40]:8333 # AS7018 +[2600:1f14:40e:e301:d155:aa3a:77be:960e]:8333 # AS16509 +[2600:1f16:a08:b901:1afa:ef4e:4ce7:2ba4]:8333 # AS16509 +[2600:1f1c:2d3:2403:5bac:3fc6:6513:7a63]:8333 # AS16509 +[2600:2104:1003:c5ab:dc5e:90ff:fe18:1d08]:8333 # AS11404 +[2600:3c00::f03c:92ff:fe92:2745]:8333 # AS63949 +[2600:3c00::f03c:92ff:fecf:61b6]:8333 # AS63949 +[2600:3c00::f03c:93ff:feb3:1b6]:8333 # AS63949 +[2600:3c00:e002:2e32::1:14]:8333 # AS63949 +[2600:3c02::f03c:92ff:fe5d:9fb]:8333 # AS63949 +[2600:4040:2854:5e00:c6e9:84ff:fe46:ee8]:8666 # AS13786 +[2600:6c54:7100:1ad1:bddf:550e:91be:f9e1]:8333 # AS20115 +[2600:8805:2400:14e:12dd:b1ff:fef2:3013]:8333 # AS22773 +[2601:184:300:bde:3c29:8e94:1ba8:fde3]:8333 # AS7922 +[2601:18c:8080:300f:219:d1ff:fe75:dc2f]:8333 # AS7922 +[2601:18d:4600:43f1:20e7:b3ff:fecf:a99]:8333 # AS7922 +[2601:18d:8701:c290::3330]:8333 # AS7922 +[2601:246:4d7f:9e28:f321:36ca:7a71:c687]:8333 # AS7922 +[2601:640:c201:960d:86eb:f27d:66a2:f2c1]:8333 # AS7922 +[2602:241:75d1:2b90::7840]:8333 # AS46375 +[2602:ffb8::208:72:57:200]:8333 # AS2914 +[2603:3004:6a1:3800:851f:584d:7aba:affb]:8333 # AS7922 +[2603:3004:6a1:3800::4402]:8333 # AS7922 +[2603:3004:70d:1400:8532:2900:ce6f:acdf]:8333 # AS7922 +[2603:3004:745:900:f0d7:556a:a8c:ced5]:8333 # AS7922 +[2603:6080:c000:5d8a::104f]:8333 # AS7843 +[2603:8000:d100:8991:cc29:ccff:fe42:300c]:8333 # AS7843 +[2603:8080:1f07:6fdd:7de2:d969:78c9:b7ea]:8333 # AS7843 +[2603:8080:7300:531::13ea]:8333 # AS7843 +[2603:80a0:703:40f8::38]:8333 # AS7843 +[2604:180:f3::218]:8333 # AS3842 +[2604:3d08:0:5:d941:4b03:a093:131b]:8333 # AS6327 +[2604:7c00:120:4b::eb24]:8333 # AS174 +[2604:a00:21:3043:bf6a:535e:dfeb:5b7b]:8333 # AS19318 +[2604:a880:400:d0::1ce7:4001]:8333 # AS14061 +[2604:a880:400:d0::1d44:e001]:8333 # AS14061 +[2604:a880:400:d0::261f:6001]:8333 # AS14061 +[2604:a880:400:d1::7e2:e001]:8333 # AS14061 +[2604:a880:4:1d0::14:3000]:8333 # AS14061 +[2604:a880:4:1d0::e5:b000]:8333 # AS14061 +[2605:6400:30:f220::]:8333 # AS53667 +[2605:6f80:0:7:fc1b:ccff:fe8a:d822]:8333 # AS53340 +[2605:a140:2076:8253::1]:8333 # AS40021 +[2605:a140:3007:1287::1]:8333 # AS40021 +[2605:ae00:203::203]:8333 # AS7819 +[2605:c000:2a0a:1::102]:8333 # AS7393 +[2607:1a00:1:d::11:7c4d]:8333 # AS22653 +[2607:5300:203:1214::]:8333 # AS16276 +[2607:9280:b:73b:250:56ff:fe14:25b5]:8333 # AS395502 +[2607:9280:b:73b:250:56ff:fe21:9c2f]:8333 # AS395502 +[2607:9280:b:73b:250:56ff:fe21:bf32]:8333 # AS395502 +[2607:9280:b:73b:250:56ff:fe33:4d1b]:8333 # AS395502 +[2607:9280:b:73b:250:56ff:fe3d:401]:8333 # AS395502 +[2607:f2c0:e1c2:69:12c3:7bff:fe4d:9431]:8333 # AS5645 +[2607:f2c0:e1c2:69:ecb2:6e88:9f33:5057]:8333 # AS5645 +[2620:6:2003:105:2d8:61ff:fe0f:853]:8333 # AS25682 +[2620:6e:a000:1:42:42:42:42]:8333 # AS397444 +[2620:a6:2000:1::3:d570]:8333 # AS27566 +[2620:a6:2000:1::5:162a]:8333 # AS27566 +[2620:a6:2000:1::5:1631]:8333 # AS27566 +[2620:a6:2000:1::c:e634]:8333 # AS27566 +[2800:40:33:8ab:a0e7:b215:fc83:5c31]:8333 # AS16814 +[2800:bf0:149:f4b:f8df:8d7d:801b:e25e]:8333 # AS27947 +[2804:14c:198:80d5:7603:41d1:d3fc:e797]:8333 # AS28573 +[2804:14d:ae81:827b:99a8:1e3f:6db2:29db]:8333 # AS4230 +[2804:d57:5537:4800:3e7c:3fff:fe7b:80aa]:8333 # AS8167 +[2a00:12e0:101:99:20c:29ff:fe29:d03f]:8333 # AS6798 +[2a00:1328:e101:c00::163]:8333 # AS31078 +[2a00:1398:4:2a03:215:5dff:fed6:1033]:8333 # AS34878 +[2a00:1398:4:2a03::bc03]:8333 # AS34878 +[2a00:1630:10:1003:0:b19:b00b:babe]:8333 # AS49544 +[2a00:1768:2001:27::ef6a]:8333 # AS43350 +[2a00:1828:a004:2::666]:8333 # AS34240 +[2a00:1c10:2:709::217]:22220 # AS50300 +[2a00:1f40:5001:108:5d17:7703:b0f5:4133]:8333 # AS42864 +[2a00:23c5:fe80:7301:d6ae:52ff:fed5:56a5]:8333 # AS2856 +[2a00:23c6:5c91:5808:c05a:4dff:fe65:9d69]:8333 # AS2856 +[2a00:6020:1bfa:d400:20c:29ff:fe61:4a4c]:8333 # AS60294 +[2a00:6020:b482:9200:491a:358c:d8f7:1da]:8333 # AS60294 +[2a00:6020:b489:2000:5054:ff:fefc:5ed8]:8333 # AS60294 +[2a00:7c80:0:25::e37a]:8333 # AS49981 +[2a00:7c80:0:71::8]:8333 # AS49981 +[2a00:8a60:e012:a00::21]:8333 # AS680 +[2a00:ae40:240e:3200::3]:8333 # AS50923 +[2a00:bbe0:cc:0:62a4:4cff:fe23:7510]:8333 # AS47605 +[2a00:ca8:a1f:3025:f949:e442:c940:13e8]:8333 # AS30764 +[2a00:d4e0:2:d002:4467:31e0:6fa5:b3ef]:8333 # AS15600 +[2a00:ee2:1200:1900:8d3:d2ff:feb1:bc58]:8333 # AS5603 +[2a01:238:420f:9200:fa5a:1a4b:1e6a:fadf]:8333 # AS6724 +[2a01:238:4389:c400:3b26:d94e:38d5:44ef]:8333 # AS6724 +[2a01:490:16:301::2]:8333 # AS8251 +[2a01:4b00:807c:3100:cda1:c6a:2bad:2418]:8333 # AS56478 +[2a01:4f8:141:2254::2]:8333 # AS24940 +[2a01:4f8:173:230a::2]:8333 # AS24940 +[2a01:4f8:190:91c4::2]:8333 # AS24940 +[2a01:4f8:200:7222::2]:8333 # AS24940 +[2a01:4f8:202:3e6::2]:8333 # AS24940 +[2a01:4f8:221:44d7::2]:8333 # AS24940 +[2a01:4f8:231:915::2]:8333 # AS24940 +[2a01:4f9:2a:1ce0::2]:8333 # AS24940 +[2a01:4f9:2b:29a::2]:8333 # AS24940 +[2a01:4f9:4a:31de::2]:8333 # AS24940 +[2a01:5200:6c:6162:7a61:746b:6f2e:736b]:8333 # AS6855 +[2a01:6380:fffe:73:10fb:d012:8581:b4d7]:8333 # AS25540 +[2a01:7a7:2:2804:ae1f:6bff:fe9d:6c94]:8333 # AS20773 +[2a01:7c8:aaac:89:5054:ff:feb7:f5cb]:8333 # AS20857 +[2a01:7c8:aac9:c9:5054:ff:fedf:ff95]:8333 # AS20857 +[2a01:7c8:d001:1c1:5054:ff:feee:3e1a]:8333 # AS20857 +[2a01:7c8:d009:2aa:5054:ff:fe1b:a196]:11520 # AS20857 +[2a01:7c8:fffa:50e:ddfe:c924:ca0a:cbab]:8333 # AS20857 +[2a01:7e00::f03c:93ff:fe59:66dc]:8333 # AS63949 +[2a01:7e01::f03c:93ff:fe3b:bb5b]:8333 # AS63949 +[2a01:8740:1:ffc5::8c6a]:8333 # AS57344 +[2a01:9f40:a000::100]:8333 # AS42908 +[2a01:cb00:d3d:7700:227:eff:fe28:c565]:8333 # AS3215 +[2a01:e0a:20:7350:919c:b1c3:8b83:adf9]:8333 # AS12322 +[2a01:e0a:301:7010:b87d:e14b:cea9:b998]:8333 # AS12322 +[2a01:e0a:48b:2d10:94f2:4d5c:ca5f:bf49]:8333 # AS12322 +[2a01:e0a:530:a0a0:f465:af5:be1b:9075]:8333 # AS12322 +[2a01:e0a:aa7:c8c0:9679:affa:b6e5:efc7]:8333 # AS12322 +[2a01:e11:100c:70:cbc8:9e31:4b77:1626]:8333 # AS12322 +[2a01:e34:ee78:3060:230:48ff:fe81:f1c6]:8333 # AS12322 +[2a02:1210:14a9:6700:a00:27ff:fe4e:82b6]:8333 # AS3303 +[2a02:1210:4639:f00:10a7:e965:509a:7a4a]:8333 # AS3303 +[2a02:1210:7c92:5100:211:32ff:feae:152d]:8333 # AS3303 +[2a02:1210:86bf:f100:3178:d700:d44d:6bb1]:8333 # AS3303 +[2a02:1210:9487:a200:edc1:93a4:945:9a92]:8333 # AS3303 +[2a02:168:420b:a::20]:8333 # AS13030 +[2a02:168:6328:0:4a21:bff:fe26:38c3]:8333 # AS13030 +[2a02:168:676e:0:e65f:1ff:fe09:3591]:8333 # AS13030 +[2a02:1748:f39f:5872:dead:beef:b1ac:c0fe]:8333 # AS51184 +[2a02:180:1:1::517:10b6]:8333 # AS35366 +[2a02:2168:a379:d100:96de:80ff:fea3:fd00]:8333 # AS42610 +[2a02:2780:9000:70::7]:8333 # AS35434 +[2a02:2780:9000:70::f]:8333 # AS35434 +[2a02:2780::e01a]:8333 # AS35434 +[2a02:2e02:3900:5400:a099:e1ff:feb6:d0e]:8333 # AS12479 +[2a02:2f05:660e:8b00::1]:8333 # AS48571 +[2a02:58:97:7d20::60]:8333 # AS25596 +[2a02:6d40:3073:c01:dea6:32ff:fe44:4b25]:8333 # AS42652 +[2a02:7a01::91:228:45:130]:8333 # AS16019 +[2a02:7b40:5928:89::1]:8333 # AS62282 +[2a02:7b40:c3b5:f583::1]:8333 # AS62282 +[2a02:8308:8087:aa00:9ea8:1b2:ef98:56bf]:8333 # AS16019 +[2a02:842a:1df:8a01:1e1b:dff:fe0b:236d]:8333 # AS15557 +[2a02:a44d:14d6:1:2c0:8ff:fe8f:b3b2]:8333 # AS1136 +[2a02:a45a:94cd:f00d::1]:8333 # AS1136 +[2a02:a45f:3b9d:30::3]:8333 # AS1136 +[2a02:a467:7833:1:7285:c2ff:fe2c:21e9]:8333 # AS1136 +[2a02:aa14:2380:b300:4040:be88:8b01:d38]:8333 # AS6830 +[2a02:c206:2044:9826::1]:8333 # AS51167 +[2a02:c206:2082:1246::1]:8333 # AS51167 +[2a02:c206:3008:2368::1]:8333 # AS51167 +[2a02:c207:0:4971::1]:5332 # AS51167 +[2a02:c207:2014:4199::1]:8333 # AS51167 +[2a02:c207:2024:6115::1]:8333 # AS51167 +[2a02:c207:2026:6682::1]:8333 # AS51167 +[2a02:c207:3002:7468::1]:8333 # AS51167 +[2a02:e98:20:1504::1]:8333 # AS24641 +[2a03:4000:6:416c::43]:8333 # AS47147 +[2a03:4000:6:f814:548b:17ff:fe31:b64a]:8333 # AS47147 +[2a03:6000:870:0:46:23:87:218]:8333 # AS51088 +[2a03:94e0:ffff:185:243:218:0:19]:8333 # AS56655 +[2a03:b0c0:1:e0::397:6001]:8333 # AS14061 +[2a03:b0c0:2:f0::163:3001]:8333 # AS14061 +[2a03:b0c0:2:f0::18a:d001]:8333 # AS14061 +[2a03:b0c0:3:d0::f3e:2001]:8333 # AS14061 +[2a03:e2c0:1347::2]:8333 # AS50113 +[2a03:ec0:0:928::701:701]:8333 # AS199669 +[2a04:52c0:103:c455::1]:8334 # AS60404 +[2a04:52c0:3007:200::2000]:8333 # AS60404 +[2a04:bc40:1dc3:8d::2:1001]:8333 # AS35277 +[2a05:1500:702:0:1c00:40ff:fe00:c]:8333 # AS48635 +[2a05:3580:d101:3700::]:8333 # AS20764 +[2a05:3580:db0b:1600:c489:76ed:313d:b33]:8333 # AS20764 +[2a05:d014:a55:4001:8127:afa7:daf9:d91b]:8333 # AS16509 +[2a05:d014:a55:4001:f6ab:dd5e:4039:b46c]:8333 # AS16509 +[2a05:d014:a55:4003:6523:50a1:152:e88c]:8333 # AS16509 +[2a05:d01a:b7b:3c01:8bf7:ae14:afb3:33ae]:8333 # AS16509 +[2a05:f480:1800:697:5400:2ff:feb6:c36d]:8333 # AS20473 +[2a06:e040:7603:2918:c6ef:464e:9fe5:73ec]:8333 # AS198507 +[2a07:abc4::1:946]:8333 # AS62000 +[2a09:2681:102::210]:8333 # AS61282 +[2a0a:c801:1:7::183]:8333 # AS39798 +[2a0c:5a80:1210:a800:6af7:28ff:fee5:6b3a]:8333 # AS57269 +[2a0d:5600:24:a8e::a91e]:55373 # AS9009 +[2a0d:7c40:3000:b04::2]:8333 # AS54290 +[2a0d:8340:24::2]:8333 # AS50113 +[2a0f:df00:0:2010::162]:8333 # AS41281 +[2a10:3781:16b9:1:fe3f:dbff:fe04:2d4c]:8333 # AS206238 +[2a10:3781:84b:1:b123:6306:943a:f09b]:8333 # AS206238 +[2a10:d200:1:33:a6bf:1ff:fe6a:46a9]:8333 # AS212323 +[2c0f:f4c0:2202:20b0:261c:4ff:fe14:daa0]:8333 # AS327693 +[2c0f:f8f0:da51:0:70c3:eea9:9717:9579]:8333 # AS30844 -# manually added 2021-03 for minimal torv3 bootstrap support -2g5qfdkn2vvcbqhzcyvyiitg4ceukybxklraxjnu7atlhd22gdwywaid.onion:8333 -2jmtxvyup3ijr7u6uvu7ijtnojx4g5wodvaedivbv74w4vzntxbrhvad.onion:8333 -37m62wn7dz3uqpathpc4qfmgrbupachj52nt3jbtbjugpbu54kbud7yd.onion:8333 +# manually updated 2022-08 for minimal torv3 bootstrap support 5g72ppm3krkorsfopcm2bi7wlv4ohhs4u4mlseymasn7g7zhdcyjpfid.onion:8333 -7cgwjuwi5ehvcay4tazy7ya6463bndjk6xzrttw5t3xbpq4p22q6fyid.onion:8333 -7pyrpvqdhmayxggpcyqn5l3m5vqkw3qubnmgwlpya2mdo6x7pih7r7id.onion:8333 b64xcbleqmwgq2u46bh4hegnlrzzvxntyzbmucn3zt7cssm7y4ubv3id.onion:8333 -ejxefzf5fpst4mg2rib7grksvscl7p6fvjp6agzgfc2yglxnjtxc3aid.onion:8333 fjdyxicpm4o42xmedlwl3uvk5gmqdfs5j37wir52327vncjzvtpfv7yd.onion:8333 fpz6r5ppsakkwypjcglz6gcnwt7ytfhxskkfhzu62tnylcknh3eq6pad.onion:8333 -fzhn4uoxfbfss7h7d6ffbn266ca432ekbbzvqtsdd55ylgxn4jucm5qd.onion:8333 gxo5anvfnffnftfy5frkgvplq3rpga2ie3tcblo2vl754fvnhgorn5yd.onion:8333 ifdu5qvbofrt4ekui2iyb3kbcyzcsglazhx2hn4wfskkrx2v24qxriid.onion:8333 itz3oxsihs62muvknc237xabl5f6w6rfznfhbpayrslv2j2ubels47yd.onion:8333 -lrjh6fywjqttmlifuemq3puhvmshxzzyhoqx7uoufali57eypuenzzid.onion:8333 +kpgvmscirrdqpekbqjsvw5teanhatztpp2gl6eee4zkowvwfxwenqaid.onion:8333 m7cbpjolo662uel7rpaid46as2otcj44vvwg3gccodnvaeuwbm3anbyd.onion:8333 -opnyfyeiibe5qo5a3wbxzbb4xdiagc32bbce46owmertdknta5mi7uyd.onion:8333 -owjsdxmzla6d7lrwkbmetywqym5cyswpihciesfl5qdv2vrmwsgy4uqd.onion:8333 -q7kgmd7n7h27ds4fg7wocgniuqb3oe2zxp4nfe4skd5da6wyipibqzqd.onion:8333 +mwmfluek4au6mxxpw6fy7sjhkm65bdfc7izc7lpz3trewfdghyrzsbid.onion:8333 rp7k2go3s5lyj3fnj6zn62ktarlrsft2ohlsxkyd7v3e3idqyptvread.onion:8333 -sys54sv4xv3hn3sdiv3oadmzqpgyhd4u4xphv4xqk64ckvaxzm57a7yd.onion:8333 -tddeij4qigtjr6jfnrmq6btnirmq5msgwcsdpcdjr7atftm7cxlqztid.onion:8333 -vi5bnbxkleeqi6hfccjochnn65lcxlfqs4uwgmhudph554zibiusqnad.onion:8333 -xqt25cobm5zqucac3634zfght72he6u3eagfyej5ellbhcdgos7t2had.onion:8333 -# manually added 2021-08 for minimal i2p bootstrap support +# manually updated 2022-08 for minimal i2p bootstrap support +255fhcp6ajvftnyo7bwz3an3t4a4brhopm3bamyh2iu5r3gnr2rq.b32.i2p:0 +27yrtht5b5bzom2w5ajb27najuqvuydtzb7bavlak25wkufec5mq.b32.i2p:0 +2el6enckmfyiwbfcwsygkwksovtynzsigmyv3bzyk7j7qqahooua.b32.i2p:0 +3gocb7wc4zvbmmebktet7gujccuux4ifk3kqilnxnj5wpdpqx2hq.b32.i2p:0 +3tns2oov4tnllntotazy6umzkq4fhkco3iu5rnkxtu3pbfzxda7q.b32.i2p:0 +4fcc23wt3hyjk3csfzcdyjz5pcwg5dzhdqgma6bch2qyiakcbboa.b32.i2p:0 +4osyqeknhx5qf3a73jeimexwclmt42cju6xdp7icja4ixxguu2hq.b32.i2p:0 +4umsi4nlmgyp4rckosg4vegd2ysljvid47zu7pqsollkaszcbpqq.b32.i2p:0 +52v6uo6crlrlhzphslyiqblirux6olgsaa45ixih7sq5np4jujaa.b32.i2p:0 +6j2ezegd3e2e2x3o3pox335f5vxfthrrigkdrbgfbdjchm5h4awa.b32.i2p:0 +6n36ljyr55szci5ygidmxqer64qr24f4qmnymnbvgehz7qinxnla.b32.i2p:0 +72yjs6mvlby3ky6mgpvvlemmwq5pfcznrzd34jkhclgrishqdxva.b32.i2p:0 +7r4ri53lby2i3xqbgpw3idvhzeku7ubhftlf72ldqkg5kde6dauq.b32.i2p:0 a5qsnv3maw77mlmmzlcglu6twje6ttctd3fhpbfwcbpmewx6fczq.b32.i2p:0 -bitcornrd36coazsbzsz4pdebyzvaplmsalq4kpoljmn6cg6x5zq.b32.i2p:0 +aovep2pco7v2k4rheofrgytbgk23eg22dczpsjqgqtxcqqvmxk6a.b32.i2p:0 +bddbsmkas3z6fakorbkfjhv77i4hv6rysyjsvrdjukxolfghc23q.b32.i2p:0 +bitcoi656nll5hu6u7ddzrmzysdtwtnzcnrjd4rfdqbeey7dmn5a.b32.i2p:0 +brifkruhlkgrj65hffybrjrjqcgdgqs2r7siizb5b2232nruik3a.b32.i2p:0 c4gfnttsuwqomiygupdqqqyy5y5emnk5c73hrfvatri67prd7vyq.b32.i2p:0 -dhtq2p76tyhi442aidb3vd2bv7yxxjuddpb2jydnnrl2ons5bhha.b32.i2p:0 +day3hgxyrtwjslt54sikevbhxxs4qzo7d6vi72ipmscqtq3qmijq.b32.i2p:0 +di2zq6fr3fegf2jdcd7hdwyql4umr462gonsns2nxz5qg5vz4bka.b32.i2p:0 +e55k6wu46rzp4pg5pk5npgbr3zz45bc3ihtzu2xcye5vwnzdy7pq.b32.i2p:0 +eciohu5nq7vsvwjjc52epskuk75d24iccgzmhbzrwonw6lx4gdva.b32.i2p:0 +ejlnngarmhqvune74ko7kk55xtgbz5i5ncs4vmnvjpy3l7y63xaa.b32.i2p:0 +g47cqoppu26pr4n2cfaioqx7lbdi7mea7yqhlrkdz3wjwxjxdh2a.b32.i2p:0 h3r6bkn46qxftwja53pxiykntegfyfjqtnzbm6iv6r5mungmqgmq.b32.i2p:0 -hnbbyjpxx54623l555sta7pocy3se4sdgmuebi5k6reesz5rjp6q.b32.i2p:0 +hhfi4yqkg2twqiwezrfksftjjofbyx3ojkmlnfmcwntgnrjjhkya.b32.i2p:0 +hpiibrflqkbrcshfhmrtwfyeb7mds7a3obzwrgarejevddzamvsq.b32.i2p:0 +i4pyhsfdq4247dunel7paatdaq5gusi2hnybp2yf5wxwdnrgxaqq.b32.i2p:0 +iw6tgpmbdykffceku5da6nzf2bmz66fvp5fpcvemfu3df6aq6pga.b32.i2p:0 +jkfuajo4ayvo2rbv5qdj443q6adqmnormbhsf2f7rlp5t24xomda.b32.i2p:0 jz3s4eurm5vzjresf4mwo7oni4bk36daolwxh4iqtewakylgkxmq.b32.i2p:0 -kokkmpquqlkptu5hkmzqlttsmtwxicldr4so7wqsufk6bwf32nma.b32.i2p:0 +liu75cvktv4icbctg72w7nxbk4eibt7wamizfdii4omz7gcke5vq.b32.i2p:0 +ljsquuu3y4xje6l32p32inn6r2y6ull6oocgup6jtjrohrqxbz6a.b32.i2p:0 +lrah7acdsgopybg43shadwwiv6igezaw64i6jb5muqdg7dmhj3la.b32.i2p:0 +lzuu6mjtu7vd55d2biphicihufipoa7vyym6xfnkmmlra3tiziia.b32.i2p:0 +m6bpynxkv2ktwxkg6p2gyudjfhdupb6kuzabeqdnckkdkf4kxjla.b32.i2p:0 +m6v454xd6p3bt5swujgmveklsp7lzbkqlqqfc2p36cjlwv5dbucq.b32.i2p:0 +mlgeizrroynuhpxbzeosajt5u4ddcvynxfmcbm6kwjpaufilxigq.b32.i2p:0 +ofubxr2ir7u2guzjwyrvujicivzmvinwa36nuzlrg7tnsmebal7a.b32.i2p:0 +okfxeoh6itu4f5f43dhbzvkqwfrvm5c66lj6lvjj4q2b35i4pk4q.b32.i2p:0 +oz2ia3flpm3du2tyusulrn7h7e2eo3juzkrmn34bvnrlcrugv7ia.b32.i2p:0 +qd6jlsevsexww3wefpqs7iglxb3f63y4e6ydulfzrvwflpicmdqa.b32.i2p:0 +qddg7myylinn4tw6kdjmmp6fsyetkosnrbp2gsjx77tmkqyqv6ua.b32.i2p:0 +rizfinyses2r3or4iubs5wx66gdy6mpf73w7uobfacm2l5cral3q.b32.i2p:0 +s5hhjtmlg53bko3nwwskas7xgsmeqzy6thtsj5aa64djyrljgqaq.b32.i2p:0 sedndhv5vpcgdmykyi5st4yqhdxl3hpdtglta4do435wupahhx6q.b32.i2p:0 +tsl4dlpu2id252b6crbdnblruct664se6f2iw35fuqwa3te7wcoq.b32.i2p:0 +tugq6wa2ls2bv27pr2iy3da3k5ow3fzefbcvjcr22uc7w5vmevja.b32.i2p:0 +usztavbib756k5vqggzgkyswoj6mttihjvp3c2pa642t2mb4pvsa.b32.i2p:0 +vgu6llqbyjphml25umd5ztvyxrxuplz2g74fzbx75g3kkaetoyiq.b32.i2p:0 +wjrul5jwwb4vqdmkkrjbmly7osj6amecdpsac5xvaoqrti4nb3ha.b32.i2p:0 +wvktcp7hy4l6immhi5cxyz2dlsbhhvtcmskjemrnqehacnoap23q.b32.i2p:0 wwbw7nqr3ahkqv62cuqfwgtneekvvpnuc4i4f6yo7tpoqjswvcwa.b32.i2p:0 +xlqndzjoe5nr2nsxo6xwibh44ghyz4jfqevu62xykvemextpmjbq.b32.i2p:0 +yc4xwin5ujenvcr6ynwkz7lnmmq3nmzxvfguele6ovqqpxgjvonq.b32.i2p:0 +zdoabsg7ugzothyawodjhq54nvlofa746rxfkxpnjzj6nukmha6a.b32.i2p:0 zsxwyo6qcn3chqzwxnseusqgsnuw3maqnztkiypyfxtya4snkoka.b32.i2p:0 +zysrlpii5ftrzivfcyhdrwpeyyqddbrdefnfu5q6otk5gtugmh2a.b32.i2p:0 # manually added 2022-01 for minimal cjdns bootstrap support [fc32:17ea:e415:c3bf:9808:149d:b5a2:c9aa]:8333 diff --git a/contrib/seeds/nodes_main_manual.txt b/contrib/seeds/nodes_main_manual.txt index a6e0b8763a9b4..286448d95dcc0 100644 --- a/contrib/seeds/nodes_main_manual.txt +++ b/contrib/seeds/nodes_main_manual.txt @@ -1,42 +1,77 @@ -# manually added 2021-03 for minimal torv3 bootstrap support -2g5qfdkn2vvcbqhzcyvyiitg4ceukybxklraxjnu7atlhd22gdwywaid.onion:8333 -2jmtxvyup3ijr7u6uvu7ijtnojx4g5wodvaedivbv74w4vzntxbrhvad.onion:8333 -37m62wn7dz3uqpathpc4qfmgrbupachj52nt3jbtbjugpbu54kbud7yd.onion:8333 +# manually updated 2022-08 for minimal torv3 bootstrap support 5g72ppm3krkorsfopcm2bi7wlv4ohhs4u4mlseymasn7g7zhdcyjpfid.onion:8333 -7cgwjuwi5ehvcay4tazy7ya6463bndjk6xzrttw5t3xbpq4p22q6fyid.onion:8333 -7pyrpvqdhmayxggpcyqn5l3m5vqkw3qubnmgwlpya2mdo6x7pih7r7id.onion:8333 b64xcbleqmwgq2u46bh4hegnlrzzvxntyzbmucn3zt7cssm7y4ubv3id.onion:8333 -ejxefzf5fpst4mg2rib7grksvscl7p6fvjp6agzgfc2yglxnjtxc3aid.onion:8333 fjdyxicpm4o42xmedlwl3uvk5gmqdfs5j37wir52327vncjzvtpfv7yd.onion:8333 fpz6r5ppsakkwypjcglz6gcnwt7ytfhxskkfhzu62tnylcknh3eq6pad.onion:8333 -fzhn4uoxfbfss7h7d6ffbn266ca432ekbbzvqtsdd55ylgxn4jucm5qd.onion:8333 gxo5anvfnffnftfy5frkgvplq3rpga2ie3tcblo2vl754fvnhgorn5yd.onion:8333 ifdu5qvbofrt4ekui2iyb3kbcyzcsglazhx2hn4wfskkrx2v24qxriid.onion:8333 itz3oxsihs62muvknc237xabl5f6w6rfznfhbpayrslv2j2ubels47yd.onion:8333 -lrjh6fywjqttmlifuemq3puhvmshxzzyhoqx7uoufali57eypuenzzid.onion:8333 +kpgvmscirrdqpekbqjsvw5teanhatztpp2gl6eee4zkowvwfxwenqaid.onion:8333 m7cbpjolo662uel7rpaid46as2otcj44vvwg3gccodnvaeuwbm3anbyd.onion:8333 -opnyfyeiibe5qo5a3wbxzbb4xdiagc32bbce46owmertdknta5mi7uyd.onion:8333 -owjsdxmzla6d7lrwkbmetywqym5cyswpihciesfl5qdv2vrmwsgy4uqd.onion:8333 -q7kgmd7n7h27ds4fg7wocgniuqb3oe2zxp4nfe4skd5da6wyipibqzqd.onion:8333 +mwmfluek4au6mxxpw6fy7sjhkm65bdfc7izc7lpz3trewfdghyrzsbid.onion:8333 rp7k2go3s5lyj3fnj6zn62ktarlrsft2ohlsxkyd7v3e3idqyptvread.onion:8333 -sys54sv4xv3hn3sdiv3oadmzqpgyhd4u4xphv4xqk64ckvaxzm57a7yd.onion:8333 -tddeij4qigtjr6jfnrmq6btnirmq5msgwcsdpcdjr7atftm7cxlqztid.onion:8333 -vi5bnbxkleeqi6hfccjochnn65lcxlfqs4uwgmhudph554zibiusqnad.onion:8333 -xqt25cobm5zqucac3634zfght72he6u3eagfyej5ellbhcdgos7t2had.onion:8333 -# manually added 2021-08 for minimal i2p bootstrap support +# manually updated 2022-08 for minimal i2p bootstrap support +255fhcp6ajvftnyo7bwz3an3t4a4brhopm3bamyh2iu5r3gnr2rq.b32.i2p:0 +27yrtht5b5bzom2w5ajb27najuqvuydtzb7bavlak25wkufec5mq.b32.i2p:0 +2el6enckmfyiwbfcwsygkwksovtynzsigmyv3bzyk7j7qqahooua.b32.i2p:0 +3gocb7wc4zvbmmebktet7gujccuux4ifk3kqilnxnj5wpdpqx2hq.b32.i2p:0 +3tns2oov4tnllntotazy6umzkq4fhkco3iu5rnkxtu3pbfzxda7q.b32.i2p:0 +4fcc23wt3hyjk3csfzcdyjz5pcwg5dzhdqgma6bch2qyiakcbboa.b32.i2p:0 +4osyqeknhx5qf3a73jeimexwclmt42cju6xdp7icja4ixxguu2hq.b32.i2p:0 +4umsi4nlmgyp4rckosg4vegd2ysljvid47zu7pqsollkaszcbpqq.b32.i2p:0 +52v6uo6crlrlhzphslyiqblirux6olgsaa45ixih7sq5np4jujaa.b32.i2p:0 +6j2ezegd3e2e2x3o3pox335f5vxfthrrigkdrbgfbdjchm5h4awa.b32.i2p:0 +6n36ljyr55szci5ygidmxqer64qr24f4qmnymnbvgehz7qinxnla.b32.i2p:0 +72yjs6mvlby3ky6mgpvvlemmwq5pfcznrzd34jkhclgrishqdxva.b32.i2p:0 +7r4ri53lby2i3xqbgpw3idvhzeku7ubhftlf72ldqkg5kde6dauq.b32.i2p:0 a5qsnv3maw77mlmmzlcglu6twje6ttctd3fhpbfwcbpmewx6fczq.b32.i2p:0 -bitcornrd36coazsbzsz4pdebyzvaplmsalq4kpoljmn6cg6x5zq.b32.i2p:0 +aovep2pco7v2k4rheofrgytbgk23eg22dczpsjqgqtxcqqvmxk6a.b32.i2p:0 +bddbsmkas3z6fakorbkfjhv77i4hv6rysyjsvrdjukxolfghc23q.b32.i2p:0 +bitcoi656nll5hu6u7ddzrmzysdtwtnzcnrjd4rfdqbeey7dmn5a.b32.i2p:0 +brifkruhlkgrj65hffybrjrjqcgdgqs2r7siizb5b2232nruik3a.b32.i2p:0 c4gfnttsuwqomiygupdqqqyy5y5emnk5c73hrfvatri67prd7vyq.b32.i2p:0 -dhtq2p76tyhi442aidb3vd2bv7yxxjuddpb2jydnnrl2ons5bhha.b32.i2p:0 +day3hgxyrtwjslt54sikevbhxxs4qzo7d6vi72ipmscqtq3qmijq.b32.i2p:0 +di2zq6fr3fegf2jdcd7hdwyql4umr462gonsns2nxz5qg5vz4bka.b32.i2p:0 +e55k6wu46rzp4pg5pk5npgbr3zz45bc3ihtzu2xcye5vwnzdy7pq.b32.i2p:0 +eciohu5nq7vsvwjjc52epskuk75d24iccgzmhbzrwonw6lx4gdva.b32.i2p:0 +ejlnngarmhqvune74ko7kk55xtgbz5i5ncs4vmnvjpy3l7y63xaa.b32.i2p:0 +g47cqoppu26pr4n2cfaioqx7lbdi7mea7yqhlrkdz3wjwxjxdh2a.b32.i2p:0 h3r6bkn46qxftwja53pxiykntegfyfjqtnzbm6iv6r5mungmqgmq.b32.i2p:0 -hnbbyjpxx54623l555sta7pocy3se4sdgmuebi5k6reesz5rjp6q.b32.i2p:0 +hhfi4yqkg2twqiwezrfksftjjofbyx3ojkmlnfmcwntgnrjjhkya.b32.i2p:0 +hpiibrflqkbrcshfhmrtwfyeb7mds7a3obzwrgarejevddzamvsq.b32.i2p:0 +i4pyhsfdq4247dunel7paatdaq5gusi2hnybp2yf5wxwdnrgxaqq.b32.i2p:0 +iw6tgpmbdykffceku5da6nzf2bmz66fvp5fpcvemfu3df6aq6pga.b32.i2p:0 +jkfuajo4ayvo2rbv5qdj443q6adqmnormbhsf2f7rlp5t24xomda.b32.i2p:0 jz3s4eurm5vzjresf4mwo7oni4bk36daolwxh4iqtewakylgkxmq.b32.i2p:0 -kokkmpquqlkptu5hkmzqlttsmtwxicldr4so7wqsufk6bwf32nma.b32.i2p:0 +liu75cvktv4icbctg72w7nxbk4eibt7wamizfdii4omz7gcke5vq.b32.i2p:0 +ljsquuu3y4xje6l32p32inn6r2y6ull6oocgup6jtjrohrqxbz6a.b32.i2p:0 +lrah7acdsgopybg43shadwwiv6igezaw64i6jb5muqdg7dmhj3la.b32.i2p:0 +lzuu6mjtu7vd55d2biphicihufipoa7vyym6xfnkmmlra3tiziia.b32.i2p:0 +m6bpynxkv2ktwxkg6p2gyudjfhdupb6kuzabeqdnckkdkf4kxjla.b32.i2p:0 +m6v454xd6p3bt5swujgmveklsp7lzbkqlqqfc2p36cjlwv5dbucq.b32.i2p:0 +mlgeizrroynuhpxbzeosajt5u4ddcvynxfmcbm6kwjpaufilxigq.b32.i2p:0 +ofubxr2ir7u2guzjwyrvujicivzmvinwa36nuzlrg7tnsmebal7a.b32.i2p:0 +okfxeoh6itu4f5f43dhbzvkqwfrvm5c66lj6lvjj4q2b35i4pk4q.b32.i2p:0 +oz2ia3flpm3du2tyusulrn7h7e2eo3juzkrmn34bvnrlcrugv7ia.b32.i2p:0 +qd6jlsevsexww3wefpqs7iglxb3f63y4e6ydulfzrvwflpicmdqa.b32.i2p:0 +qddg7myylinn4tw6kdjmmp6fsyetkosnrbp2gsjx77tmkqyqv6ua.b32.i2p:0 +rizfinyses2r3or4iubs5wx66gdy6mpf73w7uobfacm2l5cral3q.b32.i2p:0 +s5hhjtmlg53bko3nwwskas7xgsmeqzy6thtsj5aa64djyrljgqaq.b32.i2p:0 sedndhv5vpcgdmykyi5st4yqhdxl3hpdtglta4do435wupahhx6q.b32.i2p:0 +tsl4dlpu2id252b6crbdnblruct664se6f2iw35fuqwa3te7wcoq.b32.i2p:0 +tugq6wa2ls2bv27pr2iy3da3k5ow3fzefbcvjcr22uc7w5vmevja.b32.i2p:0 +usztavbib756k5vqggzgkyswoj6mttihjvp3c2pa642t2mb4pvsa.b32.i2p:0 +vgu6llqbyjphml25umd5ztvyxrxuplz2g74fzbx75g3kkaetoyiq.b32.i2p:0 +wjrul5jwwb4vqdmkkrjbmly7osj6amecdpsac5xvaoqrti4nb3ha.b32.i2p:0 +wvktcp7hy4l6immhi5cxyz2dlsbhhvtcmskjemrnqehacnoap23q.b32.i2p:0 wwbw7nqr3ahkqv62cuqfwgtneekvvpnuc4i4f6yo7tpoqjswvcwa.b32.i2p:0 +xlqndzjoe5nr2nsxo6xwibh44ghyz4jfqevu62xykvemextpmjbq.b32.i2p:0 +yc4xwin5ujenvcr6ynwkz7lnmmq3nmzxvfguele6ovqqpxgjvonq.b32.i2p:0 +zdoabsg7ugzothyawodjhq54nvlofa746rxfkxpnjzj6nukmha6a.b32.i2p:0 zsxwyo6qcn3chqzwxnseusqgsnuw3maqnztkiypyfxtya4snkoka.b32.i2p:0 +zysrlpii5ftrzivfcyhdrwpeyyqddbrdefnfu5q6otk5gtugmh2a.b32.i2p:0 # manually added 2022-01 for minimal cjdns bootstrap support [fc32:17ea:e415:c3bf:9808:149d:b5a2:c9aa]:8333 diff --git a/contrib/signet/miner b/contrib/signet/miner index b366b98e2d8d9..fdcd20ae3b4e8 100755 --- a/contrib/signet/miner +++ b/contrib/signet/miner @@ -4,7 +4,6 @@ # file COPYING or http://www.opensource.org/licenses/mit-license.php. import argparse -import base64 import json import logging import math @@ -15,14 +14,13 @@ import sys import time import subprocess -from io import BytesIO - PATH_BASE_CONTRIB_SIGNET = os.path.abspath(os.path.dirname(os.path.realpath(__file__))) PATH_BASE_TEST_FUNCTIONAL = os.path.abspath(os.path.join(PATH_BASE_CONTRIB_SIGNET, "..", "..", "test", "functional")) sys.path.insert(0, PATH_BASE_TEST_FUNCTIONAL) -from test_framework.blocktools import WITNESS_COMMITMENT_HEADER, script_BIP34_coinbase_height # noqa: E402 -from test_framework.messages import CBlock, CBlockHeader, COutPoint, CTransaction, CTxIn, CTxInWitness, CTxOut, from_hex, deser_string, hash256, ser_compact_size, ser_string, ser_uint256, tx_from_hex, uint256_from_str # noqa: E402 +from test_framework.blocktools import get_witness_script, script_BIP34_coinbase_height # noqa: E402 +from test_framework.messages import CBlock, CBlockHeader, COutPoint, CTransaction, CTxIn, CTxInWitness, CTxOut, from_binary, from_hex, ser_string, ser_uint256, tx_from_hex # noqa: E402 +from test_framework.psbt import PSBT, PSBTMap, PSBT_GLOBAL_UNSIGNED_TX, PSBT_IN_FINAL_SCRIPTSIG, PSBT_IN_FINAL_SCRIPTWITNESS, PSBT_IN_NON_WITNESS_UTXO, PSBT_IN_SIGHASH_TYPE # noqa: E402 from test_framework.script import CScriptOp # noqa: E402 logging.basicConfig( @@ -34,99 +32,12 @@ SIGNET_HEADER = b"\xec\xc7\xda\xa2" PSBT_SIGNET_BLOCK = b"\xfc\x06signetb" # proprietary PSBT global field holding the block being signed RE_MULTIMINER = re.compile("^(\d+)(-(\d+))?/(\d+)$") -# #### some helpers that could go into test_framework - -# like from_hex, but without the hex part -def FromBinary(cls, stream): - """deserialize a binary stream (or bytes object) into an object""" - # handle bytes object by turning it into a stream - was_bytes = isinstance(stream, bytes) - if was_bytes: - stream = BytesIO(stream) - obj = cls() - obj.deserialize(stream) - if was_bytes: - assert len(stream.read()) == 0 - return obj - -class PSBTMap: - """Class for serializing and deserializing PSBT maps""" - - def __init__(self, map=None): - self.map = map if map is not None else {} - - def deserialize(self, f): - m = {} - while True: - k = deser_string(f) - if len(k) == 0: - break - v = deser_string(f) - if len(k) == 1: - k = k[0] - assert k not in m - m[k] = v - self.map = m - - def serialize(self): - m = b"" - for k,v in self.map.items(): - if isinstance(k, int) and 0 <= k and k <= 255: - k = bytes([k]) - m += ser_compact_size(len(k)) + k - m += ser_compact_size(len(v)) + v - m += b"\x00" - return m - -class PSBT: - """Class for serializing and deserializing PSBTs""" - - def __init__(self): - self.g = PSBTMap() - self.i = [] - self.o = [] - self.tx = None - - def deserialize(self, f): - assert f.read(5) == b"psbt\xff" - self.g = FromBinary(PSBTMap, f) - assert 0 in self.g.map - self.tx = FromBinary(CTransaction, self.g.map[0]) - self.i = [FromBinary(PSBTMap, f) for _ in self.tx.vin] - self.o = [FromBinary(PSBTMap, f) for _ in self.tx.vout] - return self - - def serialize(self): - assert isinstance(self.g, PSBTMap) - assert isinstance(self.i, list) and all(isinstance(x, PSBTMap) for x in self.i) - assert isinstance(self.o, list) and all(isinstance(x, PSBTMap) for x in self.o) - assert 0 in self.g.map - tx = FromBinary(CTransaction, self.g.map[0]) - assert len(tx.vin) == len(self.i) - assert len(tx.vout) == len(self.o) - - psbt = [x.serialize() for x in [self.g] + self.i + self.o] - return b"psbt\xff" + b"".join(psbt) - - def to_base64(self): - return base64.b64encode(self.serialize()).decode("utf8") - - @classmethod - def from_base64(cls, b64psbt): - return FromBinary(cls, base64.b64decode(b64psbt)) - -# ##### - def create_coinbase(height, value, spk): cb = CTransaction() cb.vin = [CTxIn(COutPoint(0, 0xffffffff), script_BIP34_coinbase_height(height), 0xffffffff)] cb.vout = [CTxOut(value, spk)] return cb -def get_witness_script(witness_root, witness_nonce): - commitment = uint256_from_str(hash256(ser_uint256(witness_root) + ser_uint256(witness_nonce))) - return b"\x6a" + CScriptOp.encode_op_pushdata(WITNESS_COMMITMENT_HEADER + ser_uint256(commitment)) - def signet_txs(block, challenge): # assumes signet solution has not been added yet so does not need # to be removed @@ -163,11 +74,11 @@ def signet_txs(block, challenge): def do_createpsbt(block, signme, spendme): psbt = PSBT() - psbt.g = PSBTMap( {0: signme.serialize(), + psbt.g = PSBTMap( {PSBT_GLOBAL_UNSIGNED_TX: signme.serialize(), PSBT_SIGNET_BLOCK: block.serialize() } ) - psbt.i = [ PSBTMap( {0: spendme.serialize(), - 3: bytes([1,0,0,0])}) + psbt.i = [ PSBTMap( {PSBT_IN_NON_WITNESS_UTXO: spendme.serialize(), + PSBT_IN_SIGHASH_TYPE: bytes([1,0,0,0])}) ] psbt.o = [ PSBTMap() ] return psbt.to_base64() @@ -179,10 +90,10 @@ def do_decode_psbt(b64psbt): assert len(psbt.tx.vout) == 1 assert PSBT_SIGNET_BLOCK in psbt.g.map - scriptSig = psbt.i[0].map.get(7, b"") - scriptWitness = psbt.i[0].map.get(8, b"\x00") + scriptSig = psbt.i[0].map.get(PSBT_IN_FINAL_SCRIPTSIG, b"") + scriptWitness = psbt.i[0].map.get(PSBT_IN_FINAL_SCRIPTWITNESS, b"\x00") - return FromBinary(CBlock, psbt.g.map[PSBT_SIGNET_BLOCK]), ser_string(scriptSig) + scriptWitness + return from_binary(CBlock, psbt.g.map[PSBT_SIGNET_BLOCK]), ser_string(scriptSig) + scriptWitness def finish_block(block, signet_solution, grind_cmd): block.vtx[0].vout[-1].scriptPubKey += CScriptOp.encode_op_pushdata(SIGNET_HEADER + signet_solution) @@ -222,7 +133,7 @@ def generate_psbt(tmpl, reward_spk, *, blocktime=None): cbwit = CTxInWitness() cbwit.scriptWitness.stack = [ser_uint256(witnonce)] block.vtx[0].wit.vtxinwit = [cbwit] - block.vtx[0].vout.append(CTxOut(0, get_witness_script(witroot, witnonce))) + block.vtx[0].vout.append(CTxOut(0, bytes(get_witness_script(witroot, witnonce)))) signme, spendme = signet_txs(block, signet_spk_bin) @@ -627,5 +538,3 @@ def main(): if __name__ == "__main__": main() - - diff --git a/contrib/valgrind.supp b/contrib/valgrind.supp index 6efe49254b90a..d6856b42749ed 100644 --- a/contrib/valgrind.supp +++ b/contrib/valgrind.supp @@ -64,12 +64,6 @@ ... obj:*/libdb_cxx-*.so } -{ - Suppress leaks on init - Memcheck:Leak - ... - fun:_Z11AppInitMainR11NodeContext -} { Suppress leaks on shutdown Memcheck:Leak @@ -82,21 +76,6 @@ ... obj:/usr/lib64/libgdk-3.so.0.2404.7 } -{ - Suppress leveldb warning (leveldb::InitModule()) - https://github.com/google/leveldb/issues/113 - Memcheck:Leak - match-leak-kinds: reachable - fun:_Znwm - fun:_ZN7leveldbL10InitModuleEv -} -{ - Suppress leveldb warning (leveldb::Env::Default()) - https://github.com/google/leveldb/issues/113 - Memcheck:Leak - match-leak-kinds: reachable - fun:_Znwm - ... - fun:_ZN7leveldbL14InitDefaultEnvEv -} { Suppress leveldb leak Memcheck:Leak diff --git a/contrib/verify-commits/trusted-keys b/contrib/verify-commits/trusted-keys index 2f8a21009aebc..5ca65e7b0d188 100644 --- a/contrib/verify-commits/trusted-keys +++ b/contrib/verify-commits/trusted-keys @@ -1,6 +1,6 @@ 71A3B16735405025D447E8F274810B012346C9A6 -133EAC179436F14A5CF1B794860FEB804E669320 B8B3F1C0E58C15DB6A81D30C3648A882F4316B9B E777299FC265DD04793070EB944D35F9AC3DB76A D1DBF2C4B96F2DEBF4C16654410108112E7EA81F 152812300785C96444D3334D17565732E08E5E41 +6B002C6EA3F91B1B0DF0C9BC8F617F1200A6D25C diff --git a/depends/config.site.in b/depends/config.site.in index 189330c42daad..8f6849214d164 100644 --- a/depends/config.site.in +++ b/depends/config.site.in @@ -84,12 +84,9 @@ fi PKG_CONFIG="$(which pkg-config) --static" -# These two need to remain exported because pkg-config does not see them -# otherwise. That means they must be unexported at the end of configure.ac to -# avoid ruining the cache. Sigh. -export PKG_CONFIG_PATH="${depends_prefix}/share/pkgconfig:${depends_prefix}/lib/pkgconfig" +PKG_CONFIG_PATH="${depends_prefix}/share/pkgconfig:${depends_prefix}/lib/pkgconfig" if test -z "@allow_host_packages@"; then - export PKG_CONFIG_LIBDIR="${depends_prefix}/lib/pkgconfig" + PKG_CONFIG_LIBDIR="${depends_prefix}/lib/pkgconfig" fi CPPFLAGS="-I${depends_prefix}/include/ ${CPPFLAGS}" @@ -105,7 +102,7 @@ PYTHONPATH="${depends_prefix}/native/lib/python3/dist-packages${PYTHONPATH:+${PA if test -n "@AR@"; then AR="@AR@" - ac_cv_path_ac_pt_AR="${AR}" + ac_cv_path_AR="${AR}" fi if test -n "@RANLIB@"; then @@ -126,17 +123,17 @@ fi if test "@host_os@" = darwin; then if test -n "@OTOOL@"; then OTOOL="@OTOOL@" - ac_cv_path_ac_pt_OTOOL="${OTOOL}" + ac_cv_path_OTOOL="${OTOOL}" fi if test -n "@INSTALL_NAME_TOOL@"; then INSTALL_NAME_TOOL="@INSTALL_NAME_TOOL@" - ac_cv_path_ac_pt_INSTALL_NAME_TOOL="${INSTALL_NAME_TOOL}" + ac_cv_path_INSTALL_NAME_TOOL="${INSTALL_NAME_TOOL}" fi if test -n "@DSYMUTIL@"; then DSYMUTIL="@DSYMUTIL@" - ac_cv_path_ac_pt_DSYMUTIL="${DSYMUTIL}" + ac_cv_path_DSYMUTIL="${DSYMUTIL}" fi fi diff --git a/depends/hosts/android.mk b/depends/hosts/android.mk index 14028bcfcc915..db32d02fe84a9 100644 --- a/depends/hosts/android.mk +++ b/depends/hosts/android.mk @@ -1,9 +1,11 @@ ifeq ($(HOST),armv7a-linux-android) android_CXX=$(ANDROID_TOOLCHAIN_BIN)/$(HOST)eabi$(ANDROID_API_LEVEL)-clang++ android_CC=$(ANDROID_TOOLCHAIN_BIN)/$(HOST)eabi$(ANDROID_API_LEVEL)-clang +android_NM=$(ANDROID_TOOLCHAIN_BIN)/$(HOST)eabi$(ANDROID_API_LEVEL)-nm else android_CXX=$(ANDROID_TOOLCHAIN_BIN)/$(HOST)$(ANDROID_API_LEVEL)-clang++ android_CC=$(ANDROID_TOOLCHAIN_BIN)/$(HOST)$(ANDROID_API_LEVEL)-clang +android_NM=$(ANDROID_TOOLCHAIN_BIN)/$(HOST)$(ANDROID_API_LEVEL)-nm endif android_CFLAGS=-std=$(C_STANDARD) diff --git a/depends/hosts/darwin.mk b/depends/hosts/darwin.mk index 8507e285328be..8fcea35d9875c 100644 --- a/depends/hosts/darwin.mk +++ b/depends/hosts/darwin.mk @@ -17,6 +17,7 @@ darwin_native_toolchain=native_cctools clang_prog=$(build_prefix)/bin/clang clangxx_prog=$(clang_prog)++ +llvm_config_prog=$(build_prefix)/bin/llvm-config clang_resource_dir=$(build_prefix)/lib/clang/$(native_clang_version) else @@ -34,8 +35,10 @@ darwin_native_toolchain= # Source: https://lists.gnu.org/archive/html/bug-make/2017-11/msg00017.html clang_prog=$(shell $(SHELL) $(.SHELLFLAGS) "command -v clang") clangxx_prog=$(shell $(SHELL) $(.SHELLFLAGS) "command -v clang++") +llvm_config_prog=$(shell $(SHELL) $(.SHELLFLAGS) "command -v llvm-config") clang_resource_dir=$(shell clang -print-resource-dir) +llvm_lib_dir=$(shell $(llvm_config_prog) --libdir) endif cctools_TOOLS=AR RANLIB STRIP NM LIBTOOL OTOOL INSTALL_NAME_TOOL DSYMUTIL diff --git a/depends/hosts/default.mk b/depends/hosts/default.mk index ea60f025dece9..7c76331ab4a4f 100644 --- a/depends/hosts/default.mk +++ b/depends/hosts/default.mk @@ -9,6 +9,7 @@ default_host_RANLIB = $(host_toolchain)ranlib default_host_STRIP = $(host_toolchain)strip default_host_LIBTOOL = $(host_toolchain)libtool default_host_NM = $(host_toolchain)nm +default_host_OBJCOPY = $(host_toolchain)objcopy define add_host_tool_func ifneq ($(filter $(origin $1),undefined default),) @@ -33,5 +34,5 @@ host_$1 = $$($(host_arch)_$(host_os)_$1) host_$(release_type)_$1 = $$($(host_arch)_$(host_os)_$(release_type)_$1) endef -$(foreach tool,CC CXX AR RANLIB STRIP NM LIBTOOL OTOOL INSTALL_NAME_TOOL DSYMUTIL,$(eval $(call add_host_tool_func,$(tool)))) +$(foreach tool,CC CXX AR RANLIB STRIP LIBTOOL NM OBJCOPY OTOOL INSTALL_NAME_TOOL DSYMUTIL,$(eval $(call add_host_tool_func,$(tool)))) $(foreach flags,CFLAGS CXXFLAGS CPPFLAGS LDFLAGS, $(eval $(call add_host_flags_func,$(flags)))) diff --git a/depends/hosts/linux.mk b/depends/hosts/linux.mk index b101043439ddf..635d3d16da98d 100644 --- a/depends/hosts/linux.mk +++ b/depends/hosts/linux.mk @@ -5,6 +5,10 @@ ifneq ($(LTO),) linux_CFLAGS += -flto linux_CXXFLAGS += -flto linux_LDFLAGS += -flto + +linux_AR = $(host_toolchain)gcc-ar +linux_NM = $(host_toolchain)gcc-nm +linux_RANLIB = $(host_toolchain)gcc-ranlib endif linux_release_CFLAGS=-O2 diff --git a/depends/hosts/mingw32.mk b/depends/hosts/mingw32.mk index b98f9ab7acc92..fc1cc1afbe5cc 100644 --- a/depends/hosts/mingw32.mk +++ b/depends/hosts/mingw32.mk @@ -9,6 +9,10 @@ ifneq ($(LTO),) mingw32_CFLAGS += -flto mingw32_CXXFLAGS += -flto mingw32_LDFLAGS += -flto + +mingw32_AR = $(host_toolchain)gcc-ar +mingw32_NM = $(host_toolchain)gcc-nm +mingw32_RANLIB = $(host_toolchain)gcc-ranlib endif mingw32_release_CFLAGS=-O2 diff --git a/depends/hosts/netbsd.mk b/depends/hosts/netbsd.mk index 8342dcc6ede72..14121dca20f32 100644 --- a/depends/hosts/netbsd.mk +++ b/depends/hosts/netbsd.mk @@ -5,6 +5,10 @@ ifneq ($(LTO),) netbsd_CFLAGS += -flto netbsd_CXXFLAGS += -flto netbsd_LDFLAGS += -flto + +netbsd_AR = $(host_toolchain)gcc-ar +netbsd_NM = $(host_toolchain)gcc-nm +netbsd_RANLIB = $(host_toolchain)gcc-ranlib endif netbsd_CXXFLAGS=$(netbsd_CFLAGS) diff --git a/depends/packages/bdb.mk b/depends/packages/bdb.mk index 80c7ce8429033..2370c5b759ac7 100644 --- a/depends/packages/bdb.mk +++ b/depends/packages/bdb.mk @@ -14,7 +14,7 @@ $(package)_config_opts_freebsd=--with-pic $(package)_config_opts_netbsd=--with-pic $(package)_config_opts_openbsd=--with-pic $(package)_config_opts_android=--with-pic -$(package)_cflags+=-Wno-error=implicit-function-declaration +$(package)_cflags+=-Wno-error=implicit-function-declaration -Wno-error=format-security $(package)_cppflags_mingw32=-DUNICODE -D_UNICODE endef diff --git a/depends/packages/expat.mk b/depends/packages/expat.mk index 50791ebc6e29e..bb203d06f8442 100644 --- a/depends/packages/expat.mk +++ b/depends/packages/expat.mk @@ -1,14 +1,18 @@ package=expat -$(package)_version=2.4.1 +$(package)_version=2.4.8 $(package)_download_path=https://github.com/libexpat/libexpat/releases/download/R_$(subst .,_,$($(package)_version))/ $(package)_file_name=$(package)-$($(package)_version).tar.xz -$(package)_sha256_hash=cf032d0dba9b928636548e32b327a2d66b1aab63c4f4a13dd132c2d1d2f2fb6a +$(package)_sha256_hash=f79b8f904b749e3e0d20afeadecf8249c55b2e32d4ebb089ae378df479dcaf25 +# -D_DEFAULT_SOURCE defines __USE_MISC, which exposes additional +# definitions in endian.h, which are required for a working +# endianess check in configure when building with -flto. define $(package)_set_vars $(package)_config_opts=--disable-shared --without-docbook --without-tests --without-examples $(package)_config_opts += --disable-dependency-tracking --enable-option-checking $(package)_config_opts += --without-xmlwf $(package)_config_opts_linux=--with-pic + $(package)_cppflags += -D_DEFAULT_SOURCE endef define $(package)_config_cmds diff --git a/depends/packages/libxcb.mk b/depends/packages/libxcb.mk index fa30e80f5c087..036eaf6560a11 100644 --- a/depends/packages/libxcb.mk +++ b/depends/packages/libxcb.mk @@ -4,6 +4,7 @@ $(package)_download_path=https://xcb.freedesktop.org/dist $(package)_file_name=$(package)-$($(package)_version).tar.xz $(package)_sha256_hash=a55ed6db98d43469801262d81dc2572ed124edc3db31059d4e9916eb9f844c34 $(package)_dependencies=xcb_proto libXau +$(package)_patches = remove_pthread_stubs.patch define $(package)_set_vars $(package)_config_opts=--disable-static --disable-devel-docs --without-doxygen --without-launchd @@ -20,7 +21,7 @@ endef define $(package)_preprocess_cmds cp -f $(BASEDIR)/config.guess $(BASEDIR)/config.sub build-aux && \ - sed "s/pthread-stubs//" -i configure + patch -p1 -i $($(package)_patch_dir)/remove_pthread_stubs.patch endef define $(package)_config_cmds diff --git a/depends/packages/native_cctools.mk b/depends/packages/native_cctools.mk index d169eb6723184..03e9002ecd759 100644 --- a/depends/packages/native_cctools.mk +++ b/depends/packages/native_cctools.mk @@ -7,18 +7,24 @@ $(package)_build_subdir=cctools $(package)_dependencies=native_libtapi define $(package)_set_vars - $(package)_config_opts=--target=$(host) + $(package)_config_opts=--target=$(host) --enable-lto-support + $(package)_config_opts+=--with-llvm-config=$(llvm_config_prog) $(package)_ldflags+=-Wl,-rpath=\\$$$$$$$$\$$$$$$$$ORIGIN/../lib - ifeq ($(strip $(FORCE_USE_SYSTEM_CLANG)),) - $(package)_config_opts+=--enable-lto-support --with-llvm-config=$(build_prefix)/bin/llvm-config - endif $(package)_cc=$(clang_prog) $(package)_cxx=$(clangxx_prog) endef +ifneq ($(strip $(FORCE_USE_SYSTEM_CLANG)),) define $(package)_preprocess_cmds + mkdir -p $($(package)_staging_prefix_dir)/lib && \ + cp $(llvm_lib_dir)/libLTO.so $($(package)_staging_prefix_dir)/lib/ && \ cp -f $(BASEDIR)/config.guess $(BASEDIR)/config.sub cctools endef +else +define $(package)_preprocess_cmds + cp -f $(BASEDIR)/config.guess $(BASEDIR)/config.sub cctools +endef +endif define $(package)_config_cmds $($(package)_autoconf) diff --git a/depends/packages/native_clang.mk b/depends/packages/native_clang.mk index 245269a9d342a..f2712294ab20e 100644 --- a/depends/packages/native_clang.mk +++ b/depends/packages/native_clang.mk @@ -16,10 +16,13 @@ endef define $(package)_stage_cmds mkdir -p $($(package)_staging_prefix_dir)/lib/clang/$($(package)_version)/include && \ mkdir -p $($(package)_staging_prefix_dir)/bin && \ + mkdir -p $($(package)_staging_prefix_dir)/include/llvm-c && \ cp bin/clang $($(package)_staging_prefix_dir)/bin/ && \ cp -P bin/clang++ $($(package)_staging_prefix_dir)/bin/ && \ cp bin/dsymutil $($(package)_staging_prefix_dir)/bin/$(host)-dsymutil && \ cp bin/llvm-config $($(package)_staging_prefix_dir)/bin/ && \ + cp include/llvm-c/ExternC.h $($(package)_staging_prefix_dir)/include/llvm-c && \ + cp include/llvm-c/lto.h $($(package)_staging_prefix_dir)/include/llvm-c && \ cp lib/libLTO.so $($(package)_staging_prefix_dir)/lib/ && \ cp -r lib/clang/$($(package)_version)/include/* $($(package)_staging_prefix_dir)/lib/clang/$($(package)_version)/include/ endef diff --git a/depends/packages/native_ds_store.mk b/depends/packages/native_ds_store.mk index 44108925a4f3b..51a95f48ef7b1 100644 --- a/depends/packages/native_ds_store.mk +++ b/depends/packages/native_ds_store.mk @@ -1,6 +1,6 @@ package=native_ds_store $(package)_version=1.3.0 -$(package)_download_path=https://github.com/al45tair/ds_store/archive/ +$(package)_download_path=https://github.com/dmgbuild/ds_store/archive/ $(package)_file_name=v$($(package)_version).tar.gz $(package)_sha256_hash=76b3280cd4e19e5179defa23fb594a9dd32643b0c80d774bd3108361d94fb46d $(package)_install_libdir=$(build_prefix)/lib/python3/dist-packages diff --git a/depends/packages/native_libtapi.mk b/depends/packages/native_libtapi.mk index 1633213a42337..052bb2368933a 100644 --- a/depends/packages/native_libtapi.mk +++ b/depends/packages/native_libtapi.mk @@ -13,7 +13,5 @@ define $(package)_build_cmds endef define $(package)_stage_cmds - ./install.sh && \ - mkdir -p $($(package)_staging_prefix_dir)/include/llvm-c && \ - cp src/llvm/include/llvm-c/lto.h $($(package)_staging_prefix_dir)/include/llvm-c + ./install.sh endef diff --git a/depends/packages/native_mac_alias.mk b/depends/packages/native_mac_alias.mk index 783f87ca7c043..ddd631186edf7 100644 --- a/depends/packages/native_mac_alias.mk +++ b/depends/packages/native_mac_alias.mk @@ -1,6 +1,6 @@ package=native_mac_alias $(package)_version=2.2.0 -$(package)_download_path=https://github.com/al45tair/mac_alias/archive/ +$(package)_download_path=https://github.com/dmgbuild/mac_alias/archive/ $(package)_file_name=v$($(package)_version).tar.gz $(package)_sha256_hash=421e6d7586d1f155c7db3e7da01ca0dacc9649a509a253ad7077b70174426499 $(package)_install_libdir=$(build_prefix)/lib/python3/dist-packages diff --git a/depends/packages/qt.mk b/depends/packages/qt.mk index 7e268fe9a5773..e854843dab2e1 100644 --- a/depends/packages/qt.mk +++ b/depends/packages/qt.mk @@ -1,9 +1,9 @@ package=qt -$(package)_version=5.15.3 +$(package)_version=5.15.5 $(package)_download_path=https://download.qt.io/official_releases/qt/5.15/$($(package)_version)/submodules $(package)_suffix=everywhere-opensource-src-$($(package)_version).tar.xz $(package)_file_name=qtbase-$($(package)_suffix) -$(package)_sha256_hash=26394ec9375d52c1592bd7b689b1619c6b8dbe9b6f91fdd5c355589787f3a0b6 +$(package)_sha256_hash=0c42c799aa7c89e479a07c451bf5a301e291266ba789e81afc18f95049524edc $(package)_linux_dependencies=freetype fontconfig libxcb libxkbcommon libxcb_util libxcb_util_render libxcb_util_keysyms libxcb_util_image libxcb_util_wm $(package)_qt_libs=corelib network widgets gui plugins testlib $(package)_linguist_tools = lrelease lupdate lconvert @@ -17,16 +17,17 @@ $(package)_patches += fix_montery_include.patch $(package)_patches += fix_android_jni_static.patch $(package)_patches += dont_hardcode_pwd.patch $(package)_patches += qtbase-moc-ignore-gcc-macro.patch -$(package)_patches += fix_limits_header.patch $(package)_patches += use_android_ndk23.patch $(package)_patches += rcc_hardcode_timestamp.patch $(package)_patches += duplicate_lcqpafonts.patch +$(package)_patches += fast_fixed_dtoa_no_optimize.patch +$(package)_patches += guix_cross_lib_path.patch $(package)_qttranslations_file_name=qttranslations-$($(package)_suffix) -$(package)_qttranslations_sha256_hash=5d7869f670a135ad0986e266813b9dd5bbae2b09577338f9cdf8904d4af52db0 +$(package)_qttranslations_sha256_hash=c92af4171397a0ed272330b4fa0669790fcac8d050b07c8b8cc565ebeba6735e $(package)_qttools_file_name=qttools-$($(package)_suffix) -$(package)_qttools_sha256_hash=463b2fe71a085e7ab4e39333ae360ab0ec857b966d7a08f752c427e5df55f90d +$(package)_qttools_sha256_hash=6d0778b71b2742cb527561791d1d3d255366163d54a10f78c683a398f09ffc6c $(package)_extra_sources = $($(package)_qttranslations_file_name) $(package)_extra_sources += $($(package)_qttools_file_name) @@ -130,6 +131,9 @@ $(package)_config_opts_darwin += -no-feature-corewlan $(package)_config_opts_darwin += -no-freetype $(package)_config_opts_darwin += QMAKE_MACOSX_DEPLOYMENT_TARGET=$(OSX_MIN_VERSION) +# Optimizing using > -O1 causes non-determinism when building across arches. +$(package)_config_opts_aarch64_darwin += "QMAKE_CFLAGS_OPTIMIZE_FULL = -O1" + ifneq ($(build_os),darwin) $(package)_config_opts_darwin += -xplatform macx-clang-linux $(package)_config_opts_darwin += -device-option MAC_SDK_PATH=$(OSX_SDK) @@ -152,18 +156,13 @@ $(package)_config_opts_linux += -fontconfig $(package)_config_opts_linux += -no-opengl $(package)_config_opts_linux += -no-feature-vulkan $(package)_config_opts_linux += -dbus-runtime -$(package)_config_opts_arm_linux += -platform linux-g++ -xplatform bitcoin-linux-g++ -$(package)_config_opts_i686_linux = -xplatform linux-g++-32 +ifneq ($(LTO),) +$(package)_config_opts_linux += -ltcg +endif +$(package)_config_opts_linux += -platform linux-g++ -xplatform bitcoin-linux-g++ ifneq (,$(findstring -stdlib=libc++,$($(1)_cxx))) $(package)_config_opts_x86_64_linux = -xplatform linux-clang-libc++ -else -$(package)_config_opts_x86_64_linux = -xplatform linux-g++-64 endif -$(package)_config_opts_aarch64_linux = -xplatform linux-aarch64-gnu-g++ -$(package)_config_opts_powerpc64_linux = -platform linux-g++ -xplatform bitcoin-linux-g++ -$(package)_config_opts_powerpc64le_linux = -platform linux-g++ -xplatform bitcoin-linux-g++ -$(package)_config_opts_riscv64_linux = -platform linux-g++ -xplatform bitcoin-linux-g++ -$(package)_config_opts_s390x_linux = -platform linux-g++ -xplatform bitcoin-linux-g++ $(package)_config_opts_mingw32 = -no-opengl $(package)_config_opts_mingw32 += -no-dbus @@ -173,6 +172,7 @@ $(package)_config_opts_mingw32 += "QMAKE_CFLAGS = '$($(package)_cflags) $($(pack $(package)_config_opts_mingw32 += "QMAKE_CXX = '$($(package)_cxx)'" $(package)_config_opts_mingw32 += "QMAKE_CXXFLAGS = '$($(package)_cxxflags) $($(package)_cppflags)'" $(package)_config_opts_mingw32 += "QMAKE_LFLAGS = '$($(package)_ldflags)'" +$(package)_config_opts_mingw32 += "QMAKE_LIB = '$($(package)_ar) rc'" $(package)_config_opts_mingw32 += -device-option CROSS_COMPILE="$(host)-" $(package)_config_opts_mingw32 += -pch @@ -222,18 +222,11 @@ endef # 2. Create a macOS-Clang-Linux mkspec using our mac-qmake.conf. # # 3. After making a copy of the mkspec for the linux-arm-gnueabi host, named -# bitcoin-linux-g++, replace instances of linux-arm-gnueabi with $(host). This -# way we can generically support hosts like riscv64-linux-gnu, which Qt doesn't -# ship a mkspec for. See it's usage in config_opts_* above. +# bitcoin-linux-g++, replace tool names with $($($(package)_type)_TOOL). # # 4. Put our C, CXX and LD FLAGS into gcc-base.conf. Only used for non-host builds. # -# 5. Do similar for the win32-g++ mkspec. -# -# 6. In clang.conf, swap out clang & clang++, for our compiler + flags. See #17466. -# -# 7. Adjust a regex in toolchain.prf, to accommodate Guix's usage of -# CROSS_LIBRARY_PATH. See #15277. +# 5. In clang.conf, swap out clang & clang++, for our compiler + flags. See #17466. define $(package)_preprocess_cmds cp $($(package)_patch_dir)/qt.pro qt.pro && \ cp $($(package)_patch_dir)/qttools_src.pro qttools/src/src.pro && \ @@ -243,22 +236,27 @@ define $(package)_preprocess_cmds patch -p1 -i $($(package)_patch_dir)/no-xlib.patch && \ patch -p1 -i $($(package)_patch_dir)/dont_hardcode_x86_64.patch && \ patch -p1 -i $($(package)_patch_dir)/qtbase-moc-ignore-gcc-macro.patch && \ - patch -p1 -i $($(package)_patch_dir)/fix_limits_header.patch && \ patch -p1 -i $($(package)_patch_dir)/fix_montery_include.patch && \ patch -p1 -i $($(package)_patch_dir)/use_android_ndk23.patch && \ patch -p1 -i $($(package)_patch_dir)/rcc_hardcode_timestamp.patch && \ patch -p1 -i $($(package)_patch_dir)/duplicate_lcqpafonts.patch && \ + patch -p1 -i $($(package)_patch_dir)/fast_fixed_dtoa_no_optimize.patch && \ + patch -p1 -i $($(package)_patch_dir)/guix_cross_lib_path.patch && \ mkdir -p qtbase/mkspecs/macx-clang-linux &&\ cp -f qtbase/mkspecs/macx-clang/qplatformdefs.h qtbase/mkspecs/macx-clang-linux/ &&\ cp -f $($(package)_patch_dir)/mac-qmake.conf qtbase/mkspecs/macx-clang-linux/qmake.conf && \ cp -r qtbase/mkspecs/linux-arm-gnueabi-g++ qtbase/mkspecs/bitcoin-linux-g++ && \ - sed -i.old "s/arm-linux-gnueabi-/$(host)-/g" qtbase/mkspecs/bitcoin-linux-g++/qmake.conf && \ + sed -i.old "s|arm-linux-gnueabi-gcc|$($($(package)_type)_CC)|" qtbase/mkspecs/bitcoin-linux-g++/qmake.conf && \ + sed -i.old "s|arm-linux-gnueabi-g++|$($($(package)_type)_CXX)|" qtbase/mkspecs/bitcoin-linux-g++/qmake.conf && \ + sed -i.old "s|arm-linux-gnueabi-ar|$($($(package)_type)_AR)|" qtbase/mkspecs/bitcoin-linux-g++/qmake.conf && \ + sed -i.old "s|arm-linux-gnueabi-objcopy|$($($(package)_type)_OBJCOPY)|" qtbase/mkspecs/bitcoin-linux-g++/qmake.conf && \ + sed -i.old "s|arm-linux-gnueabi-nm|$($($(package)_type)_NM)|" qtbase/mkspecs/bitcoin-linux-g++/qmake.conf && \ + sed -i.old "s|arm-linux-gnueabi-strip|$($($(package)_type)_STRIP)|" qtbase/mkspecs/bitcoin-linux-g++/qmake.conf && \ echo "!host_build: QMAKE_CFLAGS += $($(package)_cflags) $($(package)_cppflags)" >> qtbase/mkspecs/common/gcc-base.conf && \ echo "!host_build: QMAKE_CXXFLAGS += $($(package)_cxxflags) $($(package)_cppflags)" >> qtbase/mkspecs/common/gcc-base.conf && \ echo "!host_build: QMAKE_LFLAGS += $($(package)_ldflags)" >> qtbase/mkspecs/common/gcc-base.conf && \ sed -i.old "s|QMAKE_CC = \$$$$\$$$${CROSS_COMPILE}clang|QMAKE_CC = $($(package)_cc)|" qtbase/mkspecs/common/clang.conf && \ - sed -i.old "s|QMAKE_CXX = \$$$$\$$$${CROSS_COMPILE}clang++|QMAKE_CXX = $($(package)_cxx)|" qtbase/mkspecs/common/clang.conf && \ - sed -i.old "s/LIBRARY_PATH/(CROSS_)?\0/g" qtbase/mkspecs/features/toolchain.prf + sed -i.old "s|QMAKE_CXX = \$$$$\$$$${CROSS_COMPILE}clang++|QMAKE_CXX = $($(package)_cxx)|" qtbase/mkspecs/common/clang.conf endef define $(package)_config_cmds diff --git a/depends/patches/libxcb/remove_pthread_stubs.patch b/depends/patches/libxcb/remove_pthread_stubs.patch new file mode 100644 index 0000000000000..1f32dea527e25 --- /dev/null +++ b/depends/patches/libxcb/remove_pthread_stubs.patch @@ -0,0 +1,12 @@ +Remove uneeded pthread-stubs dependency +--- a/configure ++++ b/configure +@@ -19695,7 +19695,7 @@ fi + NEEDED="xau >= 0.99.2" + case $host_os in + linux*) ;; +- *) NEEDED="$NEEDED pthread-stubs" ;; ++ *) NEEDED="$NEEDED" ;; + esac + + pkg_failed=no diff --git a/depends/patches/qt/dont_hardcode_x86_64.patch b/depends/patches/qt/dont_hardcode_x86_64.patch index 5c1e030fa45b8..a66426877ad78 100644 --- a/depends/patches/qt/dont_hardcode_x86_64.patch +++ b/depends/patches/qt/dont_hardcode_x86_64.patch @@ -73,7 +73,7 @@ diff --git a/mkspecs/features/mac/default_post.prf b/mkspecs/features/mac/defaul index 92a9112bca6..d888731ec8d 100644 --- old/qtbase/mkspecs/features/mac/default_post.prf +++ new/qtbase/mkspecs/features/mac/default_post.prf -@@ -90,6 +90,11 @@ app_extension_api_only { +@@ -95,6 +95,11 @@ app_extension_api_only { QMAKE_LFLAGS += $$QMAKE_CFLAGS_APPLICATION_EXTENSION } @@ -85,7 +85,7 @@ index 92a9112bca6..d888731ec8d 100644 macx-xcode { qmake_pkginfo_typeinfo.name = QMAKE_PKGINFO_TYPEINFO !isEmpty(QMAKE_PKGINFO_TYPEINFO): \ -@@ -145,9 +150,6 @@ macx-xcode { +@@ -150,9 +155,6 @@ macx-xcode { simulator: VALID_SIMULATOR_ARCHS = $$QMAKE_APPLE_SIMULATOR_ARCHS VALID_ARCHS = $$VALID_DEVICE_ARCHS $$VALID_SIMULATOR_ARCHS diff --git a/depends/patches/qt/fast_fixed_dtoa_no_optimize.patch b/depends/patches/qt/fast_fixed_dtoa_no_optimize.patch new file mode 100644 index 0000000000000..d4d6539f56dc4 --- /dev/null +++ b/depends/patches/qt/fast_fixed_dtoa_no_optimize.patch @@ -0,0 +1,20 @@ +Modify the optimisation flags for FastFixedDtoa. +This fixes a non-determinism issue in the asm produced for +this function when cross-compiling on x86_64 and aarch64 for +the arm-linux-gnueabihf HOST. + +--- a/qtbase/src/3rdparty/double-conversion/fixed-dtoa.h ++++ b/qtbase/src/3rdparty/double-conversion/fixed-dtoa.h +@@ -48,9 +48,12 @@ namespace double_conversion { + // + // This method only works for some parameters. If it can't handle the input it + // returns false. The output is null-terminated when the function succeeds. ++#pragma GCC push_options ++#pragma GCC optimize ("-O1") + bool FastFixedDtoa(double v, int fractional_count, + Vector buffer, int* length, int* decimal_point); + ++#pragma GCC pop_options + } // namespace double_conversion + + #endif // DOUBLE_CONVERSION_FIXED_DTOA_H_ diff --git a/depends/patches/qt/fix_android_jni_static.patch b/depends/patches/qt/fix_android_jni_static.patch index 22a4d5ab0e150..936b82e1522e3 100644 --- a/depends/patches/qt/fix_android_jni_static.patch +++ b/depends/patches/qt/fix_android_jni_static.patch @@ -1,6 +1,6 @@ --- old/qtbase/src/plugins/platforms/android/androidjnimain.cpp +++ new/qtbase/src/plugins/platforms/android/androidjnimain.cpp -@@ -934,6 +934,14 @@ Q_DECL_EXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void */*reserved*/) +@@ -943,6 +943,14 @@ Q_DECL_EXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void */*reserved*/) __android_log_print(ANDROID_LOG_FATAL, "Qt", "registerNatives failed"); return -1; } diff --git a/depends/patches/qt/fix_limits_header.patch b/depends/patches/qt/fix_limits_header.patch deleted file mode 100644 index 258128c0ca13d..0000000000000 --- a/depends/patches/qt/fix_limits_header.patch +++ /dev/null @@ -1,33 +0,0 @@ -Fix compiling with GCC 11 - -Upstream: - - bug report: https://bugreports.qt.io/browse/QTBUG-89977 - - fix in Qt 6.1: 813a928c7c3cf98670b6043149880ed5c955efb9 - ---- old/qtbase/src/corelib/text/qbytearraymatcher.h -+++ new/qtbase/src/corelib/text/qbytearraymatcher.h -@@ -42,6 +42,8 @@ - - #include - -+#include -+ - QT_BEGIN_NAMESPACE - - - -Upstream fix and backports: - - Qt 6.1: 3eab20ad382569cb2c9e6ccec2322c3d08c0f716 - - Qt 6.2: 380294a5971da85010a708dc23b0edec192cbf27 - - Qt 6.3: 2b2b3155d9f6ba1e4f859741468fbc47db09292b - ---- old/qtbase/src/corelib/tools/qoffsetstringarray_p.h -+++ new/qtbase/src/corelib/tools/qoffsetstringarray_p.h -@@ -55,6 +55,7 @@ - - #include - #include -+#include - - QT_BEGIN_NAMESPACE - diff --git a/depends/patches/qt/guix_cross_lib_path.patch b/depends/patches/qt/guix_cross_lib_path.patch new file mode 100644 index 0000000000000..7911dc21d7dba --- /dev/null +++ b/depends/patches/qt/guix_cross_lib_path.patch @@ -0,0 +1,17 @@ +Facilitate guix building with CROSS_LIBRARY_PATH + +See discussion in https://github.com/bitcoin/bitcoin/pull/15277. + +--- a/qtbase/mkspecs/features/toolchain.prf ++++ b/qtbase/mkspecs/features/toolchain.prf +@@ -236,8 +236,8 @@ isEmpty($${target_prefix}.INCDIRS) { + add_libraries = false + for (line, output) { + line ~= s/^[ \\t]*// # remove leading spaces +- contains(line, "LIBRARY_PATH=.*") { +- line ~= s/^LIBRARY_PATH=// # remove leading LIBRARY_PATH= ++ contains(line, "(CROSS_)?LIBRARY_PATH=.*") { ++ line ~= s/^(CROSS_)?LIBRARY_PATH=// # remove leading (CROSS_)?LIBRARY_PATH= + equals(QMAKE_HOST.os, Windows): \ + paths = $$split(line, ;) + else: \ diff --git a/doc/bitcoin-conf.md b/doc/bitcoin-conf.md index e531ca876efa6..e08528f478c31 100644 --- a/doc/bitcoin-conf.md +++ b/doc/bitcoin-conf.md @@ -6,6 +6,8 @@ All command-line options (except for `-?`, `-help`, `-version` and `-conf`) may Changes to the configuration file while `navcoind` or `navcoin-qt` is running only take effect after restarting. +Users should never make any configuration changes which they do not understand. Furthermore, users should always be wary of accepting any configuration changes provided to them by another source (even if they believe that they do understand them). + ## Configuration File Format The configuration file is a plain text file and consists of `option=value` entries, one per line. Leading and trailing whitespaces are removed. diff --git a/doc/build-netbsd.md b/doc/build-netbsd.md index 685035e658969..0f05cdcba7891 100644 --- a/doc/build-netbsd.md +++ b/doc/build-netbsd.md @@ -1,92 +1,116 @@ -NetBSD Build Guide -====================== -**Updated for NetBSD [8.0](https://www.netbsd.org/releases/formal-8/NetBSD-8.0.html)** +# NetBSD Build Guide -This guide describes how to build navcoind and command-line utilities on NetBSD. +Updated for NetBSD [9.2](https://netbsd.org/releases/formal-9/NetBSD-9.2.html). -This guide does not contain instructions for building the GUI. +This guide describes how to build bitcoind, command-line utilities, and GUI on NetBSD. -Preparation -------------- +## Preparation -You will need the following modules, which can be installed via pkgsrc or pkgin: +### 1. Install Required Dependencies + +Install the required dependencies the usual way you [install software on NetBSD](https://www.netbsd.org/docs/guide/en/chap-boot.html#chap-boot-pkgsrc). +The example commands below use `pkgin`. + +```bash +pkgin install autoconf automake libtool pkg-config git gmake boost libevent ``` -autoconf -automake -boost -git -gmake -libevent -libtool -pkg-config -python37 -git clone https://github.com/bitcoin/bitcoin.git +NetBSD currently ships with an older version of `gcc` than is needed to build. You should upgrade your `gcc` and then pass this new version to the configure script. + +For example, grab `gcc9`: +``` +pkgin install gcc9 +``` + +Then, when configuring, pass the following: +```bash +./configure + ... + CC="/usr/pkg/gcc9/bin/gcc" \ + CXX="/usr/pkg/gcc9/bin/g++" \ + ... ``` See [dependencies.md](dependencies.md) for a complete overview. -### Building Bitcoin Core +### 2. Clone Bitcoin Repo -**Important**: Use `gmake` (the non-GNU `make` will exit with an error). +Clone the Bitcoin Core repository to a directory. All build scripts and commands will run from this directory. -#### With descriptor wallet: +```bash +git clone https://github.com/bitcoin/bitcoin.git +``` + +### 3. Install Optional Dependencies + +#### Wallet Dependencies + +It is not necessary to build wallet functionality to run bitcoind or the GUI. + +###### Descriptor Wallet Support + +`sqlite3` is required to enable support for [descriptor wallets](https://github.com/bitcoin/bitcoin/blob/master/doc/descriptors.md). -The descriptor wallet uses `sqlite3`. You can install it using: ```bash pkgin install sqlite3 ``` +###### Legacy Wallet Support + +`db4` is required to enable support for legacy wallets. + ```bash -./autogen.sh -./configure --with-gui=no --without-bdb \ - CPPFLAGS="-I/usr/pkg/include" \ - LDFLAGS="-L/usr/pkg/lib" \ - BOOST_CPPFLAGS="-I/usr/pkg/include" \ - MAKE=gmake +pkgin install db4 ``` -#### With legacy wallet: - -BerkeleyDB is use for legacy wallet functionality. +#### GUI Dependencies -It is recommended to use Berkeley DB 4.8. You cannot use the BerkeleyDB library -from ports. -You can use [the installation script included in contrib/](/contrib/install_db4.sh) like so: +Bitcoin Core includes a GUI built with the cross-platform Qt Framework. To compile the GUI, we need to install `qt5`. ```bash -./contrib/install_db4.sh `pwd` +pkgin install qt5 ``` -from the root of the repository. Then set `BDB_PREFIX` for the next section: +The GUI can encode addresses in a QR Code. To build in QR support for the GUI, install `qrencode`. ```bash -export BDB_PREFIX="$PWD/db4" +pkgin install qrencode ``` +#### Test Suite Dependencies + +There is an included test suite that is useful for testing code changes when developing. +To run the test suite (recommended), you will need to have Python 3 installed: + ```bash -./autogen.sh -./configure --with-gui=no CPPFLAGS="-I/usr/pkg/include" \ - LDFLAGS="-L/usr/pkg/lib" \ - BOOST_CPPFLAGS="-I/usr/pkg/include" \ - BDB_LIBS="-L${BDB_PREFIX}/lib -ldb_cxx-4.8" \ - BDB_CFLAGS="-I${BDB_PREFIX}/include" \ - MAKE=gmake +pkgin install python37 ``` -#### Without wallet: +### Building Bitcoin Core + +**Note**: Use `gmake` (the non-GNU `make` will exit with an error). + + +### 1. Configuration + +There are many ways to configure Bitcoin Core. Here is an example that +explicitly disables the wallet and GUI: + ```bash ./autogen.sh -./configure --with-gui=no --disable-wallet \ +./configure --without-wallet --with-gui=no \ CPPFLAGS="-I/usr/pkg/include" \ - LDFLAGS="-L/usr/pkg/lib" \ - BOOST_CPPFLAGS="-I/usr/pkg/include" \ MAKE=gmake ``` +For a full list of configuration options, see the output of `./configure --help` + +### 2. Compile + Build and run the tests: + ```bash gmake # use "-j N" here for N parallel jobs -gmake check +gmake check # Run tests if Python 3 is available ``` diff --git a/doc/build-unix.md b/doc/build-unix.md index 2f811ff6acc40..0aaa8cb9bed6c 100644 --- a/doc/build-unix.md +++ b/doc/build-unix.md @@ -288,26 +288,3 @@ This example lists the steps necessary to setup and build a command line only di ./src/bitcoind If you intend to work with legacy Berkeley DB wallets, see [Berkeley DB](#berkeley-db) section. - -ARM Cross-compilation -------------------- -These steps can be performed on, for example, an Ubuntu VM. The depends system -will also work on other Linux distributions, however the commands for -installing the toolchain will be different. - -Make sure you install the build requirements mentioned above. -Then, install the toolchain and curl: - - sudo apt-get install g++-arm-linux-gnueabihf curl - -To build executables for ARM: - - cd depends - make HOST=arm-linux-gnueabihf NO_QT=1 - cd .. - ./autogen.sh - CONFIG_SITE=$PWD/depends/arm-linux-gnueabihf/share/config.site ./configure --enable-reduce-exports LDFLAGS=-static-libstdc++ - make - - -For further documentation on the depends system see [README.md](../depends/README.md) in the depends directory. diff --git a/doc/dependencies.md b/doc/dependencies.md index 697d432520e3c..8b8259ab0a79e 100644 --- a/doc/dependencies.md +++ b/doc/dependencies.md @@ -30,7 +30,7 @@ You can find installation instructions in the `build-*.md` file for your platfor | [Fontconfig](../depends/packages/fontconfig.mk) | [link](https://www.freedesktop.org/wiki/Software/fontconfig/) | [2.12.6](https://github.com/bitcoin/bitcoin/pull/23495) | 2.6 | Yes | | [FreeType](../depends/packages/freetype.mk) | [link](https://freetype.org) | [2.11.0](https://github.com/bitcoin/bitcoin/commit/01544dd78ccc0b0474571da854e27adef97137fb) | 2.3.0 | Yes | | [qrencode](../depends/packages/qrencode.mk) | [link](https://fukuchi.org/works/qrencode/) | [3.4.4](https://github.com/bitcoin/bitcoin/pull/6373) | | No | -| [Qt](../depends/packages/qt.mk) | [link](https://download.qt.io/official_releases/qt/) | [5.15.3](https://github.com/bitcoin/bitcoin/pull/24668) | [5.11.3](https://github.com/bitcoin/bitcoin/pull/24132) | No | +| [Qt](../depends/packages/qt.mk) | [link](https://download.qt.io/official_releases/qt/) | [5.15.5](https://github.com/bitcoin/bitcoin/pull/25719) | [5.11.3](https://github.com/bitcoin/bitcoin/pull/24132) | No | ### Networking | Dependency | Releases | Version used | Minimum required | Runtime | diff --git a/doc/descriptors.md b/doc/descriptors.md index ab2face4f0700..69a5ee2715c18 100644 --- a/doc/descriptors.md +++ b/doc/descriptors.md @@ -11,13 +11,16 @@ Supporting RPCs are: addresses. - `listunspent` outputs a specialized descriptor for the reported unspent outputs. - `getaddressinfo` outputs a descriptor for solvable addresses (since v0.18). -- `importmulti` takes as input descriptors to import into the wallet +- `importmulti` takes as input descriptors to import into a legacy wallet (since v0.18). - `generatetodescriptor` takes as input a descriptor and generates coins to it (`regtest` only, since v0.19). - `utxoupdatepsbt` takes as input descriptors to add information to the psbt (since v0.19). -- `createmultisig` and `addmultisigaddress` return descriptors as well (since v0.20) +- `createmultisig` and `addmultisigaddress` return descriptors as well (since v0.20). +- `importdescriptors` takes as input descriptors to import into a descriptor wallet + (since v0.21). +- `listdescriptors` outputs descriptors imported into a descriptor wallet (since v22). This document describes the language. For the specifics on usage, see the RPC documentation for the functions mentioned above. @@ -77,6 +80,7 @@ Descriptors consist of several types of expressions. The top level expression is - `tr(KEY)` or `tr(KEY,TREE)` (top level only): P2TR output with the specified key as internal key, and optionally a tree of script paths. - `addr(ADDR)` (top level only): the script which ADDR expands to. - `raw(HEX)` (top level only): the script whose hex encoding is HEX. +- `rawtr(KEY)` (top level only): P2TR output with the specified key as output key. NOTE: while it's possible to use this to construct wallets, it has several downsides, like being unable to prove no hidden script path exists. Use at your own risk. `KEY` expressions: - Optionally, key origin information, consisting of: @@ -87,7 +91,7 @@ Descriptors consist of several types of expressions. The top level expression is - Followed by the actual key, which is either: - Hex encoded public keys (either 66 characters starting with `02` or `03` for a compressed pubkey, or 130 characters starting with `04` for an uncompressed pubkey). - Inside `wpkh` and `wsh`, only compressed public keys are permitted. - - Inside `tr`, x-only pubkeys are also permitted (64 hex characters). + - Inside `tr` and `rawtr`, x-only pubkeys are also permitted (64 hex characters). - [WIF](https://en.bitcoin.it/wiki/Wallet_import_format) encoded private keys may be specified instead of the corresponding public key, with the same meaning. - `xpub` encoded extended public key or `xprv` encoded extended private key (as defined in [BIP 32](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki)). - Followed by zero or more `/NUM` unhardened and `/NUM'` hardened BIP32 derivation steps. diff --git a/doc/developer-notes.md b/doc/developer-notes.md index 0fa1829b577be..5e4db512a46bd 100644 --- a/doc/developer-notes.md +++ b/doc/developer-notes.md @@ -603,10 +603,10 @@ Threads : Started from `main()` in `navcoind.cpp`. Responsible for starting up and shutting down the application. -- [ThreadImport (`b-loadblk`)](https://doxygen.bitcoincore.org/init_8cpp.html#ae9e290a0e829ec0198518de2eda579d1) +- [ThreadImport (`b-loadblk`)](https://doxygen.bitcoincore.org/namespacenode.html#ab4305679079866f0f420f7dbf278381d) : Loads blocks from `blk*.dat` files or `-loadblock=` on startup. -- [ThreadScriptCheck (`b-scriptch.x`)](https://doxygen.bitcoincore.org/validation_8cpp.html#a925a33e7952a157922b0bbb8dab29a20) +- [CCheckQueue::Loop (`b-scriptch.x`)](https://doxygen.bitcoincore.org/class_c_check_queue.html#a6e7fa51d3a25e7cb65446d4b50e6a987) : Parallel script validation threads for transactions in blocks. - [ThreadHTTP (`b-http`)](https://doxygen.bitcoincore.org/httpserver_8cpp.html#abb9f6ea8819672bd9a62d3695070709c) @@ -622,7 +622,7 @@ Threads : Does asynchronous background tasks like dumping wallet contents, dumping addrman and running asynchronous validationinterface callbacks. -- [TorControlThread (`b-torcontrol`)](https://doxygen.bitcoincore.org/torcontrol_8cpp.html#a4faed3692d57a0d7bdbecf3b37f72de0) +- [TorControlThread (`b-torcontrol`)](https://doxygen.bitcoincore.org/torcontrol_8cpp.html#a52a3efff23634500bb42c6474f306091) : Libevent thread for tor connections. - Net threads: @@ -634,7 +634,7 @@ Threads - [ThreadDNSAddressSeed (`b-dnsseed`)](https://doxygen.bitcoincore.org/class_c_connman.html#aa7c6970ed98a4a7bafbc071d24897d13) : Loads addresses of peers from the DNS. - - [ThreadMapPort (`b-upnp`)](https://doxygen.bitcoincore.org/net_8cpp.html#a63f82a71c4169290c2db1651a9bbe249) + - ThreadMapPort (`b-mapport`) : Universal plug-and-play startup/shutdown. - [ThreadSocketHandler (`b-net`)](https://doxygen.bitcoincore.org/class_c_connman.html#a765597cbfe99c083d8fa3d61bb464e34) @@ -646,6 +646,9 @@ Threads - [ThreadOpenConnections (`b-opencon`)](https://doxygen.bitcoincore.org/class_c_connman.html#a55e9feafc3bab78e5c9d408c207faa45) : Initiates new connections to peers. + - [ThreadI2PAcceptIncoming (`b-i2paccept`)](https://doxygen.bitcoincore.org/class_c_connman.html#a57787b4f9ac847d24065fbb0dd6e70f8) + : Listens for and accepts incoming I2P connections through the I2P SAM proxy. + Ignoring IDE/editor files -------------------------- diff --git a/doc/i2p.md b/doc/i2p.md index 4f8b4a681e149..2f1b855f90ac7 100644 --- a/doc/i2p.md +++ b/doc/i2p.md @@ -47,9 +47,26 @@ In a typical situation, this suffices: navcoind -i2psam=127.0.0.1:7656 ``` -The first time Bitcoin Core connects to the I2P router, its I2P address (and -corresponding private key) will be automatically generated and saved in a file -named `i2p_private_key` in the Bitcoin Core data directory. +The first time Bitcoin Core connects to the I2P router, if +`-i2pacceptincoming=1`, then it will automatically generate a persistent I2P +address and its corresponding private key. The private key will be saved in a +file named `i2p_private_key` in the Bitcoin Core data directory. The persistent +I2P address is used for accepting incoming connections and for making outgoing +connections if `-i2pacceptincoming=1`. If `-i2pacceptincoming=0` then only +outbound I2P connections are made and a different transient I2P address is used +for each connection to improve privacy. + +## Persistent vs transient I2P addresses + +In I2P connections, the connection receiver sees the I2P address of the +connection initiator. This is unlike the Tor network where the recipient does +not know who is connecting to them and can't tell if two connections are from +the same peer or not. + +If an I2P node is not accepting incoming connections, then Bitcoin Core uses +random, one-time, transient I2P addresses for itself for outbound connections +to make it harder to discriminate, fingerprint or analyze it based on its I2P +address. ## Additional configuration options related to I2P @@ -85,7 +102,8 @@ one of the networks has issues. ## I2P-related information in Bitcoin Core -There are several ways to see your I2P address in Bitcoin Core: +There are several ways to see your I2P address in Bitcoin Core if accepting +incoming I2P connections (`-i2pacceptincoming`): - in the "Local addresses" output of CLI `-netinfo` - in the "localaddresses" output of RPC `getnetworkinfo` - in the debug log (grep for `AddLocal`; the I2P address ends in `.b32.i2p`) diff --git a/doc/policy/README.md b/doc/policy/README.md index 6e8686365dc09..27536407e7df6 100644 --- a/doc/policy/README.md +++ b/doc/policy/README.md @@ -3,7 +3,7 @@ **Policy** (Mempool or Transaction Relay Policy) is the node's set of validation rules, in addition to consensus, enforced for unconfirmed transactions before submitting them to the mempool. These rules are local to the node and configurable (e.g. `-minrelaytxfee`, `-limitancestorsize`, -`-incrementalRelayFee`). Policy may include restrictions on the transaction itself, the transaction +`-incrementalrelayfee`). Policy may include restrictions on the transaction itself, the transaction in relation to the current chain tip, and the transaction in relation to the node's mempool contents. Policy is *not* applied to transactions in blocks. diff --git a/doc/policy/mempool-replacements.md b/doc/policy/mempool-replacements.md index 18f08daf886ed..b3c4239b73121 100644 --- a/doc/policy/mempool-replacements.md +++ b/doc/policy/mempool-replacements.md @@ -15,6 +15,8 @@ other consensus and policy rules, each of the following conditions are met: *Rationale*: See [BIP125 explanation](https://github.com/bitcoin/bips/blob/master/bip-0125.mediawiki#motivation). + Use the (`-mempoolfullrbf`) configuration option to allow transaction replacement without enforcement of the + opt-in signaling rule. 2. The replacement transaction only include an unconfirmed input if that input was included in one of the directly conflicting transactions. An unconfirmed input spends an output from a @@ -69,8 +71,11 @@ This set of rules is similar but distinct from BIP125. Bitcoin Core implementation. * The incremental relay feerate used to calculate the required additional fees is distinct from - `minRelayTxFee` and configurable using `-incrementalrelayfee` + `-minrelaytxfee` and configurable using `-incrementalrelayfee` ([PR #9380](https://github.com/bitcoin/bitcoin/pull/9380)). * RBF enabled by default in the wallet GUI as of **v0.18.1** ([PR #11605](https://github.com/bitcoin/bitcoin/pull/11605)). + +* Full replace-by-fee enabled as a configurable mempool policy as of **v24.0** ([PR + #25353](https://github.com/bitcoin/bitcoin/pull/25353)). diff --git a/doc/policy/packages.md b/doc/policy/packages.md index f2a3d6517ef3d..274854ddf93de 100644 --- a/doc/policy/packages.md +++ b/doc/policy/packages.md @@ -33,7 +33,7 @@ The following rules are enforced for all packages: * Packages cannot have conflicting transactions, i.e. no two transactions in a package can spend the same inputs. Packages cannot have duplicate transactions. (#20833) -* No transaction in a package can conflict with a mempool transaction. BIP125 Replace By Fee is +* No transaction in a package can conflict with a mempool transaction. Replace By Fee is currently disabled for packages. (#20833) - Package RBF may be enabled in the future. @@ -81,7 +81,7 @@ If any transactions in the package are already in the mempool, they are not subm ("deduplicated") and are thus excluded from this calculation. To meet the two feerate requirements of a mempool, i.e., the pre-configured minimum relay feerate -(`minRelayTxFee`) and the dynamic mempool minimum feerate, the total package feerate is used instead +(`-minrelaytxfee`) and the dynamic mempool minimum feerate, the total package feerate is used instead of the individual feerate. The individual transactions are allowed to be below the feerate requirements if the package meets the feerate requirements. For example, the parent(s) in the package can pay no fees but be paid for by the child. diff --git a/doc/release-notes-24148.md b/doc/release-notes-24148.md new file mode 100644 index 0000000000000..f7a0fd6fa1c79 --- /dev/null +++ b/doc/release-notes-24148.md @@ -0,0 +1,23 @@ +Notable changes +=============== + +Wallet +------ + +- The `wsh()` output descriptor was extended with Miniscript support. You can import Miniscript + descriptors for P2WSH in a watchonly wallet to track coins, but you can't spend from them using + the Bitcoin Core wallet yet. + You can find more about Miniscript on the [reference website](https://bitcoin.sipa.be/miniscript/). + + +Low-level changes +================= + +RPC +--- + +- The `deriveaddresses`, `getdescriptorinfo`, `importdescriptors` and `scantxoutset` commands now + accept Miniscript expression within a `wsh()` descriptor. + +- The `getaddressinfo`, `decodescript`, `listdescriptors` and `listunspent` commands may now output + a Miniscript descriptor inside a `wsh()` where a `wsh(raw())` descriptor was previously returned. diff --git a/doc/release-notes-25355.md b/doc/release-notes-25355.md new file mode 100644 index 0000000000000..34dd2c3687928 --- /dev/null +++ b/doc/release-notes-25355.md @@ -0,0 +1,8 @@ +Notable changes +=============== + +P2P and network changes +----------------------- + +- With I2P connections, a new, transient address is used for each outbound + connection if `-i2pacceptincoming=0`. (#25355) diff --git a/doc/release-notes-25504.md b/doc/release-notes-25504.md new file mode 100644 index 0000000000000..bf80f180318a1 --- /dev/null +++ b/doc/release-notes-25504.md @@ -0,0 +1,6 @@ +Updated RPCs +------------ + +- The `listsinceblock`, `listtransactions` and `gettransaction` output now contain a new + `parent_descs` field for every "receive" entry. +- A new optional `include_change` parameter was added to the `listsinceblock` command. diff --git a/doc/release-notes-25610.md b/doc/release-notes-25610.md new file mode 100644 index 0000000000000..743a7709bf488 --- /dev/null +++ b/doc/release-notes-25610.md @@ -0,0 +1,12 @@ +Wallet +------ + +- The `-walletrbf` startup option will now default to `true`. The + wallet will now default to opt-in RBF on transactions that it creates. + +Updated RPCs +------------ + +- The `replaceable` option for the `createrawtransaction` and + `createpsbt` RPCs will now default to `true`. Transactions created + with these RPCs will default to having opt-in RBF enabled. diff --git a/doc/release-notes.md b/doc/release-notes.md index 2b36048a43760..554edc1aa4a86 100644 --- a/doc/release-notes.md +++ b/doc/release-notes.md @@ -86,6 +86,10 @@ Changes to GUI or wallet related settings can be found in the GUI or Wallet sect New settings ------------ +- A new `mempoolfullrbf` option has been added, which enables the mempool to + accept transaction replacement without enforcing BIP125 replaceability + signaling. (#25353) + Tools and Utilities ------------------- diff --git a/doc/release-notes/release-notes-471.md b/doc/release-notes/release-notes-471.md new file mode 100644 index 0000000000000..7cebedd8b30be --- /dev/null +++ b/doc/release-notes/release-notes-471.md @@ -0,0 +1,4 @@ +GUI changes +-------- + +- A new menu item to restore a wallet from a backup file has been added (#471). \ No newline at end of file diff --git a/share/setup.nsi.in b/share/setup.nsi.in index b31ba7a5b487e..2ce798bd2d1d3 100644 --- a/share/setup.nsi.in +++ b/share/setup.nsi.in @@ -75,13 +75,15 @@ Section -Main SEC0000 File @abs_top_builddir@/release/@BITCOIN_GUI_NAME@@EXEEXT@ File /oname=COPYING.txt @abs_top_srcdir@/COPYING File /oname=readme.txt @abs_top_srcdir@/doc/README_windows.txt + File @abs_top_srcdir@/share/examples/bitcoin.conf + SetOutPath $INSTDIR\share\rpcauth + File @abs_top_srcdir@/share/rpcauth/*.* SetOutPath $INSTDIR\daemon File @abs_top_builddir@/release/@BITCOIN_DAEMON_NAME@@EXEEXT@ File @abs_top_builddir@/release/@BITCOIN_CLI_NAME@@EXEEXT@ File @abs_top_builddir@/release/@BITCOIN_TX_NAME@@EXEEXT@ File @abs_top_builddir@/release/@BITCOIN_WALLET_TOOL_NAME@@EXEEXT@ - SetOutPath $INSTDIR\doc - File /r /x Makefile* @abs_top_srcdir@/doc\*.* + File @abs_top_builddir@/release/@BITCOIN_TEST_NAME@@EXEEXT@ SetOutPath $INSTDIR WriteRegStr HKCU "${REGKEY}\Components" Main 1 SectionEnd @@ -128,8 +130,9 @@ Section /o -un.Main UNSEC0000 Delete /REBOOTOK $INSTDIR\@BITCOIN_GUI_NAME@@EXEEXT@ Delete /REBOOTOK $INSTDIR\COPYING.txt Delete /REBOOTOK $INSTDIR\readme.txt + Delete /REBOOTOK $INSTDIR\bitcoin.conf + RMDir /r /REBOOTOK $INSTDIR\share RMDir /r /REBOOTOK $INSTDIR\daemon - RMDir /r /REBOOTOK $INSTDIR\doc DeleteRegValue HKCU "${REGKEY}\Components" Main SectionEnd diff --git a/src/.clang-tidy b/src/.clang-tidy index e9807d4cb7782..f59f80f8ce8bf 100644 --- a/src/.clang-tidy +++ b/src/.clang-tidy @@ -1,13 +1,21 @@ Checks: ' -*, bugprone-argument-comment, +misc-unused-using-decls, modernize-use-default-member-init, modernize-use-nullptr, +performance-for-range-copy, +performance-unnecessary-copy-initialization, readability-redundant-declaration, +readability-redundant-string-init, ' WarningsAsErrors: ' bugprone-argument-comment, +misc-unused-using-decls, modernize-use-default-member-init, modernize-use-nullptr, +performance-for-range-copy, +performance-unnecessary-copy-initialization, readability-redundant-declaration, +readability-redundant-string-init, ' diff --git a/src/Makefile.am b/src/Makefile.am index 069265f2d22eb..9684332c75e38 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -168,9 +168,9 @@ BITCOIN_CORE_H = \ clientversion.h \ coins.h \ common/bloom.h \ - compat.h \ compat/assumptions.h \ compat/byteswap.h \ + compat/compat.h \ compat/cpuid.h \ compat/endian.h \ compressor.h \ @@ -204,18 +204,20 @@ BITCOIN_CORE_H = \ interfaces/ipc.h \ interfaces/node.h \ interfaces/wallet.h \ + kernel/chain.h \ kernel/chainstatemanager_opts.h \ kernel/checks.h \ kernel/coinstats.h \ kernel/context.h \ kernel/mempool_limits.h \ kernel/mempool_options.h \ + kernel/mempool_persist.h \ + kernel/validation_cache_sizes.h \ key.h \ key_io.h \ logging.h \ logging/timer.h \ mapport.h \ - mempool_args.h \ memusage.h \ merkleblock.h \ net.h \ @@ -230,13 +232,18 @@ BITCOIN_CORE_H = \ node/caches.h \ node/chainstate.h \ node/coin.h \ + node/connection_types.h \ node/context.h \ + node/eviction.h \ + node/interface_ui.h \ + node/mempool_args.h \ + node/mempool_persist_args.h \ node/miner.h \ node/minisketchwrapper.h \ node/psbt.h \ node/transaction.h \ - node/interface_ui.h \ node/utxo_snapshot.h \ + node/validation_cache_args.h \ noui.h \ outputtype.h \ policy/feerate.h \ @@ -294,7 +301,6 @@ BITCOIN_CORE_H = \ util/bip32.h \ util/bytevectorhash.h \ util/check.h \ - util/designator.h \ util/epochguard.h \ util/error.h \ util/fastrange.h \ @@ -310,6 +316,7 @@ BITCOIN_CORE_H = \ util/overloaded.h \ util/rbf.h \ util/readwritefile.h \ + util/result.h \ util/serfloat.h \ util/settings.h \ util/sock.h \ @@ -400,25 +407,31 @@ libbitcoin_node_a_SOURCES = \ index/coinstatsindex.cpp \ index/txindex.cpp \ init.cpp \ + kernel/chain.cpp \ kernel/checks.cpp \ kernel/coinstats.cpp \ kernel/context.cpp \ + kernel/mempool_persist.cpp \ mapport.cpp \ - mempool_args.cpp \ net.cpp \ - netgroup.cpp \ net_processing.cpp \ + netgroup.cpp \ node/blockstorage.cpp \ node/caches.cpp \ node/chainstate.cpp \ node/coin.cpp \ + node/connection_types.cpp \ node/context.cpp \ + node/eviction.cpp \ + node/interface_ui.cpp \ node/interfaces.cpp \ + node/mempool_args.cpp \ + node/mempool_persist_args.cpp \ node/miner.cpp \ node/minisketchwrapper.cpp \ node/psbt.cpp \ node/transaction.cpp \ - node/interface_ui.cpp \ + node/validation_cache_args.cpp \ noui.cpp \ policy/fees.cpp \ policy/fees_args.cpp \ @@ -431,8 +444,8 @@ libbitcoin_node_a_SOURCES = \ rpc/fees.cpp \ rpc/mempool.cpp \ rpc/mining.cpp \ - rpc/node.cpp \ rpc/net.cpp \ + rpc/node.cpp \ rpc/output_script.cpp \ rpc/rawtransaction.cpp \ rpc/server.cpp \ @@ -901,8 +914,7 @@ endif # TODO: libbitcoinkernel is a work in progress consensus engine library, as more # and more modules are decoupled from the consensus engine, this list will -# shrink to only those which are absolutely necessary. For example, things -# like index/*.cpp will be removed. +# shrink to only those which are absolutely necessary. libbitcoinkernel_la_SOURCES = \ kernel/bitcoinkernel.cpp \ arith_uint256.cpp \ @@ -927,9 +939,11 @@ libbitcoinkernel_la_SOURCES = \ flatfile.cpp \ fs.cpp \ hash.cpp \ + kernel/chain.cpp \ kernel/checks.cpp \ kernel/coinstats.cpp \ kernel/context.cpp \ + kernel/mempool_persist.cpp \ key.cpp \ logging.cpp \ node/blockstorage.cpp \ @@ -1107,6 +1121,15 @@ nodist_libbitcoin_ipc_a_SOURCES = $(libbitcoin_ipc_mpgen_output) CLEANFILES += $(libbitcoin_ipc_mpgen_output) endif +%.raw.h: %.raw + @$(MKDIR_P) $(@D) + @{ \ + echo "static unsigned const char $(*F)_raw[] = {" && \ + $(HEXDUMP) -v -e '8/1 "0x%02x, "' -e '"\n"' $< | $(SED) -e 's/0x ,//g' && \ + echo "};"; \ + } > "$@.new" && mv -f "$@.new" "$@" + @echo "Generated $@" + include Makefile.minisketch.include include Makefile.crc32c.include diff --git a/src/Makefile.bench.include b/src/Makefile.bench.include index 7825eb1d6f4b6..64874f2b71153 100644 --- a/src/Makefile.bench.include +++ b/src/Makefile.bench.include @@ -27,6 +27,7 @@ bench_bench_navcoin_SOURCES = \ bench/crypto_hash.cpp \ bench/data.cpp \ bench/data.h \ + bench/descriptors.cpp \ bench/duplicate_inputs.cpp \ bench/examples.cpp \ bench/gcs_filter.cpp \ @@ -95,12 +96,3 @@ bench: $(BENCH_BINARY) FORCE bitcoin_bench_clean : FORCE rm -f $(CLEAN_BITCOIN_BENCH) $(bench_bench_navcoin_OBJECTS) $(BENCH_BINARY) - -%.raw.h: %.raw - @$(MKDIR_P) $(@D) - @{ \ - echo "static unsigned const char $(*F)_raw[] = {" && \ - $(HEXDUMP) -v -e '8/1 "0x%02x, "' -e '"\n"' $< | $(SED) -e 's/0x ,//g' && \ - echo "};"; \ - } > "$@.new" && mv -f "$@.new" "$@" - @echo "Generated $@" diff --git a/src/Makefile.test.include b/src/Makefile.test.include index 629d068f85345..5c9af267416fa 100644 --- a/src/Makefile.test.include +++ b/src/Makefile.test.include @@ -123,7 +123,9 @@ BITCOIN_TESTS =\ test/prevector_tests.cpp \ test/raii_event_tests.cpp \ test/random_tests.cpp \ + test/rbf_tests.cpp \ test/rest_tests.cpp \ + test/result_tests.cpp \ test/reverselock_tests.cpp \ test/rpc_tests.cpp \ test/sanity_tests.cpp \ @@ -166,6 +168,7 @@ BITCOIN_TESTS =\ if ENABLE_WALLET BITCOIN_TESTS += \ + wallet/test/feebumper_tests.cpp \ wallet/test/psbt_wallet_tests.cpp \ wallet/test/spend_tests.cpp \ wallet/test/wallet_tests.cpp \ @@ -173,6 +176,7 @@ BITCOIN_TESTS += \ wallet/test/wallet_crypto_tests.cpp \ wallet/test/wallet_transaction_tests.cpp \ wallet/test/coinselector_tests.cpp \ + wallet/test/availablecoins_tests.cpp \ wallet/test/init_tests.cpp \ wallet/test/ismine_tests.cpp \ wallet/test/scriptpubkeyman_tests.cpp @@ -331,6 +335,7 @@ test_fuzz_fuzz_SOURCES = \ test/fuzz/tx_in.cpp \ test/fuzz/tx_out.cpp \ test/fuzz/tx_pool.cpp \ + test/fuzz/txorphan.cpp \ test/fuzz/txrequest.cpp \ test/fuzz/utxo_snapshot.cpp \ test/fuzz/validation_load_mempool.cpp \ @@ -341,7 +346,7 @@ nodist_test_test_navcoin_SOURCES = $(GENERATED_TEST_FILES) $(BITCOIN_TESTS): $(GENERATED_TEST_FILES) -CLEAN_BITCOIN_TEST = test/*.gcda test/*.gcno test/fuzz/*.gcda test/fuzz/*.gcno test/util/*.gcda test/util/*.gcno $(GENERATED_TEST_FILES) $(BITCOIN_TESTS:=.log) +CLEAN_BITCOIN_TEST = test/*.gcda test/*.gcno test/fuzz/*.gcda test/fuzz/*.gcno test/util/*.gcda test/util/*.gcno $(GENERATED_TEST_FILES) $(addsuffix .log,$(basename $(BITCOIN_TESTS))) CLEANFILES += $(CLEAN_BITCOIN_TEST) @@ -378,7 +383,7 @@ endif $(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) -C secp256k1 check if ENABLE_TESTS -UNIVALUE_TESTS = univalue/test/object univalue/test/unitester univalue/test/no_nul +UNIVALUE_TESTS = univalue/test/object univalue/test/unitester noinst_PROGRAMS += $(UNIVALUE_TESTS) TESTS += $(UNIVALUE_TESTS) @@ -387,11 +392,6 @@ univalue_test_unitester_LDADD = $(LIBUNIVALUE) univalue_test_unitester_CPPFLAGS = -I$(srcdir)/$(UNIVALUE_INCLUDE_DIR_INT) -DJSON_TEST_SRC=\"$(srcdir)/$(UNIVALUE_TEST_DATA_DIR_INT)\" univalue_test_unitester_LDFLAGS = -static $(LIBTOOL_APP_LDFLAGS) -univalue_test_no_nul_SOURCES = $(UNIVALUE_TEST_NO_NUL_INT) -univalue_test_no_nul_LDADD = $(LIBUNIVALUE) -univalue_test_no_nul_CPPFLAGS = -I$(srcdir)/$(UNIVALUE_INCLUDE_DIR_INT) -univalue_test_no_nul_LDFLAGS = -static $(LIBTOOL_APP_LDFLAGS) - univalue_test_object_SOURCES = $(UNIVALUE_TEST_OBJECT_INT) univalue_test_object_LDADD = $(LIBUNIVALUE) univalue_test_object_CPPFLAGS = -I$(srcdir)/$(UNIVALUE_INCLUDE_DIR_INT) @@ -422,12 +422,3 @@ endif echo "};};"; \ } > "$@.new" && mv -f "$@.new" "$@" @echo "Generated $@" - -%.raw.h: %.raw - @$(MKDIR_P) $(@D) - @{ \ - echo "static unsigned const char $(*F)_raw[] = {" && \ - $(HEXDUMP) -v -e '8/1 "0x%02x, "' -e '"\n"' $< | $(SED) -e 's/0x ,//g' && \ - echo "};"; \ - } > "$@.new" && mv -f "$@.new" "$@" - @echo "Generated $@" diff --git a/src/Makefile.test_fuzz.include b/src/Makefile.test_fuzz.include index 8922dda3ad484..b43816636f9f4 100644 --- a/src/Makefile.test_fuzz.include +++ b/src/Makefile.test_fuzz.include @@ -10,6 +10,7 @@ EXTRA_LIBRARIES += \ TEST_FUZZ_H = \ test/fuzz/fuzz.h \ test/fuzz/FuzzedDataProvider.h \ + test/fuzz/mempool_utils.h \ test/fuzz/util.h libtest_fuzz_a_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES) $(MINIUPNPC_CPPFLAGS) $(NATPMP_CPPFLAGS) $(EVENT_CFLAGS) $(EVENT_PTHREADS_CFLAGS) diff --git a/src/addrman.cpp b/src/addrman.cpp index 204bb544c5189..f16ff2230b93f 100644 --- a/src/addrman.cpp +++ b/src/addrman.cpp @@ -14,10 +14,10 @@ #include #include #include -#include #include #include #include +#include #include #include @@ -29,19 +29,19 @@ static constexpr uint32_t ADDRMAN_NEW_BUCKETS_PER_SOURCE_GROUP{64}; /** Maximum number of times an address can occur in the new table */ static constexpr int32_t ADDRMAN_NEW_BUCKETS_PER_ADDRESS{8}; /** How old addresses can maximally be */ -static constexpr int64_t ADDRMAN_HORIZON_DAYS{30}; +static constexpr auto ADDRMAN_HORIZON{30 * 24h}; /** After how many failed attempts we give up on a new node */ static constexpr int32_t ADDRMAN_RETRIES{3}; /** How many successive failures are allowed ... */ static constexpr int32_t ADDRMAN_MAX_FAILURES{10}; -/** ... in at least this many days */ -static constexpr int64_t ADDRMAN_MIN_FAIL_DAYS{7}; +/** ... in at least this duration */ +static constexpr auto ADDRMAN_MIN_FAIL{7 * 24h}; /** How recent a successful connection should be before we allow an address to be evicted from tried */ -static constexpr int64_t ADDRMAN_REPLACEMENT_HOURS{4}; +static constexpr auto ADDRMAN_REPLACEMENT{4h}; /** The maximum number of tried addr collisions to store */ static constexpr size_t ADDRMAN_SET_TRIED_COLLISION_SIZE{10}; -/** The maximum time we'll spend trying to resolve a tried table collision, in seconds */ -static constexpr int64_t ADDRMAN_TEST_WINDOW{40*60}; // 40 minutes +/** The maximum time we'll spend trying to resolve a tried table collision */ +static constexpr auto ADDRMAN_TEST_WINDOW{40min}; int AddrInfo::GetTriedBucket(const uint256& nKey, const NetGroupManager& netgroupman) const { @@ -64,36 +64,39 @@ int AddrInfo::GetBucketPosition(const uint256& nKey, bool fNew, int nBucket) con return hash1 % ADDRMAN_BUCKET_SIZE; } -bool AddrInfo::IsTerrible(int64_t nNow) const +bool AddrInfo::IsTerrible(NodeSeconds now) const { - if (nNow - nLastTry <= 60) { // never remove things tried in the last minute + if (now - m_last_try <= 1min) { // never remove things tried in the last minute return false; } - if (nTime > nNow + 10 * 60) // came in a flying DeLorean + if (nTime > now + 10min) { // came in a flying DeLorean return true; + } - if (nNow - nTime > ADDRMAN_HORIZON_DAYS * 24 * 60 * 60) { // not seen in recent history + if (now - nTime > ADDRMAN_HORIZON) { // not seen in recent history return true; } - if (nLastSuccess == 0 && nAttempts >= ADDRMAN_RETRIES) // tried N times and never a success + if (TicksSinceEpoch(m_last_success) == 0 && nAttempts >= ADDRMAN_RETRIES) { // tried N times and never a success return true; + } - if (nNow - nLastSuccess > ADDRMAN_MIN_FAIL_DAYS * 24 * 60 * 60 && nAttempts >= ADDRMAN_MAX_FAILURES) // N successive failures in the last week + if (now - m_last_success > ADDRMAN_MIN_FAIL && nAttempts >= ADDRMAN_MAX_FAILURES) { // N successive failures in the last week return true; + } return false; } -double AddrInfo::GetChance(int64_t nNow) const +double AddrInfo::GetChance(NodeSeconds now) const { double fChance = 1.0; - int64_t nSinceLastTry = std::max(nNow - nLastTry, 0); // deprioritize very recent attempts away - if (nSinceLastTry < 60 * 10) + if (now - m_last_try < 10min) { fChance *= 0.01; + } // deprioritize 66% after each failed attempt, but at most 1/28th to avoid the search taking forever or overly penalizing outages. fChance *= pow(0.66, std::min(nAttempts, 8)); @@ -540,7 +543,7 @@ void AddrManImpl::MakeTried(AddrInfo& info, int nId) info.fInTried = true; } -bool AddrManImpl::AddSingle(const CAddress& addr, const CNetAddr& source, int64_t nTimePenalty) +bool AddrManImpl::AddSingle(const CAddress& addr, const CNetAddr& source, std::chrono::seconds time_penalty) { AssertLockHeld(cs); @@ -552,15 +555,15 @@ bool AddrManImpl::AddSingle(const CAddress& addr, const CNetAddr& source, int64_ // Do not set a penalty for a source's self-announcement if (addr == source) { - nTimePenalty = 0; + time_penalty = 0s; } if (pinfo) { // periodically update nTime - bool fCurrentlyOnline = (GetAdjustedTime() - addr.nTime < 24 * 60 * 60); - int64_t nUpdateInterval = (fCurrentlyOnline ? 60 * 60 : 24 * 60 * 60); - if (pinfo->nTime < addr.nTime - nUpdateInterval - nTimePenalty) { - pinfo->nTime = std::max((int64_t)0, addr.nTime - nTimePenalty); + const bool currently_online{NodeClock::now() - addr.nTime < 24h}; + const auto update_interval{currently_online ? 1h : 24h}; + if (pinfo->nTime < addr.nTime - update_interval - time_penalty) { + pinfo->nTime = std::max(NodeSeconds{0s}, addr.nTime - time_penalty); } // add services @@ -587,7 +590,7 @@ bool AddrManImpl::AddSingle(const CAddress& addr, const CNetAddr& source, int64_ return false; } else { pinfo = Create(addr, source, &nId); - pinfo->nTime = std::max((int64_t)0, (int64_t)pinfo->nTime - nTimePenalty); + pinfo->nTime = std::max(NodeSeconds{0s}, pinfo->nTime - time_penalty); nNew++; } @@ -617,13 +620,13 @@ bool AddrManImpl::AddSingle(const CAddress& addr, const CNetAddr& source, int64_ return fInsert; } -bool AddrManImpl::Good_(const CService& addr, bool test_before_evict, int64_t nTime) +bool AddrManImpl::Good_(const CService& addr, bool test_before_evict, NodeSeconds time) { AssertLockHeld(cs); int nId; - nLastGood = nTime; + m_last_good = time; AddrInfo* pinfo = Find(addr, &nId); @@ -633,8 +636,8 @@ bool AddrManImpl::Good_(const CService& addr, bool test_before_evict, int64_t nT AddrInfo& info = *pinfo; // update info - info.nLastSuccess = nTime; - info.nLastTry = nTime; + info.m_last_success = time; + info.m_last_try = time; info.nAttempts = 0; // nTime is not updated here, to avoid leaking information about // currently-connected peers. @@ -671,11 +674,11 @@ bool AddrManImpl::Good_(const CService& addr, bool test_before_evict, int64_t nT } } -bool AddrManImpl::Add_(const std::vector &vAddr, const CNetAddr& source, int64_t nTimePenalty) +bool AddrManImpl::Add_(const std::vector& vAddr, const CNetAddr& source, std::chrono::seconds time_penalty) { int added{0}; for (std::vector::const_iterator it = vAddr.begin(); it != vAddr.end(); it++) { - added += AddSingle(*it, source, nTimePenalty) ? 1 : 0; + added += AddSingle(*it, source, time_penalty) ? 1 : 0; } if (added > 0) { LogPrint(BCLog::ADDRMAN, "Added %i addresses (of %i) from %s: %i tried, %i new\n", added, vAddr.size(), source.ToString(), nTried, nNew); @@ -683,7 +686,7 @@ bool AddrManImpl::Add_(const std::vector &vAddr, const CNetAddr& sourc return added > 0; } -void AddrManImpl::Attempt_(const CService& addr, bool fCountFailure, int64_t nTime) +void AddrManImpl::Attempt_(const CService& addr, bool fCountFailure, NodeSeconds time) { AssertLockHeld(cs); @@ -696,14 +699,14 @@ void AddrManImpl::Attempt_(const CService& addr, bool fCountFailure, int64_t nTi AddrInfo& info = *pinfo; // update info - info.nLastTry = nTime; - if (fCountFailure && info.nLastCountAttempt < nLastGood) { - info.nLastCountAttempt = nTime; + info.m_last_try = time; + if (fCountFailure && info.m_last_count_attempt < m_last_good) { + info.m_last_count_attempt = time; info.nAttempts++; } } -std::pair AddrManImpl::Select_(bool newOnly) const +std::pair AddrManImpl::Select_(bool newOnly) const { AssertLockHeld(cs); @@ -736,7 +739,7 @@ std::pair AddrManImpl::Select_(bool newOnly) const // With probability GetChance() * fChanceFactor, return the entry. if (insecure_rand.randbits(30) < fChanceFactor * info.GetChance() * (1 << 30)) { LogPrint(BCLog::ADDRMAN, "Selected %s from tried\n", info.ToString()); - return {info, info.nLastTry}; + return {info, info.m_last_try}; } // Otherwise start over with a (likely) different bucket, and increased chance factor. fChanceFactor *= 1.2; @@ -764,7 +767,7 @@ std::pair AddrManImpl::Select_(bool newOnly) const // With probability GetChance() * fChanceFactor, return the entry. if (insecure_rand.randbits(30) < fChanceFactor * info.GetChance() * (1 << 30)) { LogPrint(BCLog::ADDRMAN, "Selected %s from new\n", info.ToString()); - return {info, info.nLastTry}; + return {info, info.m_last_try}; } // Otherwise start over with a (likely) different bucket, and increased chance factor. fChanceFactor *= 1.2; @@ -785,7 +788,7 @@ std::vector AddrManImpl::GetAddr_(size_t max_addresses, size_t max_pct } // gather a list of random nodes, skipping those of low quality - const int64_t now{GetAdjustedTime()}; + const auto now{Now()}; std::vector addresses; for (unsigned int n = 0; n < vRandom.size(); n++) { if (addresses.size() >= nNodes) @@ -810,7 +813,7 @@ std::vector AddrManImpl::GetAddr_(size_t max_addresses, size_t max_pct return addresses; } -void AddrManImpl::Connected_(const CService& addr, int64_t nTime) +void AddrManImpl::Connected_(const CService& addr, NodeSeconds time) { AssertLockHeld(cs); @@ -823,9 +826,10 @@ void AddrManImpl::Connected_(const CService& addr, int64_t nTime) AddrInfo& info = *pinfo; // update info - int64_t nUpdateInterval = 20 * 60; - if (nTime - info.nTime > nUpdateInterval) - info.nTime = nTime; + const auto update_interval{20min}; + if (time - info.nTime > update_interval) { + info.nTime = time; + } } void AddrManImpl::SetServices_(const CService& addr, ServiceFlags nServices) @@ -870,22 +874,22 @@ void AddrManImpl::ResolveCollisions_() int id_old = vvTried[tried_bucket][tried_bucket_pos]; AddrInfo& info_old = mapInfo[id_old]; - const auto current_time{GetAdjustedTime()}; + const auto current_time{Now()}; // Has successfully connected in last X hours - if (current_time - info_old.nLastSuccess < ADDRMAN_REPLACEMENT_HOURS*(60*60)) { + if (current_time - info_old.m_last_success < ADDRMAN_REPLACEMENT) { erase_collision = true; - } else if (current_time - info_old.nLastTry < ADDRMAN_REPLACEMENT_HOURS*(60*60)) { // attempted to connect and failed in last X hours + } else if (current_time - info_old.m_last_try < ADDRMAN_REPLACEMENT) { // attempted to connect and failed in last X hours // Give address at least 60 seconds to successfully connect - if (current_time - info_old.nLastTry > 60) { + if (current_time - info_old.m_last_try > 60s) { LogPrint(BCLog::ADDRMAN, "Replacing %s with %s in tried table\n", info_old.ToString(), info_new.ToString()); // Replaces an existing address already in the tried table with the new address Good_(info_new, false, current_time); erase_collision = true; } - } else if (current_time - info_new.nLastSuccess > ADDRMAN_TEST_WINDOW) { + } else if (current_time - info_new.m_last_success > ADDRMAN_TEST_WINDOW) { // If the collision hasn't resolved in some reasonable amount of time, // just evict the old entry -- we must not be able to // connect to it for some reason. @@ -894,7 +898,7 @@ void AddrManImpl::ResolveCollisions_() erase_collision = true; } } else { // Collision is not actually a collision anymore - Good_(info_new, false, GetAdjustedTime()); + Good_(info_new, false, Now()); erase_collision = true; } } @@ -907,7 +911,7 @@ void AddrManImpl::ResolveCollisions_() } } -std::pair AddrManImpl::SelectTriedCollision_() +std::pair AddrManImpl::SelectTriedCollision_() { AssertLockHeld(cs); @@ -932,7 +936,7 @@ std::pair AddrManImpl::SelectTriedCollision_() int tried_bucket_pos = newInfo.GetBucketPosition(nKey, false, tried_bucket); const AddrInfo& info_old = mapInfo[vvTried[tried_bucket][tried_bucket_pos]]; - return {info_old, info_old.nLastTry}; + return {info_old, info_old.m_last_try}; } std::optional AddrManImpl::FindAddressEntry_(const CAddress& addr) @@ -990,8 +994,9 @@ int AddrManImpl::CheckAddrman() const int n = entry.first; const AddrInfo& info = entry.second; if (info.fInTried) { - if (!info.nLastSuccess) + if (!TicksSinceEpoch(info.m_last_success)) { return -1; + } if (info.nRefCount) return -2; setTried.insert(n); @@ -1008,10 +1013,12 @@ int AddrManImpl::CheckAddrman() const } if (info.nRandomPos < 0 || (size_t)info.nRandomPos >= vRandom.size() || vRandom[info.nRandomPos] != n) return -14; - if (info.nLastTry < 0) + if (info.m_last_try < NodeSeconds{0s}) { return -6; - if (info.nLastSuccess < 0) + } + if (info.m_last_success < NodeSeconds{0s}) { return -8; + } } if (setTried.size() != (size_t)nTried) @@ -1067,29 +1074,29 @@ size_t AddrManImpl::size() const return vRandom.size(); } -bool AddrManImpl::Add(const std::vector& vAddr, const CNetAddr& source, int64_t nTimePenalty) +bool AddrManImpl::Add(const std::vector& vAddr, const CNetAddr& source, std::chrono::seconds time_penalty) { LOCK(cs); Check(); - auto ret = Add_(vAddr, source, nTimePenalty); + auto ret = Add_(vAddr, source, time_penalty); Check(); return ret; } -bool AddrManImpl::Good(const CService& addr, int64_t nTime) +bool AddrManImpl::Good(const CService& addr, NodeSeconds time) { LOCK(cs); Check(); - auto ret = Good_(addr, /*test_before_evict=*/true, nTime); + auto ret = Good_(addr, /*test_before_evict=*/true, time); Check(); return ret; } -void AddrManImpl::Attempt(const CService& addr, bool fCountFailure, int64_t nTime) +void AddrManImpl::Attempt(const CService& addr, bool fCountFailure, NodeSeconds time) { LOCK(cs); Check(); - Attempt_(addr, fCountFailure, nTime); + Attempt_(addr, fCountFailure, time); Check(); } @@ -1101,7 +1108,7 @@ void AddrManImpl::ResolveCollisions() Check(); } -std::pair AddrManImpl::SelectTriedCollision() +std::pair AddrManImpl::SelectTriedCollision() { LOCK(cs); Check(); @@ -1110,7 +1117,7 @@ std::pair AddrManImpl::SelectTriedCollision() return ret; } -std::pair AddrManImpl::Select(bool newOnly) const +std::pair AddrManImpl::Select(bool newOnly) const { LOCK(cs); Check(); @@ -1128,11 +1135,11 @@ std::vector AddrManImpl::GetAddr(size_t max_addresses, size_t max_pct, return addresses; } -void AddrManImpl::Connected(const CService& addr, int64_t nTime) +void AddrManImpl::Connected(const CService& addr, NodeSeconds time) { LOCK(cs); Check(); - Connected_(addr, nTime); + Connected_(addr, time); Check(); } @@ -1184,19 +1191,19 @@ size_t AddrMan::size() const return m_impl->size(); } -bool AddrMan::Add(const std::vector& vAddr, const CNetAddr& source, int64_t nTimePenalty) +bool AddrMan::Add(const std::vector& vAddr, const CNetAddr& source, std::chrono::seconds time_penalty) { - return m_impl->Add(vAddr, source, nTimePenalty); + return m_impl->Add(vAddr, source, time_penalty); } -bool AddrMan::Good(const CService& addr, int64_t nTime) +bool AddrMan::Good(const CService& addr, NodeSeconds time) { - return m_impl->Good(addr, nTime); + return m_impl->Good(addr, time); } -void AddrMan::Attempt(const CService& addr, bool fCountFailure, int64_t nTime) +void AddrMan::Attempt(const CService& addr, bool fCountFailure, NodeSeconds time) { - m_impl->Attempt(addr, fCountFailure, nTime); + m_impl->Attempt(addr, fCountFailure, time); } void AddrMan::ResolveCollisions() @@ -1204,12 +1211,12 @@ void AddrMan::ResolveCollisions() m_impl->ResolveCollisions(); } -std::pair AddrMan::SelectTriedCollision() +std::pair AddrMan::SelectTriedCollision() { return m_impl->SelectTriedCollision(); } -std::pair AddrMan::Select(bool newOnly) const +std::pair AddrMan::Select(bool newOnly) const { return m_impl->Select(newOnly); } @@ -1219,9 +1226,9 @@ std::vector AddrMan::GetAddr(size_t max_addresses, size_t max_pct, std return m_impl->GetAddr(max_addresses, max_pct, network); } -void AddrMan::Connected(const CService& addr, int64_t nTime) +void AddrMan::Connected(const CService& addr, NodeSeconds time) { - m_impl->Connected(addr, nTime); + m_impl->Connected(addr, time); } void AddrMan::SetServices(const CService& addr, ServiceFlags nServices) diff --git a/src/addrman.h b/src/addrman.h index a0063e8a9cbeb..5099c8c7a37ee 100644 --- a/src/addrman.h +++ b/src/addrman.h @@ -10,7 +10,7 @@ #include #include #include -#include +#include #include #include @@ -107,23 +107,23 @@ class AddrMan * * @param[in] vAddr Address records to attempt to add. * @param[in] source The address of the node that sent us these addr records. - * @param[in] nTimePenalty A "time penalty" to apply to the address record's nTime. If a peer + * @param[in] time_penalty A "time penalty" to apply to the address record's nTime. If a peer * sends us an address record with nTime=n, then we'll add it to our - * addrman with nTime=(n - nTimePenalty). + * addrman with nTime=(n - time_penalty). * @return true if at least one address is successfully added. */ - bool Add(const std::vector& vAddr, const CNetAddr& source, int64_t nTimePenalty = 0); + bool Add(const std::vector& vAddr, const CNetAddr& source, std::chrono::seconds time_penalty = 0s); /** * Mark an address record as accessible and attempt to move it to addrman's tried table. * * @param[in] addr Address record to attempt to move to tried table. - * @param[in] nTime The time that we were last connected to this peer. + * @param[in] time The time that we were last connected to this peer. * @return true if the address is successfully moved from the new table to the tried table. */ - bool Good(const CService& addr, int64_t nTime = GetAdjustedTime()); + bool Good(const CService& addr, NodeSeconds time = Now()); //! Mark an entry as connection attempted to. - void Attempt(const CService& addr, bool fCountFailure, int64_t nTime = GetAdjustedTime()); + void Attempt(const CService& addr, bool fCountFailure, NodeSeconds time = Now()); //! See if any to-be-evicted tried table entries have been tested and if so resolve the collisions. void ResolveCollisions(); @@ -133,18 +133,18 @@ class AddrMan * attempting to evict. * * @return CAddress The record for the selected tried peer. - * int64_t The last time we attempted to connect to that peer. + * seconds The last time we attempted to connect to that peer. */ - std::pair SelectTriedCollision(); + std::pair SelectTriedCollision(); /** * Choose an address to connect to. * * @param[in] newOnly Whether to only select addresses from the new table. * @return CAddress The record for the selected peer. - * int64_t The last time we attempted to connect to that peer. + * seconds The last time we attempted to connect to that peer. */ - std::pair Select(bool newOnly = false) const; + std::pair Select(bool newOnly = false) const; /** * Return all or many randomly selected addresses, optionally by network. @@ -166,9 +166,9 @@ class AddrMan * not leak information about currently connected peers. * * @param[in] addr The address of the peer we were connected to - * @param[in] nTime The time that we were last connected to this peer + * @param[in] time The time that we were last connected to this peer */ - void Connected(const CService& addr, int64_t nTime = GetAdjustedTime()); + void Connected(const CService& addr, NodeSeconds time = Now()); //! Update an entry's service bits. void SetServices(const CService& addr, ServiceFlags nServices); diff --git a/src/addrman_impl.h b/src/addrman_impl.h index 9d98cdde549be..376e79f49f5e8 100644 --- a/src/addrman_impl.h +++ b/src/addrman_impl.h @@ -11,7 +11,9 @@ #include #include #include +#include #include +#include #include #include @@ -38,16 +40,16 @@ class AddrInfo : public CAddress { public: //! last try whatsoever by us (memory only) - int64_t nLastTry{0}; + NodeSeconds m_last_try{0s}; //! last counted attempt (memory only) - int64_t nLastCountAttempt{0}; + NodeSeconds m_last_count_attempt{0s}; //! where knowledge about this address first came from CNetAddr source; //! last successful connection by us - int64_t nLastSuccess{0}; + NodeSeconds m_last_success{0s}; //! connection attempts since last successful attempt int nAttempts{0}; @@ -64,7 +66,7 @@ class AddrInfo : public CAddress SERIALIZE_METHODS(AddrInfo, obj) { READWRITEAS(CAddress, obj); - READWRITE(obj.source, obj.nLastSuccess, obj.nAttempts); + READWRITE(obj.source, Using>(obj.m_last_success), obj.nAttempts); } AddrInfo(const CAddress &addrIn, const CNetAddr &addrSource) : CAddress(addrIn), source(addrSource) @@ -91,10 +93,10 @@ class AddrInfo : public CAddress int GetBucketPosition(const uint256 &nKey, bool fNew, int nBucket) const; //! Determine whether the statistics about this entry are bad enough so that it can just be deleted - bool IsTerrible(int64_t nNow = GetAdjustedTime()) const; + bool IsTerrible(NodeSeconds now = Now()) const; //! Calculate the relative chance this entry should be given when selecting nodes to connect to - double GetChance(int64_t nNow = GetAdjustedTime()) const; + double GetChance(NodeSeconds now = Now()) const; }; class AddrManImpl @@ -112,26 +114,26 @@ class AddrManImpl size_t size() const EXCLUSIVE_LOCKS_REQUIRED(!cs); - bool Add(const std::vector& vAddr, const CNetAddr& source, int64_t nTimePenalty) + bool Add(const std::vector& vAddr, const CNetAddr& source, std::chrono::seconds time_penalty) EXCLUSIVE_LOCKS_REQUIRED(!cs); - bool Good(const CService& addr, int64_t nTime) + bool Good(const CService& addr, NodeSeconds time) EXCLUSIVE_LOCKS_REQUIRED(!cs); - void Attempt(const CService& addr, bool fCountFailure, int64_t nTime) + void Attempt(const CService& addr, bool fCountFailure, NodeSeconds time) EXCLUSIVE_LOCKS_REQUIRED(!cs); void ResolveCollisions() EXCLUSIVE_LOCKS_REQUIRED(!cs); - std::pair SelectTriedCollision() EXCLUSIVE_LOCKS_REQUIRED(!cs); + std::pair SelectTriedCollision() EXCLUSIVE_LOCKS_REQUIRED(!cs); - std::pair Select(bool newOnly) const + std::pair Select(bool newOnly) const EXCLUSIVE_LOCKS_REQUIRED(!cs); std::vector GetAddr(size_t max_addresses, size_t max_pct, std::optional network) const EXCLUSIVE_LOCKS_REQUIRED(!cs); - void Connected(const CService& addr, int64_t nTime) + void Connected(const CService& addr, NodeSeconds time) EXCLUSIVE_LOCKS_REQUIRED(!cs); void SetServices(const CService& addr, ServiceFlags nServices) @@ -202,7 +204,7 @@ class AddrManImpl int vvNew[ADDRMAN_NEW_BUCKET_COUNT][ADDRMAN_BUCKET_SIZE] GUARDED_BY(cs); //! last time Good was called (memory only). Initially set to 1 so that "never" is strictly worse. - int64_t nLastGood GUARDED_BY(cs){1}; + NodeSeconds m_last_good GUARDED_BY(cs){1s}; //! Holds addrs inserted into tried table that collide with existing entries. Test-before-evict discipline used to resolve these collisions. std::set m_tried_collisions; @@ -233,25 +235,25 @@ class AddrManImpl /** Attempt to add a single address to addrman's new table. * @see AddrMan::Add() for parameters. */ - bool AddSingle(const CAddress& addr, const CNetAddr& source, int64_t nTimePenalty) EXCLUSIVE_LOCKS_REQUIRED(cs); + bool AddSingle(const CAddress& addr, const CNetAddr& source, std::chrono::seconds time_penalty) EXCLUSIVE_LOCKS_REQUIRED(cs); - bool Good_(const CService& addr, bool test_before_evict, int64_t time) EXCLUSIVE_LOCKS_REQUIRED(cs); + bool Good_(const CService& addr, bool test_before_evict, NodeSeconds time) EXCLUSIVE_LOCKS_REQUIRED(cs); - bool Add_(const std::vector &vAddr, const CNetAddr& source, int64_t nTimePenalty) EXCLUSIVE_LOCKS_REQUIRED(cs); + bool Add_(const std::vector& vAddr, const CNetAddr& source, std::chrono::seconds time_penalty) EXCLUSIVE_LOCKS_REQUIRED(cs); - void Attempt_(const CService& addr, bool fCountFailure, int64_t nTime) EXCLUSIVE_LOCKS_REQUIRED(cs); + void Attempt_(const CService& addr, bool fCountFailure, NodeSeconds time) EXCLUSIVE_LOCKS_REQUIRED(cs); - std::pair Select_(bool newOnly) const EXCLUSIVE_LOCKS_REQUIRED(cs); + std::pair Select_(bool newOnly) const EXCLUSIVE_LOCKS_REQUIRED(cs); std::vector GetAddr_(size_t max_addresses, size_t max_pct, std::optional network) const EXCLUSIVE_LOCKS_REQUIRED(cs); - void Connected_(const CService& addr, int64_t nTime) EXCLUSIVE_LOCKS_REQUIRED(cs); + void Connected_(const CService& addr, NodeSeconds time) EXCLUSIVE_LOCKS_REQUIRED(cs); void SetServices_(const CService& addr, ServiceFlags nServices) EXCLUSIVE_LOCKS_REQUIRED(cs); void ResolveCollisions_() EXCLUSIVE_LOCKS_REQUIRED(cs); - std::pair SelectTriedCollision_() EXCLUSIVE_LOCKS_REQUIRED(cs); + std::pair SelectTriedCollision_() EXCLUSIVE_LOCKS_REQUIRED(cs); std::optional FindAddressEntry_(const CAddress& addr) EXCLUSIVE_LOCKS_REQUIRED(cs); diff --git a/src/bench/addrman.cpp b/src/bench/addrman.cpp index 76300f4db8ee1..f14d1f89b6045 100644 --- a/src/bench/addrman.cpp +++ b/src/bench/addrman.cpp @@ -43,7 +43,7 @@ static void CreateAddresses() CAddress ret(CService(addr, port), NODE_NETWORK); - ret.nTime = GetAdjustedTime(); + ret.nTime = Now(); return ret; }; diff --git a/src/bench/checkblock.cpp b/src/bench/checkblock.cpp index 52e5cb743fbdc..53aa470042bb7 100644 --- a/src/bench/checkblock.cpp +++ b/src/bench/checkblock.cpp @@ -8,6 +8,7 @@ #include #include #include +#include #include // These are the two major time-sinks which happen after we have fully received diff --git a/src/bench/coin_selection.cpp b/src/bench/coin_selection.cpp index b2958bcc9f0f9..6ada28115e30c 100644 --- a/src/bench/coin_selection.cpp +++ b/src/bench/coin_selection.cpp @@ -56,9 +56,10 @@ static void CoinSelection(benchmark::Bench& bench) addCoin(3 * COIN, wallet, wtxs); // Create coins - std::vector coins; + wallet::CoinsResult available_coins; for (const auto& wtx : wtxs) { - coins.emplace_back(COutPoint(wtx->GetHash(), 0), wtx->tx->vout.at(0), /*depth=*/6 * 24, GetTxSpendSize(wallet, *wtx, 0), /*spendable=*/true, /*solvable=*/true, /*safe=*/true, wtx->GetTxTime(), /*from_me=*/true, /*fees=*/ 0); + const auto txout = wtx->tx->vout.at(0); + available_coins.coins[OutputType::BECH32].emplace_back(COutPoint(wtx->GetHash(), 0), txout, /*depth=*/6 * 24, CalculateMaximumSignedInputSize(txout, &wallet, /*coin_control=*/nullptr), /*spendable=*/true, /*solvable=*/true, /*safe=*/true, wtx->GetTxTime(), /*from_me=*/true, /*fees=*/ 0); } const CoinEligibilityFilter filter_standard(1, 6, 0); @@ -75,7 +76,7 @@ static void CoinSelection(benchmark::Bench& bench) /*avoid_partial=*/ false, }; bench.run([&] { - auto result = AttemptSelection(wallet, 1003 * COIN, filter_standard, coins, coin_selection_params); + auto result = AttemptSelection(wallet, 1003 * COIN, filter_standard, available_coins, coin_selection_params, /*allow_mixed_output_types=*/true); assert(result); assert(result->GetSelectedValue() == 1003 * COIN); assert(result->GetInputSet().size() == 2); diff --git a/src/bench/descriptors.cpp b/src/bench/descriptors.cpp new file mode 100644 index 0000000000000..5c868a8573806 --- /dev/null +++ b/src/bench/descriptors.cpp @@ -0,0 +1,30 @@ +// Copyright (c) 2019 The Bitcoin Core developers +// Distributed under the MIT software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include +#include +#include