From 963472d910953f53b6c84ff097128b3f03f3ad9d Mon Sep 17 00:00:00 2001 From: Eric Voskuil Date: Fri, 9 Oct 2026 12:29:20 -0400 Subject: [PATCH 1/3] Add enable_memory_pool setting. --- include/bitcoin/network/settings.hpp | 1 + test/settings.cpp | 1 + 2 files changed, 2 insertions(+) diff --git a/include/bitcoin/network/settings.hpp b/include/bitcoin/network/settings.hpp index 3d26915fc..1d51e5deb 100644 --- a/include/bitcoin/network/settings.hpp +++ b/include/bitcoin/network/settings.hpp @@ -413,6 +413,7 @@ struct BCT_API settings bool enable_alert{ false }; bool enable_reject{ false }; bool enable_not_found{ false }; + bool enable_memory_pool{ false }; bool enable_relay{ false }; bool validate_checksum{ false }; bool gossip_ipv4{ true }; diff --git a/test/settings.cpp b/test/settings.cpp index 3bfcfd70e..c330510e3 100644 --- a/test/settings.cpp +++ b/test/settings.cpp @@ -45,6 +45,7 @@ BOOST_AUTO_TEST_CASE(settings__construct__default__expected) BOOST_REQUIRE_EQUAL(instance.enable_alert, false); BOOST_REQUIRE_EQUAL(instance.enable_reject, false); BOOST_REQUIRE_EQUAL(instance.enable_not_found, false); + BOOST_REQUIRE_EQUAL(instance.enable_memory_pool, false); BOOST_REQUIRE_EQUAL(instance.enable_relay, false); BOOST_REQUIRE_EQUAL(instance.validate_checksum, false); BOOST_REQUIRE_EQUAL(instance.identifier, 3652501241u); From c71932e752668caea5711163b478523a477e2a16 Mon Sep 17 00:00:00 2001 From: Eric Voskuil Date: Fri, 9 Oct 2026 12:29:20 -0400 Subject: [PATCH 2/3] default tx relay to enabled prior to bip37. --- src/messages/peer/detail/version.cpp | 4 +-- test/messages/peer/detail/version.cpp | 41 +++++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 2 deletions(-) diff --git a/src/messages/peer/detail/version.cpp b/src/messages/peer/detail/version.cpp index f4f2347e8..ba345718a 100644 --- a/src/messages/peer/detail/version.cpp +++ b/src/messages/peer/detail/version.cpp @@ -77,8 +77,8 @@ version version::deserialize(uint32_t version, reader& source) NOEXCEPT // version, since the specified version is not yet negotiated. A true // relay value may then be ignored when negotiated version is < bip37. // If value >= bip37 with no relay byte, the source is invalidated. - return (value >= level::bip37) && (source.is_exhausted() || - to_bool(source.read_byte())); + return (value < level::bip37) || source.is_exhausted() || + to_bool(source.read_byte()); }; // ************************************************************************ diff --git a/test/messages/peer/detail/version.cpp b/test/messages/peer/detail/version.cpp index 726dfbd33..e36787b2c 100644 --- a/test/messages/peer/detail/version.cpp +++ b/test/messages/peer/detail/version.cpp @@ -63,6 +63,47 @@ BOOST_AUTO_TEST_CASE(version__size__default_bip37_version__expected) BOOST_REQUIRE_EQUAL(version{}.size(level::maximum_protocol), expected); } +// relay + +BOOST_AUTO_TEST_CASE(version__deserialize__pre_bip37__relay_true) +{ + version instance{}; + instance.value = level::bip35; + instance.relay = false; + data_chunk data(instance.size(level::bip35)); + BOOST_REQUIRE(instance.serialize(level::bip35, data)); + + const auto message = version::deserialize(level::bip35, data); + BOOST_REQUIRE(message); + BOOST_REQUIRE(message->relay); +} + +BOOST_AUTO_TEST_CASE(version__deserialize__bip37_relay_false__relay_false) +{ + version instance{}; + instance.value = level::bip37; + instance.relay = false; + data_chunk data(instance.size(level::bip37)); + BOOST_REQUIRE(instance.serialize(level::bip37, data)); + + const auto message = version::deserialize(level::bip37, data); + BOOST_REQUIRE(message); + BOOST_REQUIRE(!message->relay); +} + +BOOST_AUTO_TEST_CASE(version__deserialize__bip37_relay_true__relay_true) +{ + version instance{}; + instance.value = level::bip37; + instance.relay = true; + data_chunk data(instance.size(level::bip37)); + BOOST_REQUIRE(instance.serialize(level::bip37, data)); + + const auto message = version::deserialize(level::bip37, data); + BOOST_REQUIRE(message); + BOOST_REQUIRE(message->relay); +} + // wire examples // "/Satoshi:1.1.1/" (70006) no relay From ddd986896a1ee6a76fb5fbef421fc01eb674e3e2 Mon Sep 17 00:00:00 2001 From: Eric Voskuil Date: Sat, 10 Oct 2026 01:42:50 -0400 Subject: [PATCH 3/3] Remove inaccurate comment on relay read exhaustion. --- src/messages/peer/detail/version.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/messages/peer/detail/version.cpp b/src/messages/peer/detail/version.cpp index ba345718a..b23c9735e 100644 --- a/src/messages/peer/detail/version.cpp +++ b/src/messages/peer/detail/version.cpp @@ -76,7 +76,6 @@ version version::deserialize(uint32_t version, reader& source) NOEXCEPT // This ignores the specified version, instead respecting the peer's // version, since the specified version is not yet negotiated. A true // relay value may then be ignored when negotiated version is < bip37. - // If value >= bip37 with no relay byte, the source is invalidated. return (value < level::bip37) || source.is_exhausted() || to_bool(source.read_byte()); };