commit 77c429f2ae70c426ae2c7ab4a5fb244eef22b665 Author: Alejandro Cabeza Romero Date: Tue Feb 3 18:12:53 2026 +0100 Initialise. diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..cabf2a7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,12 @@ +.idea/ +.qt/ +*.bak + +# CMake generated files +.cache/ +build/ +target/ +result + +# Node +resources/ diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..8219228 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,204 @@ +cmake_minimum_required(VERSION 3.20) +project(logos-execution-zone-wallet-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_WALLET_ROOT "" CACHE PATH "Path to logos-execution-zone-wallet source root.") +set(LOGOS_EXECUTION_ZONE_WALLET_LIB "" CACHE PATH "Path to prebuilt logos-execution-zone-wallet lib.") +set(LOGOS_EXECUTION_ZONE_WALLET_INCLUDE "" CACHE PATH "Path to prebuilt logos-execution-zone-wallet include.") + +set(HAS_LOGOS_CORE_ROOT FALSE) +set(HAS_LOGOS_EXECUTION_ZONE_WALLET_ROOT FALSE) +set(HAS_LOGOS_EXECUTION_ZONE_WALLET_LIB FALSE) +set(HAS_LOGOS_EXECUTION_ZONE_WALLET_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_WALLET_ROOT AND NOT "${LOGOS_EXECUTION_ZONE_WALLET_ROOT}" STREQUAL "") + set(HAS_LOGOS_EXECUTION_ZONE_WALLET_ROOT TRUE) +endif() + +if(DEFINED LOGOS_EXECUTION_ZONE_WALLET_LIB AND NOT "${LOGOS_EXECUTION_ZONE_WALLET_LIB}" STREQUAL "") + set(HAS_LOGOS_EXECUTION_ZONE_WALLET_LIB TRUE) +endif() + +if(DEFINED LOGOS_EXECUTION_ZONE_WALLET_INCLUDE AND NOT "${LOGOS_EXECUTION_ZONE_WALLET_INCLUDE}" STREQUAL "") + set(HAS_LOGOS_EXECUTION_ZONE_WALLET_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_WALLET_LIB AND HAS_LOGOS_EXECUTION_ZONE_WALLET_INCLUDE AND NOT HAS_LOGOS_EXECUTION_ZONE_WALLET_ROOT) + message(STATUS "Using prebuilt logos-execution-zone-wallet.") + set(LOGOS_EXECUTION_ZONE_PREBUILT TRUE) +elseif(NOT HAS_LOGOS_EXECUTION_ZONE_WALLET_LIB AND NOT HAS_LOGOS_EXECUTION_ZONE_WALLET_INCLUDE AND HAS_LOGOS_EXECUTION_ZONE_WALLET_ROOT) + message(STATUS "Building logos-execution-zone-wallet from source.") + set(LOGOS_EXECUTION_ZONE_PREBUILT FALSE) +else() + message(FATAL_ERROR "Either both LOGOS_EXECUTION_ZONE_WALLET_LIB and LOGOS_EXECUTION_ZONE_WALLET_INCLUDE must be set for prebuilt logos-execution-zone-wallet, or LOGOS_EXECUTION_ZONE_WALLET_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_WALLET_LIB}/libwallet_ffi${DYLIB_EXT}") + + if(WIN32) + set(LOGOS_EXECUTION_ZONE_IMPLIB "${LOGOS_EXECUTION_ZONE_WALLET_LIB}/wallet_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_WALLET_LIB "${INTERNAL_STAGE_LIB}") + set(LOGOS_EXECUTION_ZONE_WALLET_INCLUDE "${INTERNAL_STAGE_INCLUDE}") + + set(LOGOS_EXECUTION_ZONE_DYLIB "${INTERNAL_STAGE_LIB}/libwallet_ffi${DYLIB_EXT}") + set(LOGOS_EXECUTION_ZONE_HEADER "${INTERNAL_STAGE_INCLUDE}/wallet_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 wallet-ffi + --manifest-path "${LOGOS_EXECUTION_ZONE_WALLET_ROOT}/Cargo.toml" + COMMAND ${CMAKE_COMMAND} -E copy + "${CARGO_TARGET_DIR}/release/libwallet_ffi${DYLIB_EXT}" + "${LOGOS_EXECUTION_ZONE_DYLIB}" + DEPENDS "${LOGOS_EXECUTION_ZONE_WALLET_ROOT}/Cargo.toml" + VERBATIM + ) + + add_custom_command( + OUTPUT "${LOGOS_EXECUTION_ZONE_HEADER}" + COMMAND ${CMAKE_COMMAND} -E copy_if_different + "${LOGOS_EXECUTION_ZONE_WALLET_ROOT}/wallet-ffi/wallet_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_wallet SHARED IMPORTED GLOBAL) +set_target_properties(logos_execution_zone_wallet PROPERTIES + IMPORTED_LOCATION "${LOGOS_EXECUTION_ZONE_DYLIB}" + INTERFACE_INCLUDE_DIRECTORIES "${LOGOS_EXECUTION_ZONE_WALLET_INCLUDE}" +) + +if(NOT LOGOS_EXECUTION_ZONE_PREBUILT) + add_dependencies(logos_execution_zone_wallet logos_execution_zone_libs) +endif() + +if(WIN32) + set_target_properties(logos_execution_zone_wallet PROPERTIES IMPORTED_IMPLIB "${LOGOS_EXECUTION_ZONE_IMPLIB}") +endif() + +add_library(logos_core STATIC IMPORTED + src/i_logos_execution_zone_wallet_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 liblogos-execution-zone-wallet-module) + +qt_add_plugin(${PLUGIN_TARGET} CLASS_NAME LogosExecutionZoneWalletModule) + +target_sources(${PLUGIN_TARGET} PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR}/src/i_logos_execution_zone_wallet_module.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/logos_execution_zone_wallet_module.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/logos_execution_zone_wallet_module.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/metadata.json +) + +set_property(TARGET ${PLUGIN_TARGET} PROPERTY PUBLIC_HEADER + ${CMAKE_CURRENT_SOURCE_DIR}/src/i_logos_execution_zone_wallet_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_wallet + logos_cpp_sdk + logos_core +) + +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_WALLET_INCLUDE}/" DESTINATION include) +install(FILES "${LOGOS_EXECUTION_ZONE_DYLIB}" DESTINATION lib) diff --git a/README.md b/README.md new file mode 100644 index 0000000..719b187 --- /dev/null +++ b/README.md @@ -0,0 +1,9 @@ +# Logos Execution Zone Wallet Module + +### Setup + +#### IDE + +If you're using an IDE with CMake integration make sure it points to the same cmake directory as the `justfile`, which defaults to `build`. + +This will reduce friction when working on the project. diff --git a/config/testnet.config.yaml b/config/testnet.config.yaml new file mode 100644 index 0000000..0efded0 --- /dev/null +++ b/config/testnet.config.yaml @@ -0,0 +1,203 @@ +tracing: + logger: !Stdout + tracing: None + filter: None + metrics: None + console: None + level: DEBUG +network: + backend: + swarm: + host: 0.0.0.0 + port: 3010 + node_key: ea1e1dcc31612bd20987f017f0ca435cd2a59a4bd9fd6e14883b4803ae3b803d + initial_peers: +# - /dns4/devnet.blockchain.logos.co/udp/3000/quic-v1 +# - /dns4/devnet.blockchain.logos.co/udp/3001/quic-v1 +# - /dns4/devnet.blockchain.logos.co/udp/3002/quic-v1 +# - /dns4/devnet.blockchain.logos.co/udp/3003/quic-v1 + - /ip4/127.0.0.1/udp/3000/quic-v1 + - /ip4/127.0.0.1/udp/3001/quic-v1 + - /ip4/127.0.0.1/udp/3002/quic-v1 + - /ip4/127.0.0.1/udp/3003/quic-v1 +blend: + non_ephemeral_signing_key_id: 32e4b52b78e0e8273f31e2ae0826d09b0348d4c66824af4f51ec4ef338082211 + recovery_path_prefix: ./resources/recovery/blend + core: + backend: + listening_address: /ip4/127.0.0.1/udp/3001/quic-v1 + core_peering_degree: + start: 4 + end: 8 + edge_node_connection_timeout: + secs: 1 + nanos: 0 + max_edge_node_incoming_connections: 300 + max_dial_attempts_per_peer: 3 + zk: + secret_key_kms_id: 32e4b52b78e0e8273f31e2ae0826d09b0348d4c66824af4f51ec4ef338082211 + edge: + backend: + max_dial_attempts_per_peer_per_message: 1 + replication_factor: 1 +deployment: mainnet +da_network: + backend: + node_key: ea1e1dcc31612bd20987f017f0ca435cd2a59a4bd9fd6e14883b4803ae3b803d + listening_address: /ip4/127.0.0.1/udp/8716/quic-v1 + policy_settings: + min_dispersal_peers: 1 + min_replication_peers: 1 + max_dispersal_failures: 3 + max_sampling_failures: 3 + max_replication_failures: 3 + malicious_threshold: 5 + monitor_settings: + failure_time_window: "10.0" + time_decay_factor: "0.8" + balancer_interval: + secs: 5 + nanos: 0 + redial_cooldown: + secs: 5 + nanos: 0 + replication_settings: + seen_message_cache_size: 1000 + seen_message_ttl: "3600.0" + subnets_settings: + num_of_subnets: 20 + shares_retry_limit: 5 + commitments_retry_limit: 5 + membership: + replication_factor: 2 + subnetwork_size: 2 + api_adapter_settings: + api_port: 8722 + is_secure: false + subnet_refresh_interval: + secs: 30 + nanos: 0 + subnet_threshold: 2048 + min_session_members: 2 +da_verifier: + share_verifier_settings: + global_params_path: ./resources/tests/kzgrs/kzgrs_test_params + domain_size: 2 + tx_verifier_settings: null + network_adapter_settings: null + storage_adapter_settings: + blob_storage_directory: ./resources + mempool_trigger_settings: + publish_threshold: 0.8 + share_duration: [ 5, 0 ] + prune_duration: [ 30, 0 ] + prune_interval: [ 5, 0 ] +da_sampling: + share_verifier_settings: + global_params_path: ./resources/tests/kzgrs/kzgrs_test_params + domain_size: 2 + sampling_settings: + num_samples: 1 + num_subnets: 2 + old_blobs_check_interval: + secs: 5 + nanos: 0 + blobs_validity_duration: + secs: 18446744073709551615 + nanos: 0 + commitments_wait_duration: + secs: 2 + nanos: 0 + sdp_blob_trigger_sampling_delay: + secs: 5 + nanos: 0 +http: + backend_settings: + address: 127.0.0.1:8722 + cors_origins: [ ] +time: + chain_start_time: [ 2025, 41, 9, 38, 29, 993653000, 0, 0, 0 ] + backend: + update_interval: [ 16, 0 ] + ntp_server: pool.ntp.org + ntp_client_settings: + timeout: [ 5, 0 ] + listening_interface: 0.0.0.0 +cryptarchia: + service: + starting_state: !Genesis + genesis_tx: + mantle_tx: + ops: + - opcode: 0 + payload: + channel_id: "0000000000000000000000000000000000000000000000000000000000000000" + inscription: [ 103, 101, 110, 101, 115, 105, 115 ] # "genesis" in bytes + parent: "0000000000000000000000000000000000000000000000000000000000000000" + signer: "0000000000000000000000000000000000000000000000000000000000000000" + ledger_tx: + inputs: [] + outputs: + - value: 1 + pk: d204000000000000000000000000000000000000000000000000000000000000 + execution_gas_price: 0 + storage_gas_price: 0 + ops_proofs: [NoProof] + ledger_tx_proof: + pi_a: [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + ] + pi_b: [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + ] + pi_c: [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + ] + recovery_file: ./resources/recovery/cryptarchia.json + bootstrap: + prolonged_bootstrap_period: [ 86400, 0 ] + force_bootstrap: false + offline_grace_period: + grace_period: [ 1200, 0 ] + state_recording_interval: [ 60, 0 ] + network: + bootstrap: + ibd: + peers: +# - 12D3KooWEiByuYHNv8CpVLFCvKmnRqeExUrFavQfPy1Ch6ZBD4wn +# - 12D3KooWEAcvukmjQovaQiYHoRMiEC1rkHVqNtSdmnqNg5PX4ex1 +# - 12D3KooWPWhnJBXR9VKNZBw5sbYtJxWANH9KUwP4JnQDYYvpkxsC +# - 12D3KooWM9oDwdgvN5RF7Xut97vJVMXSNRytoitQAeNSxjGWvTTc + - 12D3KooWRuCV6UDuQuYkmG9Y7x9uU6WV8whJTxQR3zwpEZnXAoFP + - 12D3KooWBztub2cRcTm4G1yir2Wv6ErFcJjiZi2ZBoJwQk9N77aJ + - 12D3KooWRoYTdyWdaxRv4Sr6JUcvwM1NKYqDrVmPRKRau9c5YqS1 + - 12D3KooWELj9EaHym8Awaj2V9GgEb2KCNud8Y3Xz5SiiEt9vVw2b + sync: + orphan: + max_orphan_cache_size: 5 + leader: + pk: "0000000000000000000000000000000000000000000000000000000000000000" + sk: 3cf3335017304dcfce45124a0633829f00000000000000000000000000000000 +storage: + db_path: ./resources/tests/db + read_only: false + column_family: blocks +mempool: + recovery_path: ./resources/recovery/mempool.json +sdp: + declaration: null + wallet_config: + max_tx_fee: 18446744073709551615 # u64::MAX + # SDP funding public key - matches the genesis note pk used for SDP transaction fees + funding_pk: "89b7314f5184bae9eb7fa511098eb321b97b8fbbdec611dda591e0c01e18331d" +wallet: + known_keys: + - "0000000000000000000000000000000000000000000000000000000000000000" +key_management: + keys: + leader_key: !Zk 3cf3335017304dcfce45124a0633829f00000000000000000000000000000000 diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..7e0197a --- /dev/null +++ b/flake.lock @@ -0,0 +1,714 @@ +{ + "nodes": { + "crane": { + "locked": { + "lastModified": 1769737823, + "narHash": "sha256-DrBaNpZ+sJ4stXm+0nBX7zqZT9t9P22zbk6m5YhQxS4=", + "owner": "ipetkov", + "repo": "crane", + "rev": "b2f45c3830aa96b7456a4c4bc327d04d7a43e1ba", + "type": "github" + }, + "original": { + "owner": "ipetkov", + "repo": "crane", + "type": "github" + } + }, + "logos-capability-module": { + "inputs": { + "logos-cpp-sdk": "logos-cpp-sdk", + "logos-liblogos": "logos-liblogos_2", + "nixpkgs": [ + "logos-liblogos", + "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_2": { + "inputs": { + "logos-cpp-sdk": "logos-cpp-sdk_5", + "logos-liblogos": "logos-liblogos_3", + "nixpkgs": [ + "logos-module-viewer", + "logos-capability-module", + "logos-liblogos", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1764708348, + "narHash": "sha256-UNyZJYZsYD1KfcKS4jQab0GWx8vxZScboo3y3JcFPv4=", + "owner": "logos-co", + "repo": "logos-capability-module", + "rev": "710992469b7650110e7bb5a000ae03a7e8864e66", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-capability-module", + "type": "github" + } + }, + "logos-core": { + "inputs": { + "nixpkgs": "nixpkgs" + }, + "locked": { + "lastModified": 1770127168, + "narHash": "sha256-KgAlvegwSO+aZtJ+GnIV4X6R8KJ46+ySK615x+hOdrw=", + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "rev": "f649e0365ceec6699aff05fe07f8d767ef93a38a", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "type": "github" + } + }, + "logos-cpp-sdk": { + "inputs": { + "nixpkgs": "nixpkgs_3" + }, + "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_10": { + "inputs": { + "nixpkgs": "nixpkgs_12" + }, + "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_4" + }, + "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_3": { + "inputs": { + "nixpkgs": "nixpkgs_5" + }, + "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_4": { + "inputs": { + "nixpkgs": "nixpkgs_6" + }, + "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_5": { + "inputs": { + "nixpkgs": "nixpkgs_7" + }, + "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_6": { + "inputs": { + "nixpkgs": "nixpkgs_8" + }, + "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_7": { + "inputs": { + "nixpkgs": "nixpkgs_9" + }, + "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_8": { + "inputs": { + "nixpkgs": "nixpkgs_10" + }, + "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_9": { + "inputs": { + "nixpkgs": "nixpkgs_11" + }, + "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-execution-zone": { + "inputs": { + "crane": "crane", + "nixpkgs": "nixpkgs_2", + "rust-overlay": "rust-overlay" + }, + "locked": { + "lastModified": 1770129675, + "narHash": "sha256-D9MymFGgDE24gBvXhXrmyXbLFZT1+P4s06baNUJzJoE=", + "owner": "logos-blockchain", + "repo": "lssa", + "rev": "29dfa0b2e36fef56cf5510e24e38ea257e6963f0", + "type": "github" + }, + "original": { + "owner": "logos-blockchain", + "ref": "feat/nixify", + "repo": "lssa", + "type": "github" + } + }, + "logos-liblogos": { + "inputs": { + "logos-capability-module": "logos-capability-module", + "logos-cpp-sdk": "logos-cpp-sdk_3", + "logos-module": "logos-module", + "nixpkgs": [ + "logos-liblogos", + "logos-cpp-sdk", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1770066585, + "narHash": "sha256-JrysqKmP48dtsB01u9MmEvGwgJHV59RZHOtbMkLg4Rk=", + "owner": "logos-co", + "repo": "logos-liblogos", + "rev": "d72a55984269c1f863f8ad74b215d9e2672f8d72", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-liblogos", + "type": "github" + } + }, + "logos-liblogos_2": { + "inputs": { + "logos-cpp-sdk": "logos-cpp-sdk_2", + "nixpkgs": [ + "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_3": { + "inputs": { + "logos-cpp-sdk": "logos-cpp-sdk_6", + "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_4": { + "inputs": { + "logos-cpp-sdk": "logos-cpp-sdk_8", + "nixpkgs": [ + "logos-module-viewer", + "logos-liblogos", + "logos-cpp-sdk", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1764788130, + "narHash": "sha256-ieu55pelIMUO/m7fLXUS3JT6sNBBHva0lNc1GRH2hb0=", + "owner": "logos-co", + "repo": "logos-liblogos", + "rev": "3046aa6ac4392a705b2890adec405d7c9d8d4178", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-liblogos", + "type": "github" + } + }, + "logos-liblogos_5": { + "inputs": { + "logos-cpp-sdk": "logos-cpp-sdk_10", + "nixpkgs": [ + "logos-module-viewer", + "logos-package-manager", + "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-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_7", + "logos-liblogos": "logos-liblogos_4", + "logos-package-manager": "logos-package-manager", + "nixpkgs": [ + "logos-module-viewer", + "logos-liblogos", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1765396385, + "narHash": "sha256-sxlpjSLOutqz71SFQIXUa3aY3KUZZe/pWL6+cuIRREs=", + "owner": "logos-co", + "repo": "logos-module-viewer", + "rev": "a4f97447fab84e3188a30e6824e077b80dba210e", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-module-viewer", + "type": "github" + } + }, + "logos-package-manager": { + "inputs": { + "logos-cpp-sdk": "logos-cpp-sdk_9", + "logos-liblogos": "logos-liblogos_5", + "nixpkgs": [ + "logos-module-viewer", + "logos-package-manager", + "logos-liblogos", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1764708254, + "narHash": "sha256-od3z91MNlKo8tk/BEeB0qOl5X87uTGF8+zg9IMZoBAM=", + "owner": "logos-co", + "repo": "logos-package-manager", + "rev": "f3a375fce2a0ddeece8d1eae525f1eefae6b7931", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package-manager", + "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_2": { + "locked": { + "lastModified": 1770019141, + "narHash": "sha256-VKS4ZLNx4PNrABoB0L8KUpc1fE7CLpQXQs985tGfaCU=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "cb369ef2efd432b3cdf8622b0ffc0a97a02f3137", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_3": { + "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_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" + } + }, + "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": 1770088046, + "narHash": "sha256-4hfYDnUTvL1qSSZEA4CEThxfz+KlwSFQ30Z9jgDguO0=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "71f9daa4e05e49c434d08627e755495ae222bc34", + "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..19a9b1a --- /dev/null +++ b/flake.nix @@ -0,0 +1,147 @@ +{ + 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/lssa?ref=feat/nixify"; + + 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; + logosExecutionZoneWalletPackage = logos-execution-zone.packages.${system}.wallet; + + logosExecutionZoneModulePackage = 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 + logosExecutionZoneWalletPackage + ] + ++ 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_WALLET_LIB=${logosExecutionZoneWalletPackage}/lib" + "-DLOGOS_EXECUTION_ZONE_WALLET_INCLUDE=${logosExecutionZoneWalletPackage}/include" + ]; + }; + in + { + module = logosExecutionZoneModulePackage; + default = logosExecutionZoneModulePackage; + } + ); + + apps = forAll ( + system: + let + pkgs = mkPkgs system; + logosExecutionZoneModulePackage = self.packages.${system}.module; + logosModuleViewerPackage = logos-module-viewer.packages.${system}.default; + extension = if pkgs.stdenv.isDarwin then "dylib" + else if pkgs.stdenv.hostPlatform.isWindows then "dll" + else "so"; + in + { + default = { + type = "app"; + program = + "${pkgs.writeShellScriptBin "inspect-module" '' + exec ${logosModuleViewerPackage}/bin/logos-module-viewer \ + --module ${logosExecutionZoneModulePackage}/lib/liblogos-execution-zone-wallet-module.${extension} + ''}/bin/inspect-module"; + }; + } + ); + + devShells = forAll ( + system: + let + pkgs = mkPkgs system; + pkg = self.packages.${system}.default; + logosCorePackage = logos-core.packages.${system}.default; + logosExecutionZoneWalletPackage = logos-execution-zone.packages.${system}.wallet; + in + { + default = pkgs.mkShell { + inputsFrom = [ pkg ]; + + inherit (pkg) + LIBCLANG_PATH + CLANG_PATH; + + LOGOS_CORE_ROOT = "${logosCorePackage}"; + LOGOS_EXECUTION_ZONE_WALLET_LIB = "${logosExecutionZoneWalletPackage}/lib"; + LOGOS_EXECUTION_ZONE_WALLET_INCLUDE = "${logosExecutionZoneWalletPackage}/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_WALLET_LIB:''${RESET} $LOGOS_EXECUTION_ZONE_WALLET_LIB" + echo -e "''${GREEN}LOGOS_EXECUTION_ZONE_WALLET_INCLUDE:''${RESET} $LOGOS_EXECUTION_ZONE_WALLET_INCLUDE" + echo -e "''${BLUE}---------------------------------------------------------''${RESET}" + ''; + }; + } + ); + }; +} diff --git a/justfile b/justfile new file mode 100644 index 0000000..6bc153f --- /dev/null +++ b/justfile @@ -0,0 +1,21 @@ +default: build + +configure: + cmake -S . -B build -G Ninja \ + ${LOGOS_CORE_ROOT:+-DLOGOS_CORE_ROOT="$LOGOS_CORE_ROOT"} \ + ${LOGOS_EXECUTION_ZONE_WALLET_LIB:+-DLOGOS_EXECUTION_ZONE_WALLET_LIB="$LOGOS_EXECUTION_ZONE_WALLET_LIB"} \ + ${LOGOS_EXECUTION_ZONE_WALLET_INCLUDE:+-DLOGOS_EXECUTION_ZONE_WALLET_INCLUDE="$LOGOS_EXECUTION_ZONE_WALLET_INCLUDE"} + +build: configure + cmake --build build --parallel --target liblogos-execution-zone-wallet-module + +clean: + rm -rf build target + +rebuild: clean configure build + +nix: + nix develop + +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..1c41ee9 --- /dev/null +++ b/metadata.json @@ -0,0 +1,12 @@ +{ + "name": "liblogos-execution-zone-wallet-module", + "version": "1.0.0", + "description": "Logos Execution Zone Wallet Module for Logos Core", + "author": "Logos Blockchain Team", + "type": "blockchain", + "category": "blockchain", + "main": "LogosExecutionZoneWalletModule", + "dependencies": [], + "capabilities": [], + "include": ["libnomos.dylib"] +} \ No newline at end of file diff --git a/src/i_logos_execution_zone_wallet_module.h b/src/i_logos_execution_zone_wallet_module.h new file mode 100644 index 0000000..dfb8ed1 --- /dev/null +++ b/src/i_logos_execution_zone_wallet_module.h @@ -0,0 +1,25 @@ +#ifndef I_LOGOS_EXECUTION_ZONE_WALLET_MODULE_API_H +#define I_LOGOS_EXECUTION_ZONE_WALLET_MODULE_API_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif +#include +#ifdef __cplusplus +} +#endif + +class ILogosExecutionZoneWalletModule { +public: + virtual ~ILogosExecutionZoneWalletModule() = default; + + // Logos Core + virtual void initLogos(LogosAPI* logosAPIInstance) = 0; +}; + +#define ILogosExecutionZoneWalletModule_iid "org.logos.ilogosexecutionzonewalletmodule" +Q_DECLARE_INTERFACE(ILogosExecutionZoneWalletModule, ILogosExecutionZoneWalletModule_iid) + +#endif diff --git a/src/logos_execution_zone_wallet_module.cpp b/src/logos_execution_zone_wallet_module.cpp new file mode 100644 index 0000000..e8f5e4a --- /dev/null +++ b/src/logos_execution_zone_wallet_module.cpp @@ -0,0 +1,22 @@ +#include "logos_execution_zone_wallet_module.h" + +#include +#include + +LogosExecutionZoneWalletModule::LogosExecutionZoneWalletModule() = default; + +LogosExecutionZoneWalletModule::~LogosExecutionZoneWalletModule() { + +} + +QString LogosExecutionZoneWalletModule::name() const { + return "liblogos-execution-zone-wallet-module"; +} + +QString LogosExecutionZoneWalletModule::version() const { + return "1.0.0"; +} + +void LogosExecutionZoneWalletModule::initLogos(LogosAPI* logosAPIInstance) { + +} diff --git a/src/logos_execution_zone_wallet_module.h b/src/logos_execution_zone_wallet_module.h new file mode 100644 index 0000000..b428bee --- /dev/null +++ b/src/logos_execution_zone_wallet_module.h @@ -0,0 +1,21 @@ +#pragma once + +#include "i_logos_execution_zone_wallet_module.h" + +class LogosExecutionZoneWalletModule final : public QObject, public PluginInterface, public ILogosExecutionZoneWalletModule { + Q_OBJECT + Q_PLUGIN_METADATA(IID ILogosExecutionZoneWalletModule_iid FILE "../metadata.json") + Q_INTERFACES(PluginInterface) + +public: + LogosExecutionZoneWalletModule(); + ~LogosExecutionZoneWalletModule() override; + + // Logos Core + [[nodiscard]] QString name() const override; + [[nodiscard]] QString version() const override; + Q_INVOKABLE void initLogos(LogosAPI*) override; + + signals: + void eventResponse(const QString& eventName, const QVariantList& data); +};