Protocol boundaries
EVM reads through the runtime
The function supplies its chain and block context through the public EVM object.python/blockx_runtime/noderpc_bridge.py routes node requests to the host bridge. Worker IO dispatches the corresponding backend operation and returns the response to the suspended computation.
A BlockX Call identifier tracks function execution. The chain, block, contract, and query arguments belong to the backend request; preserve them when changing routing or cache behavior.
Wire and domain models
- Protobuf messages define service inputs and outputs.
- Worker adapters convert those messages to internal task types in
internal/worker/adapters/wire.go. - Call Builder and Writer Plugin configuration remains JSON with plugin-owned fields.
- Task failure details and RPC status are separate channels; use results and errors for the caller-visible contract.
Changing a protocol
Update both producers and consumers when changing fields or message handling. Keep shared definitions inapi/, and run the relevant codec, adapter, and process tests. Source paths and test entry points are listed on the owning component pages.
Design references in the BlockX repository: docs/specs/code-style.md, docs/specs/worker.md, and docs/specs/sync-invoker.md.