diff --git a/builder/builder.go b/builder/builder.go index 44d3bab..2ead881 100644 --- a/builder/builder.go +++ b/builder/builder.go @@ -84,7 +84,8 @@ var ( constants.QuantumVMID: {"quantumvm", "quantum"}, constants.AIVMID: {"aivm", "ai"}, constants.BridgeVMID: {"bridgevm", "bridge"}, - constants.ThresholdVMID: {"thresholdvm", "threshold"}, + constants.MPCVMID: {"mpc", "mpcvm"}, + constants.FHEVMID: {"fhe", "fhevm"}, constants.ZKVMID: {"zkvm", "zk"}, constants.GraphVMID: {"graphvm", "graph"}, constants.KeyVMID: {"kmsvm", "kms"}, @@ -584,10 +585,9 @@ func FromConfig(config *genesiscfg.Config) ([]byte, ids.ID, error) { // shard set is supplied. Append-only — reordering shifts the // P-Chain genesis byte layout. // - // LP-134: F-Chain and M-Chain both run the ThresholdVM substrate (F in - // FHE mode, M in MPC mode) — they share constants.ThresholdVMID and are - // disambiguated by BlockchainName. F-Chain occupies the retired T-Chain's - // slot (same VM); M-Chain is appended, keeping Z/G/K byte-stable. + // LP-0130: F-Chain (FHEVMID) and M-Chain (MPCVMID) run distinct VMs. + // The legacy shared substrate is retired; F occupies the retired + // T slot for byte-order stability, M is appended. chainEntries := []struct { GenesisData []byte VMID ids.ID @@ -601,11 +601,11 @@ func FromConfig(config *genesiscfg.Config) ([]byte, ids.ID, error) { {GenesisData: []byte(config.QChainGenesis), VMID: constants.QuantumVMID, Name: "Q-Chain"}, {GenesisData: []byte(config.AChainGenesis), VMID: constants.AIVMID, Name: "A-Chain"}, {GenesisData: []byte(config.BChainGenesis), VMID: constants.BridgeVMID, Name: "B-Chain"}, - {GenesisData: []byte(config.FChainGenesis), VMID: constants.ThresholdVMID, Name: "F-Chain"}, + {GenesisData: []byte(config.FChainGenesis), VMID: constants.FHEVMID, Name: "F-Chain"}, {GenesisData: []byte(config.ZChainGenesis), VMID: constants.ZKVMID, Name: "Z-Chain"}, {GenesisData: []byte(config.GChainGenesis), VMID: constants.GraphVMID, Name: "G-Chain"}, {GenesisData: []byte(config.KChainGenesis), VMID: constants.KeyVMID, Name: "K-Chain"}, - {GenesisData: []byte(config.MChainGenesis), VMID: constants.ThresholdVMID, Name: "M-Chain"}, + {GenesisData: []byte(config.MChainGenesis), VMID: constants.MPCVMID, Name: "M-Chain"}, } chains := []genesis.Chain{} for _, e := range chainEntries { @@ -795,26 +795,20 @@ func Aliases(genesisBytes []byte) (map[string][]string, map[ids.ID][]string, err path.Join(constants.ChainAliasPrefix, "bridge"), } chainAliases[chainID] = BChainAliases - case constants.ThresholdVMID: - // LP-134: F-Chain (FHE mode) and M-Chain (MPC mode) both run the - // ThresholdVM substrate, so they share constants.ThresholdVMID. - // They are distinct chains — disambiguate by the CreateChainTx's - // BlockchainName (set from the chain entry Name in FromConfig). - if uChain.BlockchainName == "M-Chain" { - apiAliases[endpoint] = []string{ - "M", "mpc", "mpcvm", - path.Join(constants.ChainAliasPrefix, "M"), - path.Join(constants.ChainAliasPrefix, "mpc"), - } - chainAliases[chainID] = MChainAliases - } else { - apiAliases[endpoint] = []string{ - "F", "fhe", "fhevm", - path.Join(constants.ChainAliasPrefix, "F"), - path.Join(constants.ChainAliasPrefix, "fhe"), - } - chainAliases[chainID] = FChainAliases + case constants.MPCVMID: + apiAliases[endpoint] = []string{ + "M", "mpc", "mpcvm", + path.Join(constants.ChainAliasPrefix, "M"), + path.Join(constants.ChainAliasPrefix, "mpc"), } + chainAliases[chainID] = MChainAliases + case constants.FHEVMID: + apiAliases[endpoint] = []string{ + "F", "fhe", "fhevm", + path.Join(constants.ChainAliasPrefix, "F"), + path.Join(constants.ChainAliasPrefix, "fhe"), + } + chainAliases[chainID] = FChainAliases case constants.ZKVMID: apiAliases[endpoint] = []string{ "Z", "zk", "zkvm", diff --git a/configs/lp134_split_test.go b/configs/lp134_split_test.go index 4a5ff44..2d866ed 100644 --- a/configs/lp134_split_test.go +++ b/configs/lp134_split_test.go @@ -111,7 +111,7 @@ func TestLP134_FChainIsFHEOnly(t *testing.T) { t.Fatalf("F-Chain aliases must include %q", want) } } - for _, banned := range []string{"m", "mpc", "mpcvm", "t", "threshold", "thresholdvm"} { + for _, banned := range []string{"m", "mpc", "mpcvm", "t", "threshold", "mpcvm"} { if al[banned] { t.Fatalf("F-Chain must not claim alias %q", banned) } @@ -174,7 +174,10 @@ func TestLP134_MChainIsMPCOnly(t *testing.T) { t.Fatalf("M-Chain aliases must include %q", want) } } - for _, banned := range []string{"f", "fhe", "fhevm", "t", "threshold", "thresholdvm"} { + // M-Chain IS mpcvm (LP-134), so it claims m/mpc/mpcvm (asserted above); + // it must not claim the F-Chain or retired-T aliases. ("mpcvm" was + // erroneously in this banned list, contradicting the required set.) + for _, banned := range []string{"f", "fhe", "fhevm", "t", "threshold"} { if al[banned] { t.Fatalf("M-Chain must not claim alias %q", banned) }