erhant 2b37d22226
Merge pull request #5 from logos-blockchain/erhant/fix-build-errors-pt2
fix!: build, load, and start on macOS Logos Core
2026-06-16 23:02:51 +03:00
2026-04-15 17:35:49 +03:00
2026-06-16 15:59:11 +03:00
2026-06-16 15:52:56 +03:00
2026-04-15 11:45:37 +03:00
2026-06-16 15:59:11 +03:00
2026-06-16 15:43:40 +03:00
2026-05-14 17:27:31 +03:00
2026-06-16 15:43:40 +03:00
2026-06-16 15:43:40 +03:00
2026-04-15 11:45:37 +03:00
2026-06-16 15:43:40 +03:00
2026-06-16 16:13:39 +03:00

Logos Execution Zone Indexer Module

A Logos Core service module (type: core) that runs the Logos Execution Zone (L2) indexer and exposes it to the Logos ecosystem. It is a thin Qt plugin around the indexer_ffi library from logos-execution-zone: it starts the indexer, which connects to an L1/bedrock node, indexes the zone's channel, and serves queries over an RPC (WebSocket) server.

Registered module name: lez_indexer_module. It pairs with the lez-explorer-ui block explorer, which connects to the indexer's RPC endpoint.

Tip

Keep the module name short. logos_host derives a Qt Remote Objects local: socket from it (local:logos_<name>_<id>), and Unix socket path names are limited in at most 108 bytes (see man unix). The build emits the library with no lib prefix so its filename equals the registered name (lez_indexer_module) - consumers derive the QtRO invoke target from the filename, so the two must stay identical.

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.

Nix

  • Use nix flake update to bring all nix context and packages
  • Use nix build to build the package (produces lez_indexer_module.<dylib|so|dll>)
  • Use nix run to launch the module-viewer and check your module loads properly
  • Use nix develop to setup your IDE

Usage

The module does not start the indexer on load - something must invoke its start_indexer method (via the module-viewer's invoke panel, or another module / basecamp over the Logos API):

start_indexer(config_path, port)
  • config_pathabsolute path to a JSON config (see config/indexer_config.json). It must be absolute: the module runs inside the logos_host subprocess, whose working directory is not your shell's.
  • port — TCP port for the RPC server, e.g. 8779. Passed as a string (see the macOS / Qt notes below).

On success it returns 0 and the RPC server listens on ws://localhost:<port>; point the explorer (or any client) there.

Caution

A non-zero return is the FFI OperationStatus (e.g. 2 = InitializationError) — note the FFI does not log, so the numeric code is all you get.

Configuration

config/indexer_config.json is deserialized into the indexer's IndexerConfig. Key fields:

Field Meaning Default
bedrock_config.addr L1/bedrock node URL the indexer reads from; it must be reachable. http://localhost:8080
home Directory for the indexer's RocksDB state, relative to the host's working directory. Use an absolute path for a predictable location. "."
channel_id The zone channel the indexer consumes; must match what the sequencer inscribes.

The config keys must match the IndexerConfig schema of the logos-execution-zone rev pinned in flake.nix/flake.lock; bumping that rev may require re-syncing this file. Unknown keys are ignored.

Description
Logos Blockchain Indexer Module
Readme
Languages
C++ 92.3%
CMake 3.7%
Nix 2.3%
Just 1.7%