diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 0000000..18064c6 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,43 @@ +## ๐ŸŽฏ Purpose + +*What problem does this PR solve or what feature does it add? Mention issues related to it* + +TO COMPLETE + +## โš™๏ธ Approach + +*Describe the core changes introduced by this PR.* + +TO COMPLETE + +- [ ] Change ... +- [ ] Add ... +- [ ] Fix ... +- [ ] ... + +## ๐Ÿงช How to Test + +*How to verify that this PR works as intended.* + +TO COMPLETE + +## ๐Ÿ”— Dependencies + +*Link PRs that must be merged before this one.* + +TO COMPLETE IF APPLICABLE + +## ๐Ÿ”œ Future Work + +*List any work intentionally left out of this PR, whether due to scope, prioritization, or pending decisions.* + +TO COMPLETE IF APPLICABLE + +## ๐Ÿ“‹ PR Completion Checklist + +*Mark only completed items. A complete PR should have all boxes ticked.* + +- [ ] Complete PR description +- [ ] Implement the core functionality +- [ ] Add/update tests +- [ ] Add/update documentation and inline comments diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..8236f4b --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,205 @@ +cmake_minimum_required(VERSION 3.20) +project(logos_execution_zone_indexer_module LANGUAGES CXX) + +set(CMAKE_CXX_STANDARD 20) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +# ---- Options ---- +option(LOGOS_MODULE_BUNDLE "Create local runtime bundle in target/." ON) +set(LOGOS_CORE_ROOT "" CACHE PATH "Path to logos-core root directory.") +set(LOGOS_EXECUTION_ZONE_INDEXER_ROOT "" CACHE PATH "Path to logos-execution-zone-indexer source root.") +set(LOGOS_EXECUTION_ZONE_INDEXER_LIB "" CACHE PATH "Path to prebuilt logos-execution-zone-indexer lib.") +set(LOGOS_EXECUTION_ZONE_INDEXER_INCLUDE "" CACHE PATH "Path to prebuilt logos-execution-zone-indexer include.") + +set(HAS_LOGOS_CORE_ROOT FALSE) +set(HAS_LOGOS_EXECUTION_ZONE_INDEXER_ROOT FALSE) +set(HAS_LOGOS_EXECUTION_ZONE_INDEXER_LIB FALSE) +set(HAS_LOGOS_EXECUTION_ZONE_INDEXER_INCLUDE FALSE) + +if (DEFINED LOGOS_CORE_ROOT AND NOT "${LOGOS_CORE_ROOT}" STREQUAL "") + set(HAS_LOGOS_CORE_ROOT TRUE) +endif() + +if (DEFINED LOGOS_EXECUTION_ZONE_INDEXER_ROOT AND NOT "${LOGOS_EXECUTION_ZONE_INDEXER_ROOT}" STREQUAL "") + set(HAS_LOGOS_EXECUTION_ZONE_INDEXER_ROOT TRUE) +endif() + +if(DEFINED LOGOS_EXECUTION_ZONE_INDEXER_LIB AND NOT "${LOGOS_EXECUTION_ZONE_INDEXER_LIB}" STREQUAL "") + set(HAS_LOGOS_EXECUTION_ZONE_INDEXER_LIB TRUE) +endif() + +if(DEFINED LOGOS_EXECUTION_ZONE_INDEXER_INCLUDE AND NOT "${LOGOS_EXECUTION_ZONE_INDEXER_INCLUDE}" STREQUAL "") + set(HAS_LOGOS_EXECUTION_ZONE_INDEXER_INCLUDE TRUE) +endif() + +if (NOT HAS_LOGOS_CORE_ROOT) + message(FATAL_ERROR "LOGOS_CORE_ROOT must be set to the logos-core root directory.") +endif() + +if(HAS_LOGOS_EXECUTION_ZONE_INDEXER_LIB AND HAS_LOGOS_EXECUTION_ZONE_INDEXER_INCLUDE AND NOT HAS_LOGOS_EXECUTION_ZONE_INDEXER_ROOT) + message(STATUS "Using prebuilt logos-execution-zone-indexer.") + set(LOGOS_EXECUTION_ZONE_PREBUILT TRUE) +elseif(NOT HAS_LOGOS_EXECUTION_ZONE_INDEXER_LIB AND NOT HAS_LOGOS_EXECUTION_ZONE_INDEXER_INCLUDE AND HAS_LOGOS_EXECUTION_ZONE_INDEXER_ROOT) + message(STATUS "Building logos-execution-zone-indexer from source.") + set(LOGOS_EXECUTION_ZONE_PREBUILT FALSE) +else() + message(FATAL_ERROR "Either both LOGOS_EXECUTION_ZONE_INDEXER_LIB and LOGOS_EXECUTION_ZONE_INDEXER_INCLUDE must be set for prebuilt logos-execution-zone-indexer, or LOGOS_EXECUTION_ZONE_INDEXER_ROOT must be set to build from source.") +endif() + +# ---- Qt ---- +find_package(Qt6 REQUIRED COMPONENTS Core RemoteObjects) +set(CMAKE_AUTOMOC ON) +set(CMAKE_AUTOUIC ON) +set(CMAKE_AUTORCC ON) + +# ---- Directories ---- +set(WORKSPACE_ROOT "${CMAKE_BINARY_DIR}/workspace") +file(MAKE_DIRECTORY "${WORKSPACE_ROOT}") + +# ---- Logos Core SDK ---- +set(SDK_LIB "${LOGOS_CORE_ROOT}/lib/liblogos_sdk.a") +set(SDK_INC "${LOGOS_CORE_ROOT}/include") + +# ---- OS Specifics ---- +if(APPLE) + set(DYLIB_EXT ".dylib") +elseif(WIN32) + set(DYLIB_EXT ".dll") + set(IMPLIB_EXT ".lib") +else() + set(DYLIB_EXT ".so") +endif() + +# NOTE (Windows): +# Rust cdylib typically produces: +# - logos_blockchain.dll (runtime) +# - logos_blockchain.lib (import lib) +# The Windows build hasn't been yet, so adjust accordingly if the DLL is named without the 'lib' prefix. + +# ---- Logos Blockchain (build OR consume) ---- +if(LOGOS_EXECUTION_ZONE_PREBUILT) + set(LOGOS_EXECUTION_ZONE_DYLIB "${LOGOS_EXECUTION_ZONE_INDEXER_LIB}/libindexer_ffi${DYLIB_EXT}") + + if(WIN32) + set(LOGOS_EXECUTION_ZONE_IMPLIB "${LOGOS_EXECUTION_ZONE_INDEXER_LIB}/indexer_ffi${IMPLIB_EXT}") + endif() + + add_custom_target(logos_execution_zone_libs) + +else() + find_program(CARGO_EXECUTABLE cargo REQUIRED) + + set(CARGO_TARGET_DIR "${WORKSPACE_ROOT}/logos-execution-zone/target") + set(INTERNAL_STAGE "${WORKSPACE_ROOT}/stage") + set(INTERNAL_STAGE_LIB "${INTERNAL_STAGE}/lib") + set(INTERNAL_STAGE_INCLUDE "${INTERNAL_STAGE}/include") + file(MAKE_DIRECTORY "${CARGO_TARGET_DIR}" "${INTERNAL_STAGE_LIB}" "${INTERNAL_STAGE_INCLUDE}") + + set(LOGOS_EXECUTION_ZONE_INDEXER_LIB "${INTERNAL_STAGE_LIB}") + set(LOGOS_EXECUTION_ZONE_INDEXER_INCLUDE "${INTERNAL_STAGE_INCLUDE}") + + set(LOGOS_EXECUTION_ZONE_DYLIB "${INTERNAL_STAGE_LIB}/libindexer_ffi${DYLIB_EXT}") + set(LOGOS_EXECUTION_ZONE_HEADER "${INTERNAL_STAGE_INCLUDE}/indexer_ffi.h") + + add_custom_command( + OUTPUT "${LOGOS_EXECUTION_ZONE_DYLIB}" + COMMAND ${CMAKE_COMMAND} -E env + CARGO_TARGET_DIR=${CARGO_TARGET_DIR} + ${CARGO_EXECUTABLE} build --release + --package indexer-ffi + --manifest-path "${LOGOS_EXECUTION_ZONE_INDEXER_ROOT}/Cargo.toml" + COMMAND ${CMAKE_COMMAND} -E copy + "${CARGO_TARGET_DIR}/release/libindexer_ffi${DYLIB_EXT}" + "${LOGOS_EXECUTION_ZONE_DYLIB}" + DEPENDS "${LOGOS_EXECUTION_ZONE_INDEXER_ROOT}/Cargo.toml" + VERBATIM + ) + + add_custom_command( + OUTPUT "${LOGOS_EXECUTION_ZONE_HEADER}" + COMMAND ${CMAKE_COMMAND} -E copy_if_different + "${LOGOS_EXECUTION_ZONE_INDEXER_ROOT}/indexer-ffi/indexer_ffi.h" + "${LOGOS_EXECUTION_ZONE_HEADER}" + DEPENDS "${LOGOS_EXECUTION_ZONE_DYLIB}" + VERBATIM + ) + + add_custom_target(logos_execution_zone_libs DEPENDS "${LOGOS_EXECUTION_ZONE_DYLIB}" "${LOGOS_EXECUTION_ZONE_HEADER}") +endif() + +# ---- Imported targets ---- +add_library(logos_execution_zone_indexer SHARED IMPORTED GLOBAL) +set_target_properties(logos_execution_zone_indexer PROPERTIES + IMPORTED_LOCATION "${LOGOS_EXECUTION_ZONE_DYLIB}" + INTERFACE_INCLUDE_DIRECTORIES "${LOGOS_EXECUTION_ZONE_INDEXER_INCLUDE}" +) + +if(NOT LOGOS_EXECUTION_ZONE_PREBUILT) + add_dependencies(logos_execution_zone_indexer logos_execution_zone_libs) +endif() + +if(WIN32) + set_target_properties(logos_execution_zone_indexer PROPERTIES IMPORTED_IMPLIB "${LOGOS_EXECUTION_ZONE_IMPLIB}") +endif() + +add_library(logos_core STATIC IMPORTED + src/i_logos_execution_zone_indexer_module.h) +set_target_properties(logos_core PROPERTIES + IMPORTED_LOCATION "${SDK_LIB}" +) + +add_library(logos_cpp_sdk INTERFACE) +target_include_directories(logos_cpp_sdk INTERFACE "${SDK_INC}") + +# ---- Plugin ---- +set(PLUGIN_TARGET logos_execution_zone_indexer_module) + +qt_add_plugin(${PLUGIN_TARGET} CLASS_NAME LogosExecutionZoneIndexerModule) + +target_sources(${PLUGIN_TARGET} PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR}/src/logos_execution_zone_indexer_module.cpp +) + +set_property(TARGET ${PLUGIN_TARGET} PROPERTY PUBLIC_HEADER + ${CMAKE_CURRENT_SOURCE_DIR}/src/i_logos_execution_zone_indexer_module.h +) + +target_include_directories(${PLUGIN_TARGET} PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR}/src +) + +target_link_libraries(${PLUGIN_TARGET} PRIVATE + Qt6::Core + Qt6::RemoteObjects + logos_execution_zone_indexer + logos_cpp_sdk + logos_core +) + +target_compile_definitions(${PLUGIN_TARGET} PRIVATE + LOGOS_EXECUTION_ZONE_INDEXER_MODULE_METADATA_FILE="${CMAKE_CURRENT_SOURCE_DIR}/metadata.json" +) + +add_dependencies(${PLUGIN_TARGET} logos_execution_zone_libs) + +if(APPLE) + set_target_properties(${PLUGIN_TARGET} PROPERTIES + BUILD_RPATH "@loader_path" + INSTALL_RPATH "@loader_path" + ) +elseif(UNIX) + set_target_properties(${PLUGIN_TARGET} PROPERTIES + BUILD_RPATH "$ORIGIN" + INSTALL_RPATH "$ORIGIN" + ) +endif() + +# ---- Install ---- +install(TARGETS ${PLUGIN_TARGET} + LIBRARY DESTINATION lib + ARCHIVE DESTINATION lib + RUNTIME DESTINATION bin + PUBLIC_HEADER DESTINATION include +) +install(DIRECTORY "${LOGOS_EXECUTION_ZONE_INDEXER_INCLUDE}/" DESTINATION include) +install(FILES "${LOGOS_EXECUTION_ZONE_DYLIB}" DESTINATION lib) diff --git a/README .md b/README.md similarity index 100% rename from README .md rename to README.md diff --git a/config/indexer_config.json b/config/indexer_config.json new file mode 100644 index 0000000..e4dd8f9 --- /dev/null +++ b/config/indexer_config.json @@ -0,0 +1,160 @@ +{ + "home": ".", + "consensus_info_polling_interval": "1s", + "bedrock_client_config": { + "addr": "http://localhost:8080", + "backoff": { + "start_delay": "100ms", + "max_retries": 5 + } + }, + "channel_id": "0101010101010101010101010101010101010101010101010101010101010101", + "initial_accounts": [ + { + "account_id": "CbgR6tj5kWx5oziiFptM7jMvrQeYY3Mzaao6ciuhSr2r", + "balance": 10000 + }, + { + "account_id": "2RHZhw9h534Zr3eq2RGhQete2Hh667foECzXPmSkGni2", + "balance": 20000 + } + ], + "initial_commitments": [ + { + "npk": [ + 139, + 19, + 158, + 11, + 155, + 231, + 85, + 206, + 132, + 228, + 220, + 114, + 145, + 89, + 113, + 156, + 238, + 142, + 242, + 74, + 182, + 91, + 43, + 100, + 6, + 190, + 31, + 15, + 31, + 88, + 96, + 204 + ], + "account": { + "program_owner": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "balance": 10000, + "data": [], + "nonce": 0 + } + }, + { + "npk": [ + 173, + 134, + 33, + 223, + 54, + 226, + 10, + 71, + 215, + 254, + 143, + 172, + 24, + 244, + 243, + 208, + 65, + 112, + 118, + 70, + 217, + 240, + 69, + 100, + 129, + 3, + 121, + 25, + 213, + 132, + 42, + 45 + ], + "account": { + "program_owner": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "balance": 20000, + "data": [], + "nonce": 0 + } + } + ], + "signing_key": [ + 37, + 37, + 37, + 37, + 37, + 37, + 37, + 37, + 37, + 37, + 37, + 37, + 37, + 37, + 37, + 37, + 37, + 37, + 37, + 37, + 37, + 37, + 37, + 37, + 37, + 37, + 37, + 37, + 37, + 37, + 37, + 37 + ] +} \ No newline at end of file diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..aff8d15 --- /dev/null +++ b/flake.lock @@ -0,0 +1,1558 @@ +{ + "nodes": { + "crane": { + "locked": { + "lastModified": 1776396856, + "narHash": "sha256-aRJpIJUlZLaf06ekPvqjuU46zvO9K90IxJGpbqodkPs=", + "owner": "ipetkov", + "repo": "crane", + "rev": "28462d6d55c33206ffa5a56c7907ca3125ed788f", + "type": "github" + }, + "original": { + "owner": "ipetkov", + "repo": "crane", + "type": "github" + } + }, + "logos-blockchain-circuits": { + "inputs": { + "nixpkgs": "nixpkgs_2" + }, + "locked": { + "lastModified": 1775835011, + "narHash": "sha256-SQDLyyRUa5J9QHjNiHbeZw4rQOZnTEo61TcaUpjtLBs=", + "owner": "logos-blockchain", + "repo": "logos-blockchain-circuits", + "rev": "d6cf41f66500d4afc157b4f43de0f0d5bfa01443", + "type": "github" + }, + "original": { + "owner": "logos-blockchain", + "repo": "logos-blockchain-circuits", + "type": "github" + } + }, + "logos-capability-module": { + "inputs": { + "logos-cpp-sdk": "logos-cpp-sdk", + "logos-module": "logos-module", + "logos-nix": "logos-nix_4", + "nixpkgs": [ + "logos-liblogos", + "logos-capability-module", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455138, + "narHash": "sha256-szx2dnnY9MP1NpdBnR8E2DRSz9CtQlo/6698zgJcAEM=", + "owner": "logos-co", + "repo": "logos-capability-module", + "rev": "0655be68e0078bede0682bb6a5b53330dac37a72", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-capability-module", + "type": "github" + } + }, + "logos-capability-module_2": { + "inputs": { + "logos-cpp-sdk": "logos-cpp-sdk_3", + "logos-liblogos": "logos-liblogos_2", + "nixpkgs": [ + "logos-module-viewer", + "logos-capability-module", + "logos-liblogos", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1767809111, + "narHash": "sha256-jehjsB+BpDJlVu3I7x+vFVOdXmy9MDmFTJtRqzFUONo=", + "owner": "logos-co", + "repo": "logos-capability-module", + "rev": "7b35383e0aa4e28a4633ed18a87efb57636939b1", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-capability-module", + "type": "github" + } + }, + "logos-capability-module_3": { + "inputs": { + "logos-cpp-sdk": "logos-cpp-sdk_6", + "logos-liblogos": "logos-liblogos_4", + "nixpkgs": [ + "logos-module-viewer", + "logos-liblogos", + "logos-capability-module", + "logos-liblogos", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1773696504, + "narHash": "sha256-wBn8onAkEvtvl1McLVyFDSB8BRhUrwJAnnYIfXnIhdI=", + "owner": "logos-co", + "repo": "logos-capability-module", + "rev": "2ee07fea9d0b9aca89dc215ee8b3be222017d706", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-capability-module", + "type": "github" + } + }, + "logos-core": { + "inputs": { + "logos-nix": "logos-nix", + "nixpkgs": [ + "logos-core", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1776359718, + "narHash": "sha256-G2+MbYPictF9V9864KndteaEJzd8iUMktSzCphETabw=", + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "rev": "04b75c84b821662c9ae8f69967d4dd508e6d9e17", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "type": "github" + } + }, + "logos-cpp-sdk": { + "inputs": { + "logos-nix": "logos-nix_2", + "nixpkgs": [ + "logos-liblogos", + "logos-capability-module", + "logos-cpp-sdk", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1773956385, + "narHash": "sha256-CV0Lo1FrosBt/MSP+GWQGWXnYobxRGXGOREylNuwZ58=", + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "rev": "4b66dac015e4b977d33cfae80a4c8e1d518679f3", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "type": "github" + } + }, + "logos-cpp-sdk_10": { + "inputs": { + "nixpkgs": "nixpkgs_25" + }, + "locked": { + "lastModified": 1767724329, + "narHash": "sha256-UPkqxqxbKwU5Dmu00TnjiJVXUmfVylF3p1qziEuYwIE=", + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "rev": "32f1d7080d784ff044d91d076ef2f0c7305d4784", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "type": "github" + } + }, + "logos-cpp-sdk_11": { + "inputs": { + "nixpkgs": "nixpkgs_26" + }, + "locked": { + "lastModified": 1764699992, + "narHash": "sha256-nCmK9C9F31cHvy6lWKR5WGl99aJbS3kIsROAoZ4OrwI=", + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "rev": "5d0bbd0d1e00aad0532ffa7c8bf2c80f460a4f6d", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "type": "github" + } + }, + "logos-cpp-sdk_2": { + "inputs": { + "logos-nix": "logos-nix_5", + "nixpkgs": [ + "logos-liblogos", + "logos-cpp-sdk", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1776359718, + "narHash": "sha256-G2+MbYPictF9V9864KndteaEJzd8iUMktSzCphETabw=", + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "rev": "04b75c84b821662c9ae8f69967d4dd508e6d9e17", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "type": "github" + } + }, + "logos-cpp-sdk_3": { + "inputs": { + "nixpkgs": "nixpkgs_16" + }, + "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_4": { + "inputs": { + "nixpkgs": "nixpkgs_17" + }, + "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_5": { + "inputs": { + "nixpkgs": "nixpkgs_18" + }, + "locked": { + "lastModified": 1773672219, + "narHash": "sha256-p+kv2WHokT40rScnSFSIDp/EeFLaDUsTHW6QT6ejKuc=", + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "rev": "a4bd66cd6eb04ee7140bb940b1d49d72d60248de", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "type": "github" + } + }, + "logos-cpp-sdk_6": { + "inputs": { + "nixpkgs": "nixpkgs_19" + }, + "locked": { + "lastModified": 1773672219, + "narHash": "sha256-p+kv2WHokT40rScnSFSIDp/EeFLaDUsTHW6QT6ejKuc=", + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "rev": "a4bd66cd6eb04ee7140bb940b1d49d72d60248de", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "type": "github" + } + }, + "logos-cpp-sdk_7": { + "inputs": { + "nixpkgs": "nixpkgs_20" + }, + "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_8": { + "inputs": { + "nixpkgs": "nixpkgs_21" + }, + "locked": { + "lastModified": 1773672219, + "narHash": "sha256-p+kv2WHokT40rScnSFSIDp/EeFLaDUsTHW6QT6ejKuc=", + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "rev": "a4bd66cd6eb04ee7140bb940b1d49d72d60248de", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "type": "github" + } + }, + "logos-cpp-sdk_9": { + "inputs": { + "nixpkgs": "nixpkgs_22" + }, + "locked": { + "lastModified": 1767724329, + "narHash": "sha256-UPkqxqxbKwU5Dmu00TnjiJVXUmfVylF3p1qziEuYwIE=", + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "rev": "32f1d7080d784ff044d91d076ef2f0c7305d4784", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "type": "github" + } + }, + "logos-execution-zone": { + "inputs": { + "crane": "crane", + "logos-blockchain-circuits": "logos-blockchain-circuits", + "nixpkgs": "nixpkgs_3", + "rust-overlay": "rust-overlay" + }, + "locked": { + "lastModified": 1776425888, + "narHash": "sha256-dSlwITeyD2toCh4Ue33O54A0bPb4E1CTd/oDQAbLpv0=", + "owner": "logos-blockchain", + "repo": "logos-execution-zone", + "rev": "57831443e2dbb7150fa8a17f438a38dc05986d9e", + "type": "github" + }, + "original": { + "owner": "logos-blockchain", + "ref": "Pravdyvy/indexer-ffi-spawns-rpc-for-communication", + "repo": "logos-execution-zone", + "type": "github" + } + }, + "logos-liblogos": { + "inputs": { + "logos-capability-module": "logos-capability-module", + "logos-cpp-sdk": "logos-cpp-sdk_2", + "logos-module": "logos-module_2", + "logos-nix": "logos-nix_7", + "logos-package-manager": "logos-package-manager", + "nixpkgs": [ + "logos-liblogos", + "logos-nix", + "nixpkgs" + ], + "process-stats": "process-stats" + }, + "locked": { + "lastModified": 1776379599, + "narHash": "sha256-F2udDQNt9LMsvVTJ+lEh7kFGWI1WYe1xUcReJAakdLY=", + "owner": "logos-co", + "repo": "logos-liblogos", + "rev": "e96b05b657a7871be85842e559c2635eef5c31a1", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-liblogos", + "type": "github" + } + }, + "logos-liblogos_2": { + "inputs": { + "logos-cpp-sdk": "logos-cpp-sdk_4", + "nixpkgs": [ + "logos-module-viewer", + "logos-capability-module", + "logos-liblogos", + "logos-cpp-sdk", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1761845775, + "narHash": "sha256-ulK8xq05ejK6qIgZ7WtWb/MJt2rk5BKfDA2z7mM3wq8=", + "owner": "logos-co", + "repo": "logos-liblogos", + "rev": "a92c2c1268bc70764c8f73c7bce07d21024f5af9", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-liblogos", + "type": "github" + } + }, + "logos-liblogos_3": { + "inputs": { + "logos-capability-module": "logos-capability-module_3", + "logos-cpp-sdk": "logos-cpp-sdk_8", + "logos-module": "logos-module_3", + "nix-bundle-appimage": "nix-bundle-appimage_2", + "nix-bundle-dir": "nix-bundle-dir_4", + "nixpkgs": [ + "logos-module-viewer", + "logos-liblogos", + "logos-cpp-sdk", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1773696645, + "narHash": "sha256-GIb4xALCj3XK80rf6l89ZrZ/Y1YkqG1X/mfmVOUl/hw=", + "owner": "logos-co", + "repo": "logos-liblogos", + "rev": "5030aaaf86b89a382f3beb9426be4f8c2623215f", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-liblogos", + "type": "github" + } + }, + "logos-liblogos_4": { + "inputs": { + "logos-cpp-sdk": "logos-cpp-sdk_7", + "nixpkgs": [ + "logos-module-viewer", + "logos-liblogos", + "logos-capability-module", + "logos-liblogos", + "logos-cpp-sdk", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1761845775, + "narHash": "sha256-ulK8xq05ejK6qIgZ7WtWb/MJt2rk5BKfDA2z7mM3wq8=", + "owner": "logos-co", + "repo": "logos-liblogos", + "rev": "a92c2c1268bc70764c8f73c7bce07d21024f5af9", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-liblogos", + "type": "github" + } + }, + "logos-liblogos_5": { + "inputs": { + "logos-cpp-sdk": "logos-cpp-sdk_11", + "nixpkgs": [ + "logos-module-viewer", + "logos-package-manager", + "logos-liblogos", + "logos-cpp-sdk", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1768343028, + "narHash": "sha256-4LvsuZTDTlLtfMF4C69ls+lmkYJWD7LZitS04Mc+8UI=", + "owner": "logos-co", + "repo": "logos-liblogos", + "rev": "a76d33f5519af0ee12317c8f149eee2ac5d292a0", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-liblogos", + "type": "github" + } + }, + "logos-module": { + "inputs": { + "logos-nix": "logos-nix_3", + "nixpkgs": [ + "logos-liblogos", + "logos-capability-module", + "logos-module", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1773963329, + "narHash": "sha256-zdvDHoYWQDse0eJ/UCKIJcfuYJ8NMgl6QfxRcyDEovI=", + "owner": "logos-co", + "repo": "logos-module", + "rev": "ac5a4f06ea94b01dd9c5fbb9ed4f20620beab88d", + "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_5", + "logos-liblogos": "logos-liblogos_3", + "logos-package-manager": "logos-package-manager_2", + "nixpkgs": [ + "logos-module-viewer", + "logos-liblogos", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455291, + "narHash": "sha256-4O07OAO+5Pqcfdjdk4amYwx27Di3eKRg9y/NiDy3+b4=", + "owner": "logos-co", + "repo": "logos-module-viewer", + "rev": "b6489c1aab8c1590fa127dbaedb39708f3614fbc", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-module-viewer", + "type": "github" + } + }, + "logos-module_2": { + "inputs": { + "logos-nix": "logos-nix_6", + "nixpkgs": [ + "logos-liblogos", + "logos-module", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1776369033, + "narHash": "sha256-ehePoUEd/u3Ng0TvCmjocXYJWWH6P61PA7tNpgV59lo=", + "owner": "logos-co", + "repo": "logos-module", + "rev": "194778491ef4dd36967ac40cc2fec6b8a8b1d660", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-module", + "type": "github" + } + }, + "logos-module_3": { + "inputs": { + "logos-cpp-sdk": "logos-cpp-sdk_9", + "nixpkgs": [ + "logos-module-viewer", + "logos-liblogos", + "logos-module", + "logos-cpp-sdk", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1770999556, + "narHash": "sha256-anpsEniGTTwUAwknRxjaT9GP4avHzIsolEHdHDTV9rM=", + "owner": "logos-co", + "repo": "logos-module", + "rev": "d1b35f335f938bb5de21a2a6010f1104075bdb1c", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-module", + "type": "github" + } + }, + "logos-nix": { + "inputs": { + "nixpkgs": "nixpkgs" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_10": { + "inputs": { + "nixpkgs": "nixpkgs_12" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_11": { + "inputs": { + "nixpkgs": "nixpkgs_13" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_12": { + "inputs": { + "nixpkgs": "nixpkgs_14" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_13": { + "inputs": { + "nixpkgs": "nixpkgs_15" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_2": { + "inputs": { + "nixpkgs": "nixpkgs_4" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_3": { + "inputs": { + "nixpkgs": "nixpkgs_5" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_4": { + "inputs": { + "nixpkgs": "nixpkgs_6" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_5": { + "inputs": { + "nixpkgs": "nixpkgs_7" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_6": { + "inputs": { + "nixpkgs": "nixpkgs_8" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_7": { + "inputs": { + "nixpkgs": "nixpkgs_9" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_8": { + "inputs": { + "nixpkgs": "nixpkgs_10" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_9": { + "inputs": { + "nixpkgs": "nixpkgs_11" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-package": { + "inputs": { + "logos-nix": "logos-nix_9", + "nixpkgs": [ + "logos-liblogos", + "logos-package-manager", + "logos-package", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775835037, + "narHash": "sha256-Cti0DhkzyLQs98BSzcHWMLtGXpa3n+R+5upfSw6vKdQ=", + "owner": "logos-co", + "repo": "logos-package", + "rev": "ff93a0df15ceab255f27687d22d962ea2737efbe", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package", + "type": "github" + } + }, + "logos-package-manager": { + "inputs": { + "logos-nix": "logos-nix_8", + "logos-package": "logos-package", + "nix-bundle-appimage": "nix-bundle-appimage", + "nix-bundle-dir": "nix-bundle-dir_2", + "nixpkgs": [ + "logos-liblogos", + "logos-package-manager", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1776374462, + "narHash": "sha256-HMkuqSLdScAWTwXEWjhqx9Yk82GiPzPIfRaHTvjG730=", + "owner": "logos-co", + "repo": "logos-package-manager", + "rev": "9101875bc103214855bc6217834e22e66802ed86", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package-manager", + "type": "github" + } + }, + "logos-package-manager_2": { + "inputs": { + "logos-cpp-sdk": "logos-cpp-sdk_10", + "logos-liblogos": "logos-liblogos_5", + "logos-package": "logos-package_2", + "nixpkgs": [ + "logos-module-viewer", + "logos-package-manager", + "logos-liblogos", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1770753928, + "narHash": "sha256-61+3D+svB2mqyLpDFlHoIN+hBlbRGZUaueKysEiorNE=", + "owner": "logos-co", + "repo": "logos-package-manager-module", + "rev": "0cbf250ad2fec20c79dc5f61729a07c3a2bd50e1", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package-manager-module", + "type": "github" + } + }, + "logos-package_2": { + "inputs": { + "nixpkgs": "nixpkgs_27" + }, + "locked": { + "lastModified": 1768925546, + "narHash": "sha256-Y4sgYs9wtZ9sHAuKl9LUy//ReeF4/AyK8HlnZsYrSqg=", + "owner": "logos-co", + "repo": "logos-package", + "rev": "9230ae37c9d289c0c355dcf9fa40fd3be2e99f17", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package", + "type": "github" + } + }, + "nix-bundle-appimage": { + "inputs": { + "logos-nix": "logos-nix_10", + "nix-bundle-dir": "nix-bundle-dir", + "nixpkgs": [ + "logos-liblogos", + "logos-package-manager", + "nix-bundle-appimage", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455478, + "narHash": "sha256-S8IMfdDc+2Wwri0krLDsIUwSqmwanmvHAJWHOFo8ykk=", + "owner": "logos-co", + "repo": "nix-bundle-appimage", + "rev": "2428125a4a1b34ad9119efa97edb98676283e3da", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-appimage", + "type": "github" + } + }, + "nix-bundle-appimage_2": { + "inputs": { + "nix-bundle-dir": "nix-bundle-dir_3", + "nixpkgs": "nixpkgs_23" + }, + "locked": { + "lastModified": 1772047346, + "narHash": "sha256-RUsTUxKCxuQ3+D2LfBbK0EX1vF7HNMkpWgOGFfZbrEg=", + "owner": "logos-co", + "repo": "nix-bundle-appimage", + "rev": "4d68437c97ac59c3c70c1b2b116235c434d571a8", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-appimage", + "type": "github" + } + }, + "nix-bundle-dir": { + "inputs": { + "logos-nix": "logos-nix_11", + "nixpkgs": [ + "logos-liblogos", + "logos-package-manager", + "nix-bundle-appimage", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1773961179, + "narHash": "sha256-bpaTvz//R8WFP5xnnDLv3a9l7unDmBwJjCewx3wCjzM=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "cd214dbf15487d80967389847ae2210468be6ebf", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_2": { + "inputs": { + "logos-nix": "logos-nix_12", + "nixpkgs": [ + "logos-liblogos", + "logos-package-manager", + "nix-bundle-dir", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455641, + "narHash": "sha256-HrVJguPxhIoZMCH+x8Wooa0tE6slUhgNOU6P89t2uQc=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "3d155cab09051703a0b02ff2de166a53c30cbca8", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_3": { + "inputs": { + "nixpkgs": [ + "logos-module-viewer", + "logos-liblogos", + "nix-bundle-appimage", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1771971384, + "narHash": "sha256-fq0H+sxQhkGN054jdN+ZfHZibbOjHA+KD5SpRH78T1g=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "1ecb9662145a1ad84007a970b4bef50a4af159c9", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_4": { + "inputs": { + "nixpkgs": "nixpkgs_24" + }, + "locked": { + "lastModified": 1771971384, + "narHash": "sha256-fq0H+sxQhkGN054jdN+ZfHZibbOjHA+KD5SpRH78T1g=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "1ecb9662145a1ad84007a970b4bef50a4af159c9", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nixpkgs": { + "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_10": { + "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_11": { + "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_12": { + "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_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_14": { + "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_15": { + "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_16": { + "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_17": { + "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_18": { + "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_19": { + "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, + "narHash": "sha256-msG8SU5WsBUfVVa/9RPLaymvi5bI8edTavbIq3vRlhI=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "bfc1b8a4574108ceef22f02bafcf6611380c100d", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_20": { + "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_21": { + "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_22": { + "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_23": { + "locked": { + "lastModified": 1771848320, + "narHash": "sha256-0MAd+0mun3K/Ns8JATeHT1sX28faLII5hVLq0L3BdZU=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "2fc6539b481e1d2569f25f8799236694180c0993", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_24": { + "locked": { + "lastModified": 1770562336, + "narHash": "sha256-ub1gpAONMFsT/GU2hV6ZWJjur8rJ6kKxdm9IlCT0j84=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "d6c71932130818840fc8fe9509cf50be8c64634f", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_25": { + "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_26": { + "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_27": { + "locked": { + "lastModified": 1768127708, + "narHash": "sha256-1Sm77VfZh3mU0F5OqKABNLWxOuDeHIlcFjsXeeiPazs=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "ffbc9f8cbaacfb331b6017d5a5abb21a492c9a38", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_3": { + "locked": { + "lastModified": 1776169885, + "narHash": "sha256-l/iNYDZ4bGOAFQY2q8y5OAfBBtrDAaPuRQqWaFHVRXM=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "4bd9165a9165d7b5e33ae57f3eecbcb28fb231c9", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_4": { + "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_5": { + "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_6": { + "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_7": { + "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_8": { + "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_9": { + "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" + } + }, + "process-stats": { + "inputs": { + "logos-nix": "logos-nix_13", + "nixpkgs": [ + "logos-liblogos", + "process-stats", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775744159, + "narHash": "sha256-hTVAnDREBQOVHML6KU3K7Ge0CRBqnFIg7uYL7qDnD8o=", + "owner": "logos-co", + "repo": "process-stats", + "rev": "33ace1270f90c89b3565e803139c0970fcd1ce8f", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "process-stats", + "type": "github" + } + }, + "root": { + "inputs": { + "logos-core": "logos-core", + "logos-execution-zone": "logos-execution-zone", + "logos-liblogos": "logos-liblogos", + "logos-module-viewer": "logos-module-viewer", + "nixpkgs": [ + "logos-liblogos", + "nixpkgs" + ] + } + }, + "rust-overlay": { + "inputs": { + "nixpkgs": [ + "logos-execution-zone", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1776395632, + "narHash": "sha256-Mi1uF5f2FsdBIvy+v7MtsqxD3Xjhd0ARJdwoqqqPtJo=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "8087ff1f47fff983a1fba70fa88b759f2fd8ae97", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..86e21b7 --- /dev/null +++ b/flake.nix @@ -0,0 +1,149 @@ +{ + description = "Logos Blockchain Module - Qt6 Plugin"; + + inputs = { + nixpkgs.follows = "logos-liblogos/nixpkgs"; + + logos-liblogos.url = "github:logos-co/logos-liblogos"; + logos-core.url = "github:logos-co/logos-cpp-sdk"; + + logos-execution-zone.url = "github:logos-blockchain/logos-execution-zone?ref=Pravdyvy/indexer-ffi-spawns-rpc-for-communication"; + + logos-module-viewer.url = "github:logos-co/logos-module-viewer"; + }; + + outputs = + { + self, + nixpkgs, + logos-core, + logos-execution-zone, + logos-module-viewer, + ... + }: + let + lib = nixpkgs.lib; + + systems = [ + "x86_64-linux" + "aarch64-linux" + "aarch64-darwin" + "x86_64-windows" + ]; + + forAll = lib.genAttrs systems; + + mkPkgs = system: import nixpkgs { inherit system; }; + in + { + packages = forAll ( + system: + let + pkgs = mkPkgs system; + llvmPkgs = pkgs.llvmPackages; + + logosCore = logos-core.packages.${system}.default; + logosExecutionZoneIndexerPackage = logos-execution-zone.packages.${system}.indexer; + + logosExecutionZoneIndexerModulePackage = pkgs.stdenv.mkDerivation { + pname = "logos-execution-zone-module"; + version = "dev"; + src = ./.; + + nativeBuildInputs = [ + pkgs.cmake + pkgs.ninja + pkgs.pkg-config + pkgs.qt6.wrapQtAppsHook + ]; + + buildInputs = [ + pkgs.qt6.qtbase + pkgs.qt6.qtremoteobjects + pkgs.qt6.qttools + llvmPkgs.clang + llvmPkgs.libclang + logosExecutionZoneIndexerPackage + ] + ++ lib.optionals pkgs.stdenv.isDarwin [ + pkgs.libiconv + pkgs.cacert + ]; + + LIBCLANG_PATH = "${llvmPkgs.libclang.lib}/lib"; + CLANG_PATH = "${llvmPkgs.clang}/bin/clang"; + SSL_CERT_FILE = lib.optionalString pkgs.stdenv.isDarwin "${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt"; + + cmakeFlags = [ + "-DLOGOS_CORE_ROOT=${logosCore}" + "-DLOGOS_EXECUTION_ZONE_INDEXER_LIB=${logosExecutionZoneIndexerPackage}/lib" + "-DLOGOS_EXECUTION_ZONE_INDEXER_INCLUDE=${logosExecutionZoneIndexerPackage}/include" + ]; + }; + in + { + lib = logosExecutionZoneIndexerModulePackage; + default = logosExecutionZoneIndexerModulePackage; + } + ); + + apps = forAll ( + system: + let + pkgs = mkPkgs system; + logosExecutionZoneIndexerModuleLib = self.packages.${system}.lib; + logosModuleViewerPackage = logos-module-viewer.packages.${system}.default; + extension = if pkgs.stdenv.isDarwin then "dylib" + else if pkgs.stdenv.hostPlatform.isWindows then "dll" + else "so"; + inspectModule = { + type = "app"; + program = + "${pkgs.writeShellScriptBin "inspect-module" '' + exec ${logosModuleViewerPackage}/bin/logos-module-viewer \ + --module ${logosExecutionZoneIndexerModuleLib}/lib/liblogos_execution_zone_indexer_module.${extension} + ''}/bin/inspect-module"; + }; + in + { + inspect-module = inspectModule; + default = inspectModule; + } + ); + + devShells = forAll ( + system: + let + pkgs = mkPkgs system; + pkg = self.packages.${system}.default; + logosCorePackage = logos-core.packages.${system}.default; + logosExecutionZoneIndexerPackage = logos-execution-zone.packages.${system}.indexer; + in + { + default = pkgs.mkShell { + inputsFrom = [ pkg ]; + + inherit (pkg) + LIBCLANG_PATH + CLANG_PATH; + + LOGOS_CORE_ROOT = "${logosCorePackage}"; + LOGOS_EXECUTION_ZONE_INDEXER_LIB = "${logosExecutionZoneIndexerPackage}/lib"; + LOGOS_EXECUTION_ZONE_INDEXER_INCLUDE = "${logosExecutionZoneIndexerPackage}/include"; + + shellHook = '' + BLUE='\e[1;34m' + GREEN='\e[1;32m' + RESET='\e[0m' + + echo -e "\n''${BLUE}=== Logos Execution Zone Module Development Environment ===''${RESET}" + echo -e "''${GREEN}LOGOS_CORE_ROOT:''${RESET} $LOGOS_CORE_ROOT" + echo -e "''${GREEN}LOGOS_EXECUTION_ZONE_INDEXER_LIB:''${RESET} $LOGOS_EXECUTION_ZONE_INDEXER_LIB" + echo -e "''${GREEN}LOGOS_EXECUTION_ZONE_INDEXER_INCLUDE:''${RESET} $LOGOS_EXECUTION_ZONE_INDEXER_INCLUDE" + echo -e "''${BLUE}---------------------------------------------------------''${RESET}" + ''; + }; + } + ); + }; +} diff --git a/justfile b/justfile new file mode 100644 index 0000000..07c1165 --- /dev/null +++ b/justfile @@ -0,0 +1,24 @@ +default: build + +configure: + cmake -S . -B build -G Ninja \ + ${LOGOS_CORE_ROOT:+-DLOGOS_CORE_ROOT="$LOGOS_CORE_ROOT"} \ + ${LOGOS_EXECUTION_ZONE_INDEXER_LIB:+-DLOGOS_EXECUTION_ZONE_INDEXER_LIB="$LOGOS_EXECUTION_ZONE_INDEXER_LIB"} \ + ${LOGOS_EXECUTION_ZONE_INDEXER_INCLUDE:+-DLOGOS_EXECUTION_ZONE_INDEXER_INCLUDE="$LOGOS_EXECUTION_ZONE_INDEXER_INCLUDE"} + +build: configure + cmake --build build --parallel --target logos_execution_zone_indexer_module + +clean: + rm -rf build result + +rebuild: clean build + +nix: + nix develop + +prettify: + nix shell nixpkgs#clang-tools -c clang-format -i src/**.cpp src/**.h + +unicode-logs file: + perl -pe 's/\\u([0-9A-Fa-f]{4})/chr(hex($1))/ge' {{file}} | less -R diff --git a/metadata.json b/metadata.json new file mode 100644 index 0000000..d0ab378 --- /dev/null +++ b/metadata.json @@ -0,0 +1,12 @@ +{ + "name": "liblogos_execution_zone_indexer_module", + "version": "1.0.0", + "description": "Logos Execution Zone Indexer Module for Logos Core", + "author": "Logos Blockchain Team", + "type": "core", + "category": "blockchain", + "main": "liblogos_execution_zone_indexer_module", + "dependencies": [], + "capabilities": [], + "include": ["libnomos.dylib"] +} \ No newline at end of file diff --git a/src/i_logos_execution_zone_indexer_module.h b/src/i_logos_execution_zone_indexer_module.h new file mode 100644 index 0000000..bbc954e --- /dev/null +++ b/src/i_logos_execution_zone_indexer_module.h @@ -0,0 +1,25 @@ +#pragma once + +#include + +class ILogosExecutionZoneIndexerModule { +public: + virtual ~ILogosExecutionZoneIndexerModule() = default; + + // === Logos Core === + + virtual void initLogos(LogosAPI* logosApiInstance) = 0; + + // === Logos Execution Zone Indexer === + + // Indexer Lifecycle + virtual int start_indexer( + const QString& config_path, + uint16_t port + ) = 0; +}; + +#define ILogosExecutionZoneIndexerModule_iid "org.logos.ilogosexecutionzoneindexermodule" +Q_DECLARE_INTERFACE(ILogosExecutionZoneIndexerModule, ILogosExecutionZoneIndexerModule_iid) + +#endif diff --git a/src/logos_execution_zone_indexer_module.cpp b/src/logos_execution_zone_indexer_module.cpp new file mode 100644 index 0000000..9576344 --- /dev/null +++ b/src/logos_execution_zone_indexer_module.cpp @@ -0,0 +1,61 @@ +#include "logos_execution_zone_indexer_module.h" + +#include +#include +#include +#include +#include +#include + +LogosExecutionZoneIndexerModule::LogosExecutionZoneIndexerModule() = default; + +LogosExecutionZoneIndexerModule::~LogosExecutionZoneIndexerModule() { + if (indexer_service_ffi) { + OperationStatus operation_result = stop_indexer(indexer_service_ffi); + + if (is_error(&operation_result)) { + int signal = operation_result; + qWarning() << "destructor: indexer FFI error: " << signal; + } + + indexer_service_ffi = nullptr; + } +} + +// === Plugin Interface === + +QString LogosExecutionZoneIndexerModule::name() const { + return "liblogos_execution_zone_indexer_module"; +} + +QString LogosExecutionZoneIndexerModule::version() const { + return "1.0.0"; +} + +// === Logos Core === + +void LogosExecutionZoneIndexerModule::initLogos(LogosAPI* logosApiInstance) { + logosAPI = logosApiInstance; +} + +// === Indexer Lifecycle === + +int LogosExecutionZoneIndexerModule::start_indexer(const QString& config_path, uint16_t port) { + if (!indexer_service_ffi) { + QByteArray utf8 = config_path.toUtf8(); + const char* c_path = utf8.constData(); + + InitializedIndexerServiceFFIResult indexer_service_ffi_res = ::start_indexer(c_path, port); + + if (is_error(&indexer_service_ffi_res.error)) { + int signal = indexer_service_ffi_res.error; + qWarning() << "start_indexer: indexer FFI error: " << signal; + + return signal; + } + + indexer_service_ffi = indexer_service_ffi_res.value; + } + + return 0; +} diff --git a/src/logos_execution_zone_indexer_module.h b/src/logos_execution_zone_indexer_module.h new file mode 100644 index 0000000..ca4390d --- /dev/null +++ b/src/logos_execution_zone_indexer_module.h @@ -0,0 +1,48 @@ +#pragma once + +#include "i_logos_execution_zone_indexer_module.h" + +#ifdef __cplusplus +extern "C" { +#endif +#include +#ifdef __cplusplus +} +#endif + +#include +#include +#include +#include + +class LogosExecutionZoneIndexerModule : public QObject, public PluginInterface, public ILogosExecutionZoneIndexerModule { + Q_OBJECT + Q_PLUGIN_METADATA(IID ILogosExecutionZoneIndexerModule_iid FILE LOGOS_EXECUTION_ZONE_INDEXER_MODULE_METADATA_FILE) + Q_INTERFACES(PluginInterface ILogosExecutionZoneIndexerModule) + +private: + LogosAPI* logosApi = nullptr; + IndexerServiceFFI* indexer_service_ffi = nullptr; + +public: + LogosExecutionZoneIndexerModule(); + ~LogosExecutionZoneIndexerModule() override; + + // === Plugin Interface === + [[nodiscard]] QString name() const override; + [[nodiscard]] QString version() const override; + + // === Logos Core === + + Q_INVOKABLE void initLogos(LogosAPI* logosApiInstance) override; + + // === Logos Execution Zone Indexer === + + // Indexer Lifecycle + Q_INVOKABLE int start_indexer(const QString& config_path, uint16_t port) override; + +signals: + void eventResponse(const QString& eventName, const QVariantList& data); +}; + +#endif