From 4445575bae3f711a8802321514f9c8130ed7ed0c Mon Sep 17 00:00:00 2001 From: Daniel Sanchez Date: Tue, 10 Feb 2026 13:06:58 +0100 Subject: [PATCH] feat(events): Generate block events (#4) * Pop event on block * Subscribe on node startup * Liblib fix * Update flake --- flake.lock | 113 ++++++++++++++++++++++++-------- src/i_logos_blockchain_module.h | 1 - src/logos_blockchain_module.cpp | 27 ++++---- src/logos_blockchain_module.h | 21 +++++- 4 files changed, 118 insertions(+), 44 deletions(-) diff --git a/flake.lock b/flake.lock index 253f7b0..6e1659d 100644 --- a/flake.lock +++ b/flake.lock @@ -23,11 +23,11 @@ "rust-overlay": "rust-overlay" }, "locked": { - "lastModified": 1770052482, - "narHash": "sha256-0xvLcZqKDfhhCu0w+GMWI57qUC3Hr1usRBfTWwT/i68=", + "lastModified": 1770714119, + "narHash": "sha256-Ss9Qu8HqdDB+tGLfrNUjfzOmNPbj0vHBYjZFVgGHgMU=", "owner": "logos-blockchain", "repo": "logos-blockchain", - "rev": "c8c63e5236093af856dfe355187d8e9fa31fd28d", + "rev": "8cfb8adecd6f7a599f6ed0f5c600cd97909a98fe", "type": "github" }, "original": { @@ -81,7 +81,7 @@ }, "logos-capability-module_2": { "inputs": { - "logos-cpp-sdk": "logos-cpp-sdk_4", + "logos-cpp-sdk": "logos-cpp-sdk_5", "logos-liblogos": "logos-liblogos_3", "nixpkgs": [ "logos-module-viewer", @@ -109,11 +109,11 @@ "nixpkgs": "nixpkgs_3" }, "locked": { - "lastModified": 1767724329, - "narHash": "sha256-UPkqxqxbKwU5Dmu00TnjiJVXUmfVylF3p1qziEuYwIE=", + "lastModified": 1770132997, + "narHash": "sha256-Iv0QMXMD6kf+y2Qx37jXR7Ik6h1dqOzuxBzCdc5S6KA=", "owner": "logos-co", "repo": "logos-cpp-sdk", - "rev": "32f1d7080d784ff044d91d076ef2f0c7305d4784", + "rev": "30ef7986f4b65b7dcf43af84bb073233b1b77821", "type": "github" }, "original": { @@ -140,6 +140,24 @@ "type": "github" } }, + "logos-cpp-sdk_10": { + "inputs": { + "nixpkgs": "nixpkgs_13" + }, + "locked": { + "lastModified": 1761230734, + "narHash": "sha256-CMRUwXH7pJZ1OI6bd/TDDDXKqQ1tQZHQEOOwK8TgYHI=", + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "rev": "4b143922c190df00bb3835441c9f0075cb28283b", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "type": "github" + } + }, "logos-cpp-sdk_2": { "inputs": { "nixpkgs": "nixpkgs_5" @@ -163,11 +181,11 @@ "nixpkgs": "nixpkgs_6" }, "locked": { - "lastModified": 1764699992, - "narHash": "sha256-nCmK9C9F31cHvy6lWKR5WGl99aJbS3kIsROAoZ4OrwI=", + "lastModified": 1767724329, + "narHash": "sha256-UPkqxqxbKwU5Dmu00TnjiJVXUmfVylF3p1qziEuYwIE=", "owner": "logos-co", "repo": "logos-cpp-sdk", - "rev": "5d0bbd0d1e00aad0532ffa7c8bf2c80f460a4f6d", + "rev": "32f1d7080d784ff044d91d076ef2f0c7305d4784", "type": "github" }, "original": { @@ -181,11 +199,11 @@ "nixpkgs": "nixpkgs_7" }, "locked": { - "lastModified": 1761230734, - "narHash": "sha256-CMRUwXH7pJZ1OI6bd/TDDDXKqQ1tQZHQEOOwK8TgYHI=", + "lastModified": 1767724329, + "narHash": "sha256-UPkqxqxbKwU5Dmu00TnjiJVXUmfVylF3p1qziEuYwIE=", "owner": "logos-co", "repo": "logos-cpp-sdk", - "rev": "4b143922c190df00bb3835441c9f0075cb28283b", + "rev": "32f1d7080d784ff044d91d076ef2f0c7305d4784", "type": "github" }, "original": { @@ -217,11 +235,11 @@ "nixpkgs": "nixpkgs_9" }, "locked": { - "lastModified": 1764699992, - "narHash": "sha256-nCmK9C9F31cHvy6lWKR5WGl99aJbS3kIsROAoZ4OrwI=", + "lastModified": 1761230734, + "narHash": "sha256-CMRUwXH7pJZ1OI6bd/TDDDXKqQ1tQZHQEOOwK8TgYHI=", "owner": "logos-co", "repo": "logos-cpp-sdk", - "rev": "5d0bbd0d1e00aad0532ffa7c8bf2c80f460a4f6d", + "rev": "4b143922c190df00bb3835441c9f0075cb28283b", "type": "github" }, "original": { @@ -253,11 +271,11 @@ "nixpkgs": "nixpkgs_11" }, "locked": { - "lastModified": 1761230734, - "narHash": "sha256-CMRUwXH7pJZ1OI6bd/TDDDXKqQ1tQZHQEOOwK8TgYHI=", + "lastModified": 1764699992, + "narHash": "sha256-nCmK9C9F31cHvy6lWKR5WGl99aJbS3kIsROAoZ4OrwI=", "owner": "logos-co", "repo": "logos-cpp-sdk", - "rev": "4b143922c190df00bb3835441c9f0075cb28283b", + "rev": "5d0bbd0d1e00aad0532ffa7c8bf2c80f460a4f6d", "type": "github" }, "original": { @@ -288,6 +306,7 @@ "inputs": { "logos-capability-module": "logos-capability-module", "logos-cpp-sdk": "logos-cpp-sdk_3", + "logos-module": "logos-module", "nixpkgs": [ "logos-liblogos", "logos-cpp-sdk", @@ -295,11 +314,11 @@ ] }, "locked": { - "lastModified": 1769640265, - "narHash": "sha256-hwnkxGxY2V0N1U6iNW02gY7mfcPSg+KG2plZv/rEf9k=", + "lastModified": 1770154824, + "narHash": "sha256-WGI+3FkPdeytfLJ3ZJYr1O8esUnQjcmMJEYwB/EBZMs=", "owner": "logos-co", "repo": "logos-liblogos", - "rev": "02dd00d6a000f3d45bcf0f36f849ff14da2e6d75", + "rev": "901dd86d47216b15b6f1260b7b6bb4ecd88a8f9d", "type": "github" }, "original": { @@ -335,7 +354,7 @@ }, "logos-liblogos_3": { "inputs": { - "logos-cpp-sdk": "logos-cpp-sdk_5", + "logos-cpp-sdk": "logos-cpp-sdk_6", "nixpkgs": [ "logos-module-viewer", "logos-capability-module", @@ -360,7 +379,7 @@ }, "logos-liblogos_4": { "inputs": { - "logos-cpp-sdk": "logos-cpp-sdk_7", + "logos-cpp-sdk": "logos-cpp-sdk_8", "nixpkgs": [ "logos-module-viewer", "logos-liblogos", @@ -384,7 +403,7 @@ }, "logos-liblogos_5": { "inputs": { - "logos-cpp-sdk": "logos-cpp-sdk_9", + "logos-cpp-sdk": "logos-cpp-sdk_10", "nixpkgs": [ "logos-module-viewer", "logos-package-manager", @@ -407,10 +426,34 @@ "type": "github" } }, + "logos-module": { + "inputs": { + "logos-cpp-sdk": "logos-cpp-sdk_4", + "nixpkgs": [ + "logos-liblogos", + "logos-module", + "logos-cpp-sdk", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1770062426, + "narHash": "sha256-zc7ZxDTlqOCYGyEHhrTA/7GS1EWh7+4amdPUKh+gGds=", + "owner": "logos-co", + "repo": "logos-module", + "rev": "f7ee69d9ad9f27c84f04f59896e9194125e951dc", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-module", + "type": "github" + } + }, "logos-module-viewer": { "inputs": { "logos-capability-module": "logos-capability-module_2", - "logos-cpp-sdk": "logos-cpp-sdk_6", + "logos-cpp-sdk": "logos-cpp-sdk_7", "logos-liblogos": "logos-liblogos_4", "logos-package-manager": "logos-package-manager", "nixpkgs": [ @@ -435,7 +478,7 @@ }, "logos-package-manager": { "inputs": { - "logos-cpp-sdk": "logos-cpp-sdk_8", + "logos-cpp-sdk": "logos-cpp-sdk_9", "logos-liblogos": "logos-liblogos_5", "nixpkgs": [ "logos-module-viewer", @@ -522,6 +565,22 @@ "type": "github" } }, + "nixpkgs_13": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, "nixpkgs_2": { "locked": { "lastModified": 1769461804, diff --git a/src/i_logos_blockchain_module.h b/src/i_logos_blockchain_module.h index 3c9d636..747e744 100644 --- a/src/i_logos_blockchain_module.h +++ b/src/i_logos_blockchain_module.h @@ -21,7 +21,6 @@ public: // Node virtual int start(const QString& config_path, const QString& deployment) = 0; virtual int stop() = 0; - virtual int subscribe() = 0; virtual int wallet_get_balance( const uint8_t* wallet_address, const HeaderId* optional_tip, diff --git a/src/logos_blockchain_module.cpp b/src/logos_blockchain_module.cpp index cfc54fe..b0a00a2 100644 --- a/src/logos_blockchain_module.cpp +++ b/src/logos_blockchain_module.cpp @@ -1,8 +1,5 @@ #include "logos_blockchain_module.h" -#include -#include - LogosBlockchainModule::LogosBlockchainModule() = default; LogosBlockchainModule::~LogosBlockchainModule() { @@ -60,6 +57,19 @@ int LogosBlockchainModule::start(const QString& config_path, const QString& depl node = value; qInfo() << "The node was started successfully."; + + // Subscribe to block events + if (!node) { + qWarning() << "Could not subcribe to block events: The node is not running."; + return 1; + } + + subscribe_to_new_blocks(node, [](const char* block) { + std::cout << "Received new block: " << block << std::endl; + auto* event = new BlockEvent(block); + QCoreApplication::postEvent(qApp, event); + }); + return 0; } @@ -80,17 +90,6 @@ int LogosBlockchainModule::stop() { return 0; } -int LogosBlockchainModule::subscribe() { - if (!node) { - qWarning() << "Could not execute the operation: The node is not running."; - return 1; - } - - subscribe_to_new_blocks(node, [](const char* block) { std::cout << "Received new block: " << block << std::endl; }); - - return 0; -} - int LogosBlockchainModule::wallet_get_balance( const uint8_t* wallet_address, const HeaderId* optional_tip, diff --git a/src/logos_blockchain_module.h b/src/logos_blockchain_module.h index 74d0229..dc3880c 100644 --- a/src/logos_blockchain_module.h +++ b/src/logos_blockchain_module.h @@ -1,7 +1,25 @@ #pragma once - +#include +#include +#include +#include +#include #include "i_logos_blockchain_module.h" +class BlockEvent : public QEvent { +public: + static const QEvent::Type BlockEventType = static_cast(QEvent::User + 111); + BlockEvent(const char* blockData) : QEvent(BlockEventType), block(blockData, &free_block) {} + ~BlockEvent() = default; + + std::shared_ptr block; +private: + static void free_block(const char* ptr) { + // SAFETY: Rust side expects a *mut char, so we can do the cast here. + if (ptr) free_cstring(const_cast(ptr)); + } +}; + class LogosBlockchainModule final : public QObject, public PluginInterface, public ILogosBlockchainModule { Q_OBJECT Q_PLUGIN_METADATA(IID ILogosBlockchainModule_iid FILE LOGOS_BLOCKCHAIN_MODULE_METADATA_FILE) @@ -19,7 +37,6 @@ public: // Logos Blockchain Q_INVOKABLE int start(const QString& config_path, const QString& deployment) override; Q_INVOKABLE int stop() override; - Q_INVOKABLE int subscribe() override; Q_INVOKABLE int wallet_get_balance(const uint8_t*, const HeaderId*, BalanceResult*) override; Q_INVOKABLE int wallet_transfer_funds(const TransferFundsArguments*, Hash*) override;