mirror of
https://github.com/luxfi/netrunner.git
synced 2026-07-27 00:04:23 +00:00
122 lines
4.1 KiB
Go
122 lines
4.1 KiB
Go
package network
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"time"
|
|
|
|
"github.com/luxfi/netrunner/network/node"
|
|
"github.com/luxfi/node/ids"
|
|
)
|
|
|
|
var (
|
|
ErrUndefined = errors.New("undefined network")
|
|
ErrStopped = errors.New("network stopped")
|
|
ErrNodeNotFound = errors.New("node not found in network")
|
|
)
|
|
|
|
type PermissionlessValidatorSpec struct {
|
|
SubnetID string
|
|
AssetID string
|
|
NodeName string
|
|
StakedAmount uint64
|
|
StartTime time.Time
|
|
StakeDuration time.Duration
|
|
}
|
|
|
|
type ElasticSubnetSpec struct {
|
|
SubnetID *string
|
|
AssetName string
|
|
AssetSymbol string
|
|
InitialSupply uint64
|
|
MaxSupply uint64
|
|
MinConsumptionRate uint64
|
|
MaxConsumptionRate uint64
|
|
MinValidatorStake uint64
|
|
MaxValidatorStake uint64
|
|
MinStakeDuration time.Duration
|
|
MaxStakeDuration time.Duration
|
|
MinDelegationFee uint32
|
|
MinDelegatorStake uint64
|
|
MaxValidatorWeightFactor byte
|
|
UptimeRequirement uint32
|
|
}
|
|
|
|
type SubnetSpec struct {
|
|
Participants []string
|
|
SubnetConfig []byte
|
|
}
|
|
|
|
type RemoveSubnetValidatorSpec struct {
|
|
NodeNames []string
|
|
SubnetID string
|
|
}
|
|
|
|
type BlockchainSpec struct {
|
|
VMName string
|
|
Genesis []byte
|
|
SubnetID *string
|
|
SubnetSpec *SubnetSpec
|
|
ChainConfig []byte
|
|
NetworkUpgrade []byte
|
|
BlockchainAlias string
|
|
PerNodeChainConfig map[string][]byte
|
|
}
|
|
|
|
// Network is an abstraction of an Lux network
|
|
type Network interface {
|
|
// Returns nil if all the nodes in the network are healthy.
|
|
// A stopped network is considered unhealthy.
|
|
// Timeout is given by the context parameter.
|
|
Healthy(context.Context) error
|
|
// Stop all the nodes.
|
|
// Returns ErrStopped if Stop() was previously called.
|
|
Stop(context.Context) error
|
|
// Start a new node with the given config.
|
|
// Returns ErrStopped if Stop() was previously called.
|
|
AddNode(node.Config) (node.Node, error)
|
|
// Stop the node with this name.
|
|
// Returns ErrStopped if Stop() was previously called.
|
|
RemoveNode(ctx context.Context, name string) error
|
|
// Pause the node with this name.
|
|
// Returns ErrStopped if Stop() was previously called.
|
|
PauseNode(ctx context.Context, name string) error
|
|
// Resume the node with this name.
|
|
// Returns ErrStopped if Stop() was previously called.
|
|
ResumeNode(ctx context.Context, name string) error
|
|
// Return the node with this name.
|
|
// Returns ErrStopped if Stop() was previously called.
|
|
GetNode(name string) (node.Node, error)
|
|
// Return all the nodes in this network.
|
|
// Node name --> Node.
|
|
// Returns ErrStopped if Stop() was previously called.
|
|
GetAllNodes() (map[string]node.Node, error)
|
|
// Returns the names of all nodes in this network.
|
|
// Returns ErrStopped if Stop() was previously called.
|
|
GetNodeNames() ([]string, error)
|
|
// Save network snapshot
|
|
// Network is stopped in order to do a safe preservation
|
|
// Returns the full local path to the snapshot dir
|
|
SaveSnapshot(context.Context, string) (string, error)
|
|
// Remove network snapshot
|
|
RemoveSnapshot(string) error
|
|
// Get name of available snapshots
|
|
GetSnapshotNames() ([]string, error)
|
|
// Restart a given node using the same config, optionally changing binary path, plugin dir,
|
|
// track subnets, a map of chain configs, a map of upgrade configs, and
|
|
// a map of subnet configs
|
|
RestartNode(context.Context, string, string, string, string, map[string]string, map[string]string, map[string]string) error
|
|
// Create the specified blockchains
|
|
CreateBlockchains(context.Context, []BlockchainSpec) ([]ids.ID, error)
|
|
// Create the given numbers of subnets
|
|
CreateSubnets(context.Context, []SubnetSpec) ([]ids.ID, error)
|
|
// Transform subnet into elastic subnet
|
|
TransformSubnet(context.Context, []ElasticSubnetSpec) ([]ids.ID, []ids.ID, error)
|
|
// Add a validator into an elastic subnet
|
|
AddPermissionlessValidators(context.Context, []PermissionlessValidatorSpec) error
|
|
// Remove a validator from a subnet
|
|
RemoveSubnetValidators(context.Context, []RemoveSubnetValidatorSpec) error
|
|
// Get the elastic subnet tx id for the given subnet id
|
|
GetElasticSubnetID(context.Context, ids.ID) (ids.ID, error)
|
|
}
|