diff --git a/.github/workflows/ci-expanded.yml b/.github/workflows/ci-expanded.yml
index 1aee8f92..48d3d8c3 100644
--- a/.github/workflows/ci-expanded.yml
+++ b/.github/workflows/ci-expanded.yml
@@ -337,6 +337,18 @@ jobs:
boost: "--build-boost"
options: "--enable-isystem"
+ - image: ubuntu-24.04
+ config: "debug"
+ link: "static"
+ cc: "s390x-linux-gnu-gcc"
+ cxx: "s390x-linux-gnu-g++"
+ flags: ""
+ coverage: ""
+ package: "gcc-s390x-linux-gnu g++-s390x-linux-gnu qemu-user-static"
+ host: "s390x-linux-gnu"
+ boost: ""
+ options: "--enable-isystem --build-skip-tests"
+
runs-on: ${{ matrix.image }}
env:
@@ -344,6 +356,7 @@ jobs:
CXX: '${{ matrix.cxx }}'
CFLAGS: '${{ matrix.flags }}'
CXXFLAGS: '${{ matrix.flags }}'
+ QEMU_LD_PREFIX: "${{ matrix.host && format('/usr/{0}', matrix.host) || '' }}"
steps:
- name: Get branch name
@@ -451,6 +464,35 @@ jobs:
echo "LDFLAGS=-Wl,-rpath,${{ github.workspace }}/prefix/lib" >> $GITHUB_ENV
fi
+ - name: Verify emulation [cross]
+ if: ${{ matrix.host }}
+ shell: bash
+ working-directory: ${{ github.workspace }}
+ run: |
+ echo 'int main() { return 0; }' > emulation.c
+ ${{ matrix.cc }} emulation.c -o emulation
+ file emulation
+ ./emulation
+
+ - name: Install boost headers [cross]
+ if: ${{ matrix.host }}
+ shell: bash
+ working-directory: 'libbitcoin-node'
+ env:
+ CC: 'gcc'
+ CXX: 'g++'
+ run: >
+ ./builds/gnu/install-gnu.sh
+ --build-use-local-src
+ --build-src-dir="${{ github.workspace }}"
+ --prefix="${{ github.workspace }}/prefix"
+ --build-obj-dir="obj"
+ --build-obj-dir-relative
+ --build-config="${{ matrix.config }}"
+ --build-link="${{ matrix.link }}"
+ --build-limit=external
+ --build-boost
+
- name: Execute installation
shell: bash
working-directory: 'libbitcoin-node'
@@ -466,6 +508,7 @@ jobs:
--build-link="${{ matrix.link }}"
${{ matrix.boost }}
${{ matrix.options }}
+ ${{ matrix.host && format('--host={0} --with-boost={1}/prefix', matrix.host, github.workspace) || '' }}
- name: Coverage calculation
if: ${{ matrix.coverage == 'lcov' }}
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 9d1ab8e0..9c63fbfe 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -118,6 +118,18 @@ jobs:
boost: "--build-boost"
options: "--enable-isystem"
+ - image: ubuntu-24.04
+ config: "debug"
+ link: "static"
+ cc: "s390x-linux-gnu-gcc"
+ cxx: "s390x-linux-gnu-g++"
+ flags: ""
+ coverage: ""
+ package: "gcc-s390x-linux-gnu g++-s390x-linux-gnu qemu-user-static"
+ host: "s390x-linux-gnu"
+ boost: ""
+ options: "--enable-isystem --build-skip-tests"
+
runs-on: ${{ matrix.image }}
env:
@@ -125,6 +137,7 @@ jobs:
CXX: '${{ matrix.cxx }}'
CFLAGS: '${{ matrix.flags }}'
CXXFLAGS: '${{ matrix.flags }}'
+ QEMU_LD_PREFIX: "${{ matrix.host && format('/usr/{0}', matrix.host) || '' }}"
steps:
- name: Get branch name
@@ -232,6 +245,35 @@ jobs:
echo "LDFLAGS=-Wl,-rpath,${{ github.workspace }}/prefix/lib" >> $GITHUB_ENV
fi
+ - name: Verify emulation [cross]
+ if: ${{ matrix.host }}
+ shell: bash
+ working-directory: ${{ github.workspace }}
+ run: |
+ echo 'int main() { return 0; }' > emulation.c
+ ${{ matrix.cc }} emulation.c -o emulation
+ file emulation
+ ./emulation
+
+ - name: Install boost headers [cross]
+ if: ${{ matrix.host }}
+ shell: bash
+ working-directory: 'libbitcoin-node'
+ env:
+ CC: 'gcc'
+ CXX: 'g++'
+ run: >
+ ./builds/gnu/install-gnu.sh
+ --build-use-local-src
+ --build-src-dir="${{ github.workspace }}"
+ --prefix="${{ github.workspace }}/prefix"
+ --build-obj-dir="obj"
+ --build-obj-dir-relative
+ --build-config="${{ matrix.config }}"
+ --build-link="${{ matrix.link }}"
+ --build-limit=external
+ --build-boost
+
- name: Execute installation
shell: bash
working-directory: 'libbitcoin-node'
@@ -247,6 +289,7 @@ jobs:
--build-link="${{ matrix.link }}"
${{ matrix.boost }}
${{ matrix.options }}
+ ${{ matrix.host && format('--host={0} --with-boost={1}/prefix', matrix.host, github.workspace) || '' }}
- name: Coverage calculation
if: ${{ matrix.coverage == 'lcov' }}
@@ -825,6 +868,12 @@ jobs:
version: "vs2026"
tests: "*"
+ - image: windows-latest
+ configuration: "StaticRelease"
+ platform: "Win32"
+ version: "vs2026"
+ tests: "*"
+
runs-on: ${{ matrix.image }}
steps:
diff --git a/builds/cmake/CMakeLists.txt b/builds/cmake/CMakeLists.txt
index 0fb4fa03..63b1fe9b 100644
--- a/builds/cmake/CMakeLists.txt
+++ b/builds/cmake/CMakeLists.txt
@@ -76,6 +76,10 @@ if ( MSVC )
set( CMAKE_SHARED_LIBRARY_PREFIX "lib" )
endif()
+include(CheckCCompilerFlag)
+include(CheckCXXCompilerFlag)
+include(CheckCXXSourceCompiles)
+
#------------------------------------------------------------------------------
# Project options.
#------------------------------------------------------------------------------
@@ -102,12 +106,13 @@ set( libbitcoin_network_VERSION ${libbitcoin-network_VERSION} )
find_package( Boost 1.86.0 REQUIRED )
+#------------------------------------------------------------------------------
+# Architecture options.
+#------------------------------------------------------------------------------
+
#------------------------------------------------------------------------------
# Compiler options.
#------------------------------------------------------------------------------
-include(CheckCCompilerFlag)
-include(CheckCXXCompilerFlag)
-include(CheckCXXSourceCompiles)
check_cxx_compiler_flag( "-Wall" HAS_FLAG_WALL )
if ( !HAS_FLAG_WALL )
diff --git a/builds/cmake/install-cmake.sh b/builds/cmake/install-cmake.sh
index 108fcd58..a9481de0 100755
--- a/builds/cmake/install-cmake.sh
+++ b/builds/cmake/install-cmake.sh
@@ -156,25 +156,25 @@ main()
CONFIGURE_OPTIONS_ORIGINAL=("$@")
CONFIGURE_OPTIONS=("$@")
- CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--build-boost/}")
- CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--build-secp256k1/}")
- CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--build-src-dir=*/}")
- CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--build-obj-dir=*/}")
- CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--build-obj-dir-relative/}")
- CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--build-limit=*/}")
- CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--build-config=*/}")
- CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--build-link=*/}")
- CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--build-full-repositories/}")
- CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--build-post-install-clean/}")
- CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--build-skip-tests/}")
- CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--build-parallel=*/}")
- CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--build-use-local-src/}")
- CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--prefix=*/}")
- CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--hardware-optimized/}")
- CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--noninteractive/}")
- CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--verbose/}")
- CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--help/}")
- CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/-h/}")
+ CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/#--build-boost/}")
+ CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/#--build-secp256k1/}")
+ CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/#--build-src-dir=*/}")
+ CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/#--build-obj-dir=*/}")
+ CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/#--build-obj-dir-relative/}")
+ CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/#--build-limit=*/}")
+ CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/#--build-config=*/}")
+ CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/#--build-link=*/}")
+ CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/#--build-full-repositories/}")
+ CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/#--build-post-install-clean/}")
+ CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/#--build-skip-tests/}")
+ CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/#--build-parallel=*/}")
+ CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/#--build-use-local-src/}")
+ CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/#--prefix=*/}")
+ CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/#--hardware-optimized/}")
+ CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/#--noninteractive/}")
+ CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/#--verbose/}")
+ CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/#--help/}")
+ CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/#-h/}")
CONFIGURE_OPTIONS_CMAKE=("${CONFIGURE_OPTIONS[@]}")
msg_verbose "*** ARGUMENTS: ${CONFIGURE_OPTIONS_ORIGINAL[*]}"
msg_verbose "*** SANITIZED: ${CONFIGURE_OPTIONS[*]}"
@@ -387,6 +387,14 @@ main()
msg_verbose "CXX using defined value '${CXX}'"
fi
+ if [[ -z "${MACOSX_DEPLOYMENT_TARGET}" ]]; then
+ if [[ ${OS} == Darwin ]]; then
+ export MACOSX_DEPLOYMENT_TARGET=$(sw_vers -productVersion)
+ fi
+ else
+ msg_verbose "MACOSX_DEPLOYMENT_TARGET using defined value '${MACOSX_DEPLOYMENT_TARGET}'"
+ fi
+
# HARDWARE_OPTIMIZED
if [[ "${HARDWARE_OPTIMIZED}" == "yes" ]]; then
ARCHTUNE="-march=native -mtune=native"
diff --git a/builds/cmake/install-presets.sh b/builds/cmake/install-presets.sh
index ddc80b12..a5bac9d5 100755
--- a/builds/cmake/install-presets.sh
+++ b/builds/cmake/install-presets.sh
@@ -142,21 +142,21 @@ main()
CONFIGURE_OPTIONS_ORIGINAL=("$@")
CONFIGURE_OPTIONS=("$@")
- CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--build-boost/}")
- CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--build-secp256k1/}")
- CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--build-preset=*/}")
- CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--build-src-dir=*/}")
- CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--build-limit=*/}")
- CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--build-full-repositories/}")
- CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--build-post-install-clean/}")
- CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--build-skip-tests/}")
- CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--build-parallel=*/}")
- CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--build-use-local-src/}")
- CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--hardware-optimized/}")
- CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--noninteractive/}")
- CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--verbose/}")
- CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--help/}")
- CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/-h/}")
+ CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/#--build-boost/}")
+ CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/#--build-secp256k1/}")
+ CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/#--build-preset=*/}")
+ CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/#--build-src-dir=*/}")
+ CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/#--build-limit=*/}")
+ CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/#--build-full-repositories/}")
+ CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/#--build-post-install-clean/}")
+ CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/#--build-skip-tests/}")
+ CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/#--build-parallel=*/}")
+ CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/#--build-use-local-src/}")
+ CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/#--hardware-optimized/}")
+ CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/#--noninteractive/}")
+ CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/#--verbose/}")
+ CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/#--help/}")
+ CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/#-h/}")
CONFIGURE_OPTIONS_CMAKE=("${CONFIGURE_OPTIONS[@]}")
msg_verbose "*** ARGUMENTS: ${CONFIGURE_OPTIONS_ORIGINAL[*]}"
msg_verbose "*** SANITIZED: ${CONFIGURE_OPTIONS[*]}"
@@ -403,6 +403,14 @@ main()
msg_verbose "CXX using defined value '${CXX}'"
fi
+ if [[ -z "${MACOSX_DEPLOYMENT_TARGET}" ]]; then
+ if [[ ${OS} == Darwin ]]; then
+ export MACOSX_DEPLOYMENT_TARGET=$(sw_vers -productVersion)
+ fi
+ else
+ msg_verbose "MACOSX_DEPLOYMENT_TARGET using defined value '${MACOSX_DEPLOYMENT_TARGET}'"
+ fi
+
# HARDWARE_OPTIMIZED
if [[ "${HARDWARE_OPTIMIZED}" == "yes" ]]; then
ARCHTUNE="-march=native -mtune=native"
diff --git a/builds/gnu/Makefile.am b/builds/gnu/Makefile.am
index 553b1d69..9d5fe64e 100644
--- a/builds/gnu/Makefile.am
+++ b/builds/gnu/Makefile.am
@@ -54,6 +54,7 @@ src_libbitcoin_node_la_SOURCES = \
${srcdir}/../../src/block_arena.cpp \
${srcdir}/../../src/block_memory.cpp \
${srcdir}/../../src/configuration.cpp \
+ ${srcdir}/../../src/define.cpp \
${srcdir}/../../src/error.cpp \
${srcdir}/../../src/estimator.cpp \
${srcdir}/../../src/full_node.cpp \
diff --git a/builds/gnu/install-gnu.sh b/builds/gnu/install-gnu.sh
index 67ef8f0a..c56c07b7 100755
--- a/builds/gnu/install-gnu.sh
+++ b/builds/gnu/install-gnu.sh
@@ -154,26 +154,26 @@ main()
CONFIGURE_OPTIONS_ORIGINAL=("$@")
CONFIGURE_OPTIONS=("$@")
- CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--build-boost/}")
- CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--build-secp256k1/}")
- CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--build-src-dir=*/}")
- CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--build-obj-dir=*/}")
- CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--build-obj-dir-relative/}")
- CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--build-limit=*/}")
- CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--build-config=*/}")
- CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--build-link=*/}")
- CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--build-full-repositories/}")
- CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--build-post-install-clean/}")
- CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--build-skip-tests/}")
- CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--build-valgrind=*/}")
- CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--build-parallel=*/}")
- CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--build-use-local-src/}")
- CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--prefix=*/}")
- CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--hardware-optimized/}")
- CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--noninteractive/}")
- CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--verbose/}")
- CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--help/}")
- CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/-h/}")
+ CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/#--build-boost/}")
+ CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/#--build-secp256k1/}")
+ CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/#--build-src-dir=*/}")
+ CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/#--build-obj-dir=*/}")
+ CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/#--build-obj-dir-relative/}")
+ CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/#--build-limit=*/}")
+ CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/#--build-config=*/}")
+ CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/#--build-link=*/}")
+ CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/#--build-full-repositories/}")
+ CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/#--build-post-install-clean/}")
+ CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/#--build-skip-tests/}")
+ CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/#--build-valgrind=*/}")
+ CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/#--build-parallel=*/}")
+ CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/#--build-use-local-src/}")
+ CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/#--prefix=*/}")
+ CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/#--hardware-optimized/}")
+ CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/#--noninteractive/}")
+ CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/#--verbose/}")
+ CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/#--help/}")
+ CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/#-h/}")
CONFIGURE_OPTIONS_CMAKE=()
CONFIGURE_OPTIONS_GNU=("${CONFIGURE_OPTIONS[@]}")
msg_verbose "*** ARGUMENTS: ${CONFIGURE_OPTIONS_ORIGINAL[*]}"
@@ -392,6 +392,14 @@ main()
msg_verbose "CXX using defined value '${CXX}'"
fi
+ if [[ -z "${MACOSX_DEPLOYMENT_TARGET}" ]]; then
+ if [[ ${OS} == Darwin ]]; then
+ export MACOSX_DEPLOYMENT_TARGET=$(sw_vers -productVersion)
+ fi
+ else
+ msg_verbose "MACOSX_DEPLOYMENT_TARGET using defined value '${MACOSX_DEPLOYMENT_TARGET}'"
+ fi
+
# HARDWARE_OPTIMIZED
if [[ "${HARDWARE_OPTIMIZED}" == "yes" ]]; then
ARCHTUNE="-march=native -mtune=native"
diff --git a/builds/msvc/vs2026/libbitcoin-node/libbitcoin-node.vcxproj b/builds/msvc/vs2026/libbitcoin-node/libbitcoin-node.vcxproj
index df62d449..4b821c02 100644
--- a/builds/msvc/vs2026/libbitcoin-node/libbitcoin-node.vcxproj
+++ b/builds/msvc/vs2026/libbitcoin-node/libbitcoin-node.vcxproj
@@ -124,6 +124,7 @@
+
diff --git a/builds/msvc/vs2026/libbitcoin-node/libbitcoin-node.vcxproj.filters b/builds/msvc/vs2026/libbitcoin-node/libbitcoin-node.vcxproj.filters
index 97bbce93..038a8020 100644
--- a/builds/msvc/vs2026/libbitcoin-node/libbitcoin-node.vcxproj.filters
+++ b/builds/msvc/vs2026/libbitcoin-node/libbitcoin-node.vcxproj.filters
@@ -102,6 +102,9 @@
src
+
+ src
+
src
diff --git a/include/bitcoin/node/estimator.hpp b/include/bitcoin/node/estimator.hpp
index 84781a93..65983d68 100644
--- a/include/bitcoin/node/estimator.hpp
+++ b/include/bitcoin/node/estimator.hpp
@@ -36,7 +36,7 @@ class BCN_API estimator
public:
typedef std::unique_ptr ptr;
static constexpr size_t maximum_horizon = 1008;
- static constexpr size_t estimate_failed = max_uint64;
+ static constexpr uint64_t estimate_failed = max_uint64;
DELETE_COPY_MOVE_DESTRUCT(estimator);
diff --git a/src/chasers/chaser_storage.cpp b/src/chasers/chaser_storage.cpp
index 40e2e9d9..35a21c19 100644
--- a/src/chasers/chaser_storage.cpp
+++ b/src/chasers/chaser_storage.cpp
@@ -175,7 +175,7 @@ void chaser_storage::do_reload() NOEXCEPT
bool chaser_storage::have_capacity() const NOEXCEPT
{
- size_t have{};
+ uint64_t have{};
const auto require = archive().get_space();
const auto success = (file::space(have, store_) && have >= require);
LOGF("Require [" << require << "] bytes and [" << have << "] are free.");
diff --git a/src/chasers/chaser_validate_batch.cpp b/src/chasers/chaser_validate_batch.cpp
index e379f850..0ba040c6 100644
--- a/src/chasers/chaser_validate_batch.cpp
+++ b/src/chasers/chaser_validate_batch.cpp
@@ -132,13 +132,14 @@ code chaser_validate::do_process_batch(bool bank, bool startup) NOEXCEPT
LOGN("Batch verify ecdsa canceled (" << ecdsa << ").");
return network::error::operation_canceled;
}
- const auto elapsed = network::logger::now() - start;
- fire(events::ecdsa_secs, duration_cast(elapsed).count());
+ const auto elapsed = network::logger::now() - start;
+ const auto count = duration_cast(elapsed).count();
+ const auto duration = limit(count);
+ fire(events::ecdsa_secs, duration);
if (!startup)
{
- LOGN(log_rate("Verify ecdsa.....", ecdsa,
- duration_cast(elapsed).count(), use_gpu));
+ LOGN(log_rate("Verify ecdsa.....", ecdsa, duration, use_gpu));
}
if (!mark_invalids(prevalids, fails, startup))
@@ -156,13 +157,14 @@ code chaser_validate::do_process_batch(bool bank, bool startup) NOEXCEPT
LOGN("Batch verify schnorr canceled (" << schnorr << ").");
return network::error::operation_canceled;
}
- const auto elapsed = network::logger::now() - start;
- fire(events::schnorr_secs, duration_cast(elapsed).count());
+ const auto elapsed = network::logger::now() - start;
+ const auto count = duration_cast(elapsed).count();
+ const auto duration = limit(count);
+ fire(events::schnorr_secs, duration);
if (!startup)
{
- LOGN(log_rate("Verify schnorr...", schnorr,
- duration_cast(elapsed).count(), use_gpu));
+ LOGN(log_rate("Verify schnorr...", schnorr, duration, use_gpu));
}
if (!mark_invalids(prevalids, fails, startup))
@@ -403,9 +405,10 @@ code chaser_validate::do_process_silent_batch(bool bank) NOEXCEPT
if (is_nonzero(rows))
{
const auto elapsed = network::logger::now() - start;
- fire(events::silent_secs, duration_cast(elapsed).count());
- LOGN(log_rate("Compute silent...", rows,
- duration_cast(elapsed).count(), use_gpu));
+ const auto count = duration_cast(elapsed).count();
+ const auto duration = limit(count);
+ fire(events::silent_secs, duration);
+ LOGN(log_rate("Compute silent...", rows, duration, use_gpu));
}
// Purge presilents before silents.
diff --git a/src/chasers/chaser_validate_parallel.cpp b/src/chasers/chaser_validate_parallel.cpp
index 2a6837d5..43e058a4 100644
--- a/src/chasers/chaser_validate_parallel.cpp
+++ b/src/chasers/chaser_validate_parallel.cpp
@@ -113,12 +113,13 @@ void chaser_validate::validate_block(const header_link& link,
if (!ec && current)
{
const auto elapsed = network::logger::now() - start;
- const auto usecs = duration_cast(elapsed).count();
- fire(events::validate_usecs, usecs);
+ const auto count = duration_cast(elapsed).count();
+ const auto duration = limit(count);
+ fire(events::validate_usecs, duration);
if (pooled)
{
LOGN("Validated pooled block [" << ctx.height << "] of ("
- << query.get_tx_count(link) << ") txs in (" << usecs
+ << query.get_tx_count(link) << ") txs in (" << duration
<< ") usecs.");
}
else
@@ -126,7 +127,7 @@ void chaser_validate::validate_block(const header_link& link,
LOGN("Validated full block [" << ctx.height << "] of ("
<< query.get_tx_count(link) << ") txs with ("
<< unpooled_count(query, link, ctx) << ") unpooled in ("
- << usecs << ") usecs.");
+ << duration << ") usecs.");
}
}