mirror of
https://github.com/luxfi/chains.git
synced 2026-09-24 00:26:00 +00:00
A GPU plugin replaces a VM's state transitions wholesale. Three of the four seams reached one by dlsym'ing launcher names out of a library nothing had identified, and all four would fall back to a bare filename — which makes the dynamic loader's default search path, and in bridgevm's case the working directory of whoever started the node, the thing that decides which code computes consensus state. That is not theoretical. A library exporting the five bridgevm launcher names and nothing else, compiled from twenty lines of C that return 0: before, LUX_GPU_PLUGIN_DIR=/tmp/rogue AutoBackend = hip before, no env, cwd holds the .so AutoBackend = hip after, either AutoBackend = none Two changes, neither of them new machinery. The plugin header says a loader MUST check abi_version and vtbl_size, and quantumvm already does, through lux_gpu_backend_init. aivm, bridgevm and mpcvm now do the same before resolving a single launcher: a name is what was being matched, and a name is not a contract. Bare filenames and the CWD entry are gone from all four. What is left is LUX_GPU_PLUGIN_DIR and LUXCPP_PREFIX — places an operator named. No new environment variable: unset means no plugin, which is already the supported configuration and the one every box without a GPU is in. Verified with the real HIP plugin from lux-private/gpu-kernels: aivm, bridgevm, mpcvm and quantumvm all build, vet and test green, aivm TestRoundTripAttestation passes through the loaded plugin, and the rogue library is refused.