From 3e83fdb2d8bc21c247eab4f4670694eb7afa972b Mon Sep 17 00:00:00 2001 From: Tore-tto Date: Thu, 17 Sep 2026 18:07:27 +0530 Subject: [PATCH 1/3] fix(tx_pool): handle stake unlocks correctly for block transactions Skip stake-unlock policy checks for transactions kept by a block. Retain the master-node existence check to prevent invalid mnode_key access. --- src/cryptonote_core/tx_pool.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cryptonote_core/tx_pool.cpp b/src/cryptonote_core/tx_pool.cpp index 80893ab5fd0..43ae3c1f8f6 100755 --- a/src/cryptonote_core/tx_pool.cpp +++ b/src/cryptonote_core/tx_pool.cpp @@ -263,7 +263,7 @@ namespace cryptonote if(tx.type == txtype::key_image_unlock) { - if(hf_version >= hf::hf18_bns) + if(!opts.kept_by_block && hf_version >= hf::hf18_bns) { crypto::public_key mnode_key; if (!cryptonote::get_master_node_pubkey_from_tx_extra(tx.extra, mnode_key)) @@ -274,7 +274,7 @@ namespace cryptonote return false; uint64_t block_height = m_blockchain.get_current_blockchain_height(); - if (!m_blockchain.get_master_node_list().is_master_node(mnode_key)) + if (!m_blockchain.get_master_node_list().is_master_node(mnode_key, /*require_active=*/false)) return false; const master_nodes::master_node_info &node_info = m_blockchain.get_master_node_list().get_master_node_details(mnode_key); From cdf07b19336d502b073804acd0f53451e4d3b24e Mon Sep 17 00:00:00 2001 From: Tore-tto Date: Mon, 21 Sep 2026 17:46:09 +0530 Subject: [PATCH 2/3] Bump version from 7.0.3 to 7.0.4 --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ba94209317d..574fd7e0dd0 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -51,7 +51,7 @@ message(STATUS "CMake version ${CMAKE_VERSION}") set(CMAKE_OSX_DEPLOYMENT_TARGET 10.15 CACHE STRING "macOS deployment target (Apple clang only)") project(beldex - VERSION 7.0.3 + VERSION 7.0.4 LANGUAGES CXX C) set(BELDEX_RELEASE_CODENAME "Obscura") From b8418c19ef2ead6507b69a84acc7569e38cb49e5 Mon Sep 17 00:00:00 2001 From: Tore-tto Date: Tue, 22 Sep 2026 16:13:35 +0530 Subject: [PATCH 3/3] feat(rpc): expose release codename in daemon info --- src/rpc/core_rpc_server.cpp | 1 + src/rpc/core_rpc_server_commands_defs.h | 1 + tests/functional_tests/daemon_info.py | 4 ++++ 3 files changed, 6 insertions(+) diff --git a/src/rpc/core_rpc_server.cpp b/src/rpc/core_rpc_server.cpp index e657f55c686..71b9d4aa38d 100755 --- a/src/rpc/core_rpc_server.cpp +++ b/src/rpc/core_rpc_server.cpp @@ -372,6 +372,7 @@ namespace cryptonote::rpc { auto db_size = db.get_database_size(); info.response["database_size"] = context.admin ? db_size : round_up(db_size, 1'000'000'000); info.response["version"] = context.admin ? BELDEX_VERSION_FULL : std::to_string(BELDEX_VERSION[0]); + info.response["release_codename"] = BELDEX_RELEASE_NAME; info.response["status_line"] = context.admin ? m_core.get_status_string() : "v" + std::to_string(BELDEX_VERSION[0]) + "; Height: " + std::to_string(height); diff --git a/src/rpc/core_rpc_server_commands_defs.h b/src/rpc/core_rpc_server_commands_defs.h index cfe4e08bad4..144c0cff5e4 100755 --- a/src/rpc/core_rpc_server_commands_defs.h +++ b/src/rpc/core_rpc_server_commands_defs.h @@ -564,6 +564,7 @@ namespace cryptonote::rpc { /// - `version` -- Current version of this daemon, as a string. For a public node this will just be /// the major and minor version (e.g. "9"); for an admin rpc endpoint this will return the full /// version (e.g. "9.2.1"). + /// - `release_codename` -- Release codename of this daemon build (e.g. "Obscura"). /// - `status_line` -- A short one-line summary string of the node (requires an admin/unrestricted /// connection for most details) /// diff --git a/tests/functional_tests/daemon_info.py b/tests/functional_tests/daemon_info.py index 7b606fe0c45..6fd5ef684c3 100755 --- a/tests/functional_tests/daemon_info.py +++ b/tests/functional_tests/daemon_info.py @@ -84,6 +84,10 @@ def _test_get_info(self): assert 'height' in res.keys() assert res.height >= 1 + # release codename should be provided as a non-empty string + assert 'release_codename' in res.keys() + assert isinstance(res.release_codename, str) + assert res.release_codename if __name__ == '__main__': DaemonGetInfoTest().run_test()