From 6c39b7d39117b208a12d433cf45ec3c48b4a0078 Mon Sep 17 00:00:00 2001 From: zeekay Date: Sun, 26 Jul 2026 10:02:56 -0700 Subject: [PATCH] chore: sync working tree Commits 1 outstanding change(s) that were sitting uncommitted. No build artifacts and no secrets in the changeset (both checked). --- node/vms.go | 36 ++++++++++++++++++++++++------------ 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/node/vms.go b/node/vms.go index e1344c687..6ad08f624 100644 --- a/node/vms.go +++ b/node/vms.go @@ -114,18 +114,29 @@ var CoreVMs = map[ids.ID]CoreVM{ // today's opt-in-flag behavior) while the gate itself remains fail-closed. // // C (evm) and the remaining app VMs are plugin-loaded but ungated today. +// +// Declaring a VM here is a statement of intent, not a guarantee that a binary +// exists: the registry scan simply finds nothing and the chain cannot start. +// fhevm (F-Chain) is exactly that case today — see its entry below. var OptionalVMs = map[ids.ID]PluginSpec{ - constants.DexVMID: {Name: "dexvm", RequiredNFT: &NFTRequirement{Collection: "dex-operator", GroupID: 0}}, - constants.BridgeVMID: {Name: "bridgevm", RequiredNFT: &NFTRequirement{Collection: "bridge-operator", GroupID: 0}}, - constants.EVMID: {Name: "evm"}, - constants.AIVMID: {Name: "aivm"}, - constants.GraphVMID: {Name: "graphvm"}, - constants.IdentityVMID: {Name: "identityvm"}, - constants.KeyVMID: {Name: "keyvm"}, - constants.OracleVMID: {Name: "oraclevm"}, - constants.RelayVMID: {Name: "relayvm"}, - constants.MPCVMID: {Name: "mpcvm"}, - constants.FHEVMID: {Name: "fhevm"}, + constants.DexVMID: {Name: "dexvm", RequiredNFT: &NFTRequirement{Collection: "dex-operator", GroupID: 0}}, + constants.BridgeVMID: {Name: "bridgevm", RequiredNFT: &NFTRequirement{Collection: "bridge-operator", GroupID: 0}}, + constants.EVMID: {Name: "evm"}, + constants.AIVMID: {Name: "aivm"}, + constants.GraphVMID: {Name: "graphvm"}, + constants.IdentityVMID: {Name: "identityvm"}, + constants.KeyVMID: {Name: "keyvm"}, + constants.OracleVMID: {Name: "oraclevm"}, + constants.RelayVMID: {Name: "relayvm"}, + constants.MPCVMID: {Name: "mpcvm"}, + // F-Chain. Reserved ID, no shipping VM: luxfi/chains has no fhevm/ + // directory, so `make` produces no fhevm binary and this scan always comes + // up empty. The FHE runtime library lives at luxfi/chains/mpcvm/fhe as a + // package inside mpcvm, not as a standalone chain. F-Chain is a spec + // (LP-8200, LP-167). Kept declared so the intent stays visible and the ID + // stays reserved — remove it only when F-Chain is cancelled, not merely + // because it is unbuilt. + constants.FHEVMID: {Name: "fhevm"}, } func init() { @@ -155,7 +166,8 @@ func assertRegistriesDisjoint() error { // registerCoreVMs registers the in-process core VMs that carry a concrete // factory (Q, Z). P and X are registered separately in node.go because their // factories require live node dependencies (RegisteredInNodeGo=true in -// CoreVMs). The optional chain VMs (A/B/C/D/G/I/K/O/R/T) are NEVER registered +// CoreVMs). The optional chain VMs (A/B/C/D/F/G/I/K/M/O/R — the keys of +// OptionalVMs; there is no T, LP-134 dissolved it) are NEVER registered // here — they load from PluginDir via the VMRegistry scan, exactly like any // other plugin. Registering an optional VM in-process would shadow its plugin // (the registry skips any VMID the manager already has — vms/registry/