mirror of
https://github.com/luxfi/chains.git
synced 2026-09-24 00:26:00 +00:00
634df5e5ae12708d01057f378ef470e20fd7ca11
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.
Lux Chains
Independent VM plugin binaries for the Lux Network.
Each directory builds to a standalone binary that the Lux node loads as a plugin via --plugin-dir.
Build
make # build all VMs
make evm # build one VM
make test # test all
Install
lpm install evm
lpm install dexvm
Or copy binaries to ~/.lux/plugins/<vmid>.
VMs
One row per directory in this repo. make derives its target list from the
directory listing, so a VM that has no directory here has no binary — the table
below and ls can never disagree.
Live means the VM has a chain registered on Lux mainnet 96369
(platform.getBlockchains).
| VM | Chain | Live on 96369 | Purpose |
|---|---|---|---|
| evm | C-Chain | ✅ | EVM smart contracts |
| dexvm | D-Chain | ✅ | Decentralized exchange |
| aivm | A-Chain | ✅ | AI/ML inference |
| bridgevm | B-Chain | ✅ | Cross-chain bridge — also owns all cross-chain messaging / relay / teleport (LP-6000); there is no separate teleportvm |
| graphvm | G-Chain | ✅ | GraphQL data layer |
| keyvm | K-Chain | ✅ | Key management |
| quantumvm | Q-Chain | ✅ | Post-quantum consensus signing (Pulsar) |
| zkvm | Z-Chain | ✅ | Groth16 over BLS12-381 (rolls N × ML-DSA-65 sigs into 192-byte proof) |
| identityvm | I-Chain | ❌ built, not deployed | Decentralized identity |
| oraclevm | O-Chain | ❌ built, not deployed | Oracle/off-chain data |
| relayvm | R-Chain | ❌ built, not deployed | Cross-chain relay |
| mpcvm | M-Chain | ❌ built, not deployed | MPC ceremonies (CGGMP21, FROST, Pulsar-general) — bridge custody for external wallets (LP-7100) |
| schain | S-Chain | ❌ built, not deployed | S3-style object storage (on-chain metadata / off-chain blob). Declares its own VMID = ids.ID{'s','c','h','a','i','n'} in schain/factory.go and is not in the canonical luxfi/constants VM-ID registry |
P-Chain (platformvm) and X-Chain (xvm) are in-process core VMs registered by
luxfi/node, not plugins built here. Together with the eight ✅ rows above they
are the ten chains live on 96369.
Not in this repo
| Name | Status |
|---|---|
teleportvm / T-Chain |
Removed. LP-134 dissolves T-Chain with zero remainder: threshold signing → M-Chain, FHE → F-Chain, cross-chain messaging/teleport → B-Chain (bridgevm). LP-5013 and LP-7330 are deprecated by LP-134; see LP-7050 for the migration map. No teleportvm VM ID exists in luxfi/constants. |
servicenodevm |
Never existed. The service-node registry was never built under this name; the S-Chain directory here is schain/ and is object storage, not a registry. |
fhevm / F-Chain |
Unbuilt. luxfi/constants reserves FHEVMID = {'f','h','e','v','m'} and luxfi/node/node/vms.go lists it in OptionalVMs as a plugin named fhevm, so luxd will scan --plugin-dir for it — but there is no fhevm/ directory in this repo and no plugin binary anywhere, so that scan always comes up empty. The FHE runtime library lives at mpcvm/fhe/; it is a package inside mpcvm, not a standalone chain. F-Chain is a spec (LP-8200, LP-167) with no shipping VM. |
Languages
Go
98.2%
C
1.7%
Shell
0.1%