mirror of
https://github.com/luxfi/netrunner.git
synced 2026-07-27 00:04:23 +00:00
refactor: use constants for network/chain IDs, fix paths
- cmd/multinet.go: Use constants.MainnetID (1), TestnetID (2), etc. - cmd/start.go: Use constants, add devnet support - All data dirs now use ~/.lux/networks/ instead of /tmp/ - Network IDs (P-Chain): 1, 2, 3, 1337 - Chain IDs (C-Chain EVM): 96369, 96368, 96370, 1337
This commit is contained in:
+32
-26
@@ -7,6 +7,7 @@ import (
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
"github.com/luxfi/constants"
|
||||
"github.com/luxfi/log"
|
||||
"github.com/luxfi/netrunner/multinet"
|
||||
"github.com/spf13/cobra"
|
||||
@@ -108,13 +109,14 @@ func runStartMulti(cmd *cobra.Command, args []string) error {
|
||||
|
||||
func loadDefaultNetworks(manager *multinet.MultiNetworkManager) error {
|
||||
// Lux Mainnet configuration
|
||||
// Network ID: 1 (P-Chain), Chain ID for EVM: 96369
|
||||
mainnetConfig := multinet.NetworkConfig{
|
||||
NetworkID: 96369,
|
||||
NetworkID: constants.MainnetID, // 1 (P-Chain network identifier)
|
||||
Name: "Lux Mainnet",
|
||||
Type: multinet.NetworkTypePrimary,
|
||||
HTTPPort: 9630,
|
||||
StakingPort: 9631,
|
||||
DataDir: "/tmp/multinetwork/mainnet",
|
||||
DataDir: "~/.lux/networks/mainnet",
|
||||
Validators: 5,
|
||||
ChainConfig: []multinet.ChainConfig{
|
||||
{
|
||||
@@ -127,20 +129,21 @@ func loadDefaultNetworks(manager *multinet.MultiNetworkManager) error {
|
||||
},
|
||||
{
|
||||
ChainID: "2bXe2MhhAnXg6WGj6G8oDk55AKT1dMMsN72S8te7JdvzfZX1zM",
|
||||
VMID: "mgj786NP7uDwBCcq6YwThhaN8FLyybkCa4zBWTQbNgmK6k9A6", // EVM
|
||||
VMID: "mgj786NP7uDwBCcq6YwThhaN8FLyybkCa4zBWTQbNgmK6k9A6", // EVM (C-Chain ID: 96369)
|
||||
IsEVM: true,
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
// Lux Testnet configuration
|
||||
// Network ID: 2 (P-Chain), Chain ID for EVM: 96368
|
||||
testnetConfig := multinet.NetworkConfig{
|
||||
NetworkID: 96368,
|
||||
NetworkID: constants.TestnetID, // 2 (P-Chain network identifier)
|
||||
Name: "Lux Testnet",
|
||||
Type: multinet.NetworkTypePrimary,
|
||||
HTTPPort: 9620,
|
||||
StakingPort: 9621,
|
||||
DataDir: "/tmp/multinetwork/testnet",
|
||||
DataDir: "~/.lux/networks/testnet",
|
||||
Validators: 3,
|
||||
ChainConfig: []multinet.ChainConfig{
|
||||
{
|
||||
@@ -153,33 +156,34 @@ func loadDefaultNetworks(manager *multinet.MultiNetworkManager) error {
|
||||
},
|
||||
{
|
||||
ChainID: "2sdADEgBC3NjLM4inKc1hY1PQpCT3JVyGVJxdmcq6sqrDndjFG",
|
||||
VMID: "mgj786NP7uDwBCcq6YwThhaN8FLyybkCa4zBWTQbNgmK6k9A6", // EVM
|
||||
VMID: "mgj786NP7uDwBCcq6YwThhaN8FLyybkCa4zBWTQbNgmK6k9A6", // EVM (C-Chain ID: 96368)
|
||||
IsEVM: true,
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
// Zoo Chain on Mainnet
|
||||
// Zoo Chain on Mainnet (L2 EVM on Lux)
|
||||
// Zoo is an L2 EVM chain, NOT a P-Chain network
|
||||
zooMainnetConfig := multinet.NetworkConfig{
|
||||
NetworkID: 200200,
|
||||
Name: "Zoo Network (Mainnet Chain)",
|
||||
NetworkID: 200200, // Zoo L2 EVM Chain ID
|
||||
Name: "Zoo Network (Mainnet L2)",
|
||||
Type: multinet.NetworkTypeChain,
|
||||
ParentID: 96369,
|
||||
HTTPPort: 0, // Uses parent network's port
|
||||
StakingPort: 0, // Uses parent network's port
|
||||
DataDir: "/tmp/multinetwork/mainnet/chains/zoo",
|
||||
ParentID: constants.MainnetID, // Parent is Lux Mainnet (1)
|
||||
HTTPPort: 0, // Uses parent network's port
|
||||
StakingPort: 0, // Uses parent network's port
|
||||
DataDir: "~/.lux/networks/mainnet/chains/zoo",
|
||||
Validators: 5,
|
||||
}
|
||||
|
||||
// Hanzo Chain on Mainnet
|
||||
hanzoMainnetConfig := multinet.NetworkConfig{
|
||||
NetworkID: 36963,
|
||||
NetworkID: constants.QChainMainnetID, // 36963 (Q-Chain)
|
||||
Name: "Hanzo Network (Mainnet Chain)",
|
||||
Type: multinet.NetworkTypeChain,
|
||||
ParentID: 96369,
|
||||
ParentID: constants.MainnetID, // Parent is Lux Mainnet (1)
|
||||
HTTPPort: 0,
|
||||
StakingPort: 0,
|
||||
DataDir: "/tmp/multinetwork/mainnet/chains/hanzo",
|
||||
DataDir: "~/.lux/networks/mainnet/chains/hanzo",
|
||||
Validators: 5,
|
||||
}
|
||||
|
||||
@@ -223,39 +227,41 @@ func loadNetworksFromFile(manager *multinet.MultiNetworkManager, path string) er
|
||||
|
||||
func runConfigure(cmd *cobra.Command, args []string) error {
|
||||
// Create default configuration
|
||||
// Network IDs: 1 (mainnet), 2 (testnet), 3 (devnet)
|
||||
// Chain IDs for EVM: 96369 (mainnet), 96368 (testnet), 96370 (devnet)
|
||||
configs := []multinet.NetworkConfig{
|
||||
{
|
||||
NetworkID: 96369,
|
||||
NetworkID: constants.MainnetID, // 1
|
||||
Name: "Lux Mainnet",
|
||||
Type: multinet.NetworkTypePrimary,
|
||||
HTTPPort: 9630,
|
||||
StakingPort: 9631,
|
||||
DataDir: "/tmp/multinetwork/mainnet",
|
||||
DataDir: "~/.lux/networks/mainnet",
|
||||
Validators: 5,
|
||||
},
|
||||
{
|
||||
NetworkID: 96368,
|
||||
NetworkID: constants.TestnetID, // 2
|
||||
Name: "Lux Testnet",
|
||||
Type: multinet.NetworkTypePrimary,
|
||||
HTTPPort: 9620,
|
||||
StakingPort: 9621,
|
||||
DataDir: "/tmp/multinetwork/testnet",
|
||||
DataDir: "~/.lux/networks/testnet",
|
||||
Validators: 3,
|
||||
},
|
||||
{
|
||||
NetworkID: 200200,
|
||||
NetworkID: 200200, // Zoo L2 Chain ID
|
||||
Name: "Zoo Network",
|
||||
Type: multinet.NetworkTypeChain,
|
||||
ParentID: 96369,
|
||||
DataDir: "/tmp/multinetwork/mainnet/chains/zoo",
|
||||
ParentID: constants.MainnetID, // 1
|
||||
DataDir: "~/.lux/networks/mainnet/chains/zoo",
|
||||
Validators: 5,
|
||||
},
|
||||
{
|
||||
NetworkID: 36963,
|
||||
NetworkID: constants.QChainMainnetID, // 36963
|
||||
Name: "Hanzo Network",
|
||||
Type: multinet.NetworkTypeChain,
|
||||
ParentID: 96369,
|
||||
DataDir: "/tmp/multinetwork/mainnet/chains/hanzo",
|
||||
ParentID: constants.MainnetID, // 1
|
||||
DataDir: "~/.lux/networks/mainnet/chains/hanzo",
|
||||
Validators: 5,
|
||||
},
|
||||
}
|
||||
|
||||
+15
-5
@@ -6,6 +6,7 @@ import (
|
||||
"os/signal"
|
||||
"syscall"
|
||||
|
||||
"github.com/luxfi/constants"
|
||||
"github.com/luxfi/keys"
|
||||
"github.com/luxfi/log"
|
||||
"github.com/luxfi/netrunner/local"
|
||||
@@ -173,26 +174,35 @@ func getNetworkConfig(network string) multinet.NetworkConfig {
|
||||
switch network {
|
||||
case "mainnet":
|
||||
return multinet.NetworkConfig{
|
||||
NetworkID: 96369,
|
||||
NetworkID: constants.MainnetID, // 1
|
||||
Name: "Lux Mainnet",
|
||||
Type: multinet.NetworkTypePrimary,
|
||||
HTTPPort: 9630,
|
||||
StakingPort: 9631,
|
||||
DataDir: "/tmp/netrunner/mainnet",
|
||||
DataDir: "~/.lux/networks/mainnet",
|
||||
Validators: 5,
|
||||
}
|
||||
case "testnet":
|
||||
return multinet.NetworkConfig{
|
||||
NetworkID: 96368,
|
||||
NetworkID: constants.TestnetID, // 2
|
||||
Name: "Lux Testnet",
|
||||
Type: multinet.NetworkTypePrimary,
|
||||
HTTPPort: 9620,
|
||||
StakingPort: 9621,
|
||||
DataDir: "/tmp/netrunner/testnet",
|
||||
DataDir: "~/.lux/networks/testnet",
|
||||
Validators: 3,
|
||||
}
|
||||
case "devnet":
|
||||
return multinet.NetworkConfig{
|
||||
NetworkID: constants.DevnetID, // 3
|
||||
Name: "Lux Devnet",
|
||||
Type: multinet.NetworkTypePrimary,
|
||||
HTTPPort: 9610,
|
||||
StakingPort: 9611,
|
||||
DataDir: "~/.lux/networks/devnet",
|
||||
Validators: 3,
|
||||
}
|
||||
default:
|
||||
// Could be a chain name
|
||||
return multinet.NetworkConfig{}
|
||||
}
|
||||
}
|
||||
|
||||
+23
-15
@@ -252,7 +252,9 @@ func (ln *localNetwork) waitForChainsDiscoveredOnAllNodes(
|
||||
}
|
||||
|
||||
discovered := false
|
||||
attemptCount := 0
|
||||
for time.Now().Before(deadline) {
|
||||
attemptCount++
|
||||
// Try to query the chain RPC endpoint with eth_chainId - if it responds, the chain is discovered
|
||||
chainRPCURL := fmt.Sprintf("%s/ext/bc/%s/rpc", node.GetURL(), blockchainID)
|
||||
// Use a proper JSON-RPC request body to ensure the EVM endpoint responds
|
||||
@@ -271,27 +273,33 @@ func (ln *localNetwork) waitForChainsDiscoveredOnAllNodes(
|
||||
// Check if we got a valid response (not a 404 or other error)
|
||||
if resp.StatusCode == 200 {
|
||||
discovered = true
|
||||
ln.log.Debug("chain discovered on node",
|
||||
ln.log.Info("chain discovered on node",
|
||||
"node", nodeName,
|
||||
"blockchain-id", blockchainID,
|
||||
"status", resp.StatusCode,
|
||||
"attempts", attemptCount,
|
||||
"response", string(body),
|
||||
)
|
||||
break
|
||||
}
|
||||
ln.log.Debug("chain endpoint returned non-200",
|
||||
"node", nodeName,
|
||||
"blockchain-id", blockchainID,
|
||||
"status", resp.StatusCode,
|
||||
"response", string(body),
|
||||
)
|
||||
if attemptCount%10 == 0 {
|
||||
ln.log.Warn("chain endpoint returned non-200",
|
||||
"node", nodeName,
|
||||
"blockchain-id", blockchainID,
|
||||
"status", resp.StatusCode,
|
||||
"attempts", attemptCount,
|
||||
"response", string(body),
|
||||
)
|
||||
}
|
||||
} else {
|
||||
ln.log.Debug("chain not yet discovered, waiting",
|
||||
"node", nodeName,
|
||||
"blockchain-id", blockchainID,
|
||||
"error", err.Error(),
|
||||
"url", chainRPCURL,
|
||||
)
|
||||
if attemptCount%10 == 0 {
|
||||
ln.log.Warn("chain not yet discovered, waiting",
|
||||
"node", nodeName,
|
||||
"blockchain-id", blockchainID,
|
||||
"error", err.Error(),
|
||||
"attempts", attemptCount,
|
||||
"url", chainRPCURL,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
select {
|
||||
@@ -303,7 +311,7 @@ func (ln *localNetwork) waitForChainsDiscoveredOnAllNodes(
|
||||
}
|
||||
|
||||
if !discovered {
|
||||
return fmt.Errorf("chain %s not discovered on node %s after %v", blockchainID, nodeName, maxWait)
|
||||
return fmt.Errorf("chain %s not discovered on node %s after %v (%d attempts)", blockchainID, nodeName, maxWait, attemptCount)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+17
-10
@@ -275,12 +275,12 @@ func NewConfigForNetwork(binaryPath string, numNodes uint32, networkID uint32) (
|
||||
|
||||
// NewMainnetConfig creates a network config for LUX Mainnet (network ID 96369)
|
||||
func NewMainnetConfig(binaryPath string, numNodes uint32) (network.Config, error) {
|
||||
return NewConfigForNetwork(binaryPath, numNodes, configs.LuxMainnetID)
|
||||
return NewConfigForNetwork(binaryPath, numNodes, configs.MainnetChainID)
|
||||
}
|
||||
|
||||
// NewTestnetConfig creates a network config for LUX Testnet (network ID 96368)
|
||||
func NewTestnetConfig(binaryPath string, numNodes uint32) (network.Config, error) {
|
||||
return NewConfigForNetwork(binaryPath, numNodes, configs.LuxTestnetID)
|
||||
return NewConfigForNetwork(binaryPath, numNodes, configs.TestnetChainID)
|
||||
}
|
||||
|
||||
// NewLocalConfig creates a network config for local development (network ID 1337)
|
||||
@@ -504,7 +504,7 @@ func NewMainnetConfigWithKeys(binaryPath string, keysDir string) (network.Config
|
||||
if keysDir == "" {
|
||||
keysDir = DefaultKeysPath()
|
||||
}
|
||||
return NewConfigWithPreExistingKeys(binaryPath, configs.LuxMainnetID, keysDir)
|
||||
return NewConfigWithPreExistingKeys(binaryPath, configs.MainnetChainID, keysDir)
|
||||
}
|
||||
|
||||
// NewTestnetConfigWithKeys creates a testnet config using pre-existing validator keys
|
||||
@@ -512,7 +512,7 @@ func NewTestnetConfigWithKeys(binaryPath string, keysDir string) (network.Config
|
||||
if keysDir == "" {
|
||||
keysDir = DefaultKeysPath()
|
||||
}
|
||||
return NewConfigWithPreExistingKeys(binaryPath, configs.LuxTestnetID, keysDir)
|
||||
return NewConfigWithPreExistingKeys(binaryPath, configs.TestnetChainID, keysDir)
|
||||
}
|
||||
|
||||
// NewConfigFromMnemonic creates a network config by deriving validator keys from LUX_MNEMONIC.
|
||||
@@ -641,14 +641,21 @@ func NewConfigFromMnemonic(binaryPath string, networkID uint32, numNodes uint32)
|
||||
}
|
||||
|
||||
// Configure node configs with derived keys
|
||||
// Start with default flags from netConfig.Flags and add per-node overrides
|
||||
netConfig.NodeConfigs = make([]node.Config, numNodes)
|
||||
for i, vk := range validatorKeys {
|
||||
port := 9630 + int(i)*2
|
||||
// Copy default network flags to each node
|
||||
nodeFlags := make(map[string]interface{})
|
||||
for k, v := range netConfig.Flags {
|
||||
nodeFlags[k] = v
|
||||
}
|
||||
// Add per-node specific flags
|
||||
nodeFlags[config.HTTPPortKey] = port
|
||||
nodeFlags[config.StakingPortKey] = port + 1
|
||||
|
||||
netConfig.NodeConfigs[i] = node.Config{
|
||||
Flags: map[string]interface{}{
|
||||
config.HTTPPortKey: port,
|
||||
config.StakingPortKey: port + 1,
|
||||
},
|
||||
Flags: nodeFlags,
|
||||
StakingKey: string(vk.StakerKey),
|
||||
StakingCert: string(vk.StakerCert),
|
||||
StakingSigningKey: base64.StdEncoding.EncodeToString(vk.BLSSecretKey),
|
||||
@@ -665,12 +672,12 @@ func NewConfigFromMnemonic(binaryPath string, networkID uint32, numNodes uint32)
|
||||
|
||||
// NewMainnetConfigFromMnemonic creates mainnet config from LUX_MNEMONIC
|
||||
func NewMainnetConfigFromMnemonic(binaryPath string, numNodes uint32) (network.Config, error) {
|
||||
return NewConfigFromMnemonic(binaryPath, configs.LuxMainnetID, numNodes)
|
||||
return NewConfigFromMnemonic(binaryPath, configs.MainnetChainID, numNodes)
|
||||
}
|
||||
|
||||
// NewTestnetConfigFromMnemonic creates testnet config from LUX_MNEMONIC
|
||||
func NewTestnetConfigFromMnemonic(binaryPath string, numNodes uint32) (network.Config, error) {
|
||||
return NewConfigFromMnemonic(binaryPath, configs.LuxTestnetID, numNodes)
|
||||
return NewConfigFromMnemonic(binaryPath, configs.TestnetChainID, numNodes)
|
||||
}
|
||||
|
||||
// NewLocalConfigFromMnemonic creates local network config from LUX_MNEMONIC
|
||||
|
||||
Reference in New Issue
Block a user