mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-20 02:42:27 +00:00
cmd/swarm, swarm: add bootnode mode
This commit is contained in:
parent
560957799a
commit
d843e37496
5 changed files with 42 additions and 12 deletions
|
|
@ -79,6 +79,7 @@ const (
|
||||||
SWARM_ENV_STORE_PATH = "SWARM_STORE_PATH"
|
SWARM_ENV_STORE_PATH = "SWARM_STORE_PATH"
|
||||||
SWARM_ENV_STORE_CAPACITY = "SWARM_STORE_CAPACITY"
|
SWARM_ENV_STORE_CAPACITY = "SWARM_STORE_CAPACITY"
|
||||||
SWARM_ENV_STORE_CACHE_CAPACITY = "SWARM_STORE_CACHE_CAPACITY"
|
SWARM_ENV_STORE_CACHE_CAPACITY = "SWARM_STORE_CACHE_CAPACITY"
|
||||||
|
SWARM_ENV_BOOTNODE_MODE = "SWARM_BOOTNODE_MODE"
|
||||||
SWARM_ACCESS_PASSWORD = "SWARM_ACCESS_PASSWORD"
|
SWARM_ACCESS_PASSWORD = "SWARM_ACCESS_PASSWORD"
|
||||||
SWARM_AUTO_DEFAULTPATH = "SWARM_AUTO_DEFAULTPATH"
|
SWARM_AUTO_DEFAULTPATH = "SWARM_AUTO_DEFAULTPATH"
|
||||||
GETH_ENV_DATADIR = "GETH_DATADIR"
|
GETH_ENV_DATADIR = "GETH_DATADIR"
|
||||||
|
|
@ -164,10 +165,9 @@ func configFileOverride(config *bzzapi.Config, ctx *cli.Context) (*bzzapi.Config
|
||||||
return config, err
|
return config, err
|
||||||
}
|
}
|
||||||
|
|
||||||
//override the current config with whatever is provided through the command line
|
// cmdLineOverride overrides the current config with whatever is provided through the command line
|
||||||
//most values are not allowed a zero value (empty string), if not otherwise noted
|
// most values are not allowed a zero value (empty string), if not otherwise noted
|
||||||
func cmdLineOverride(currentConfig *bzzapi.Config, ctx *cli.Context) *bzzapi.Config {
|
func cmdLineOverride(currentConfig *bzzapi.Config, ctx *cli.Context) *bzzapi.Config {
|
||||||
|
|
||||||
if keyid := ctx.GlobalString(SwarmAccountFlag.Name); keyid != "" {
|
if keyid := ctx.GlobalString(SwarmAccountFlag.Name); keyid != "" {
|
||||||
currentConfig.BzzAccount = keyid
|
currentConfig.BzzAccount = keyid
|
||||||
}
|
}
|
||||||
|
|
@ -258,14 +258,17 @@ func cmdLineOverride(currentConfig *bzzapi.Config, ctx *cli.Context) *bzzapi.Con
|
||||||
currentConfig.LocalStoreParams.CacheCapacity = storeCacheCapacity
|
currentConfig.LocalStoreParams.CacheCapacity = storeCacheCapacity
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ctx.GlobalIsSet(SwarmBootnodeModeFlag.Name) {
|
||||||
|
currentConfig.BootnodeMode = ctx.GlobalBool(SwarmBootnodeModeFlag.Name)
|
||||||
|
}
|
||||||
|
|
||||||
return currentConfig
|
return currentConfig
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//override the current config with whatver is provided in environment variables
|
// envVarsOverride overrides the current config with whatver is provided in environment variables
|
||||||
//most values are not allowed a zero value (empty string), if not otherwise noted
|
// most values are not allowed a zero value (empty string), if not otherwise noted
|
||||||
func envVarsOverride(currentConfig *bzzapi.Config) (config *bzzapi.Config) {
|
func envVarsOverride(currentConfig *bzzapi.Config) (config *bzzapi.Config) {
|
||||||
|
|
||||||
if keyid := os.Getenv(SWARM_ENV_ACCOUNT); keyid != "" {
|
if keyid := os.Getenv(SWARM_ENV_ACCOUNT); keyid != "" {
|
||||||
currentConfig.BzzAccount = keyid
|
currentConfig.BzzAccount = keyid
|
||||||
}
|
}
|
||||||
|
|
@ -364,6 +367,14 @@ func envVarsOverride(currentConfig *bzzapi.Config) (config *bzzapi.Config) {
|
||||||
currentConfig.Cors = cors
|
currentConfig.Cors = cors
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if bm := os.Getenv(SWARM_ENV_BOOTNODE_MODE); bm != "" {
|
||||||
|
bootnodeMode, err := strconv.ParseBool(bm)
|
||||||
|
if err != nil {
|
||||||
|
utils.Fatalf("invalid environment variable %s: %v", SWARM_ENV_BOOTNODE_MODE, err)
|
||||||
|
}
|
||||||
|
currentConfig.BootnodeMode = bootnodeMode
|
||||||
|
}
|
||||||
|
|
||||||
return currentConfig
|
return currentConfig
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -156,6 +156,10 @@ var (
|
||||||
Name: "compressed",
|
Name: "compressed",
|
||||||
Usage: "Prints encryption keys in compressed form",
|
Usage: "Prints encryption keys in compressed form",
|
||||||
}
|
}
|
||||||
|
SwarmBootnodeModeFlag = cli.BoolFlag{
|
||||||
|
Name: "bootnode-mode",
|
||||||
|
Usage: "Run Swarm in Bootnode mode",
|
||||||
|
}
|
||||||
SwarmFeedNameFlag = cli.StringFlag{
|
SwarmFeedNameFlag = cli.StringFlag{
|
||||||
Name: "name",
|
Name: "name",
|
||||||
Usage: "User-defined name for the new feed, limited to 32 characters. If combined with topic, it will refer to a subtopic with this name",
|
Usage: "User-defined name for the new feed, limited to 32 characters. If combined with topic, it will refer to a subtopic with this name",
|
||||||
|
|
|
||||||
|
|
@ -187,6 +187,8 @@ func init() {
|
||||||
SwarmUploadDefaultPath,
|
SwarmUploadDefaultPath,
|
||||||
SwarmUpFromStdinFlag,
|
SwarmUpFromStdinFlag,
|
||||||
SwarmUploadMimeType,
|
SwarmUploadMimeType,
|
||||||
|
// bootnode mode
|
||||||
|
SwarmBootnodeModeFlag,
|
||||||
// storage flags
|
// storage flags
|
||||||
SwarmStorePath,
|
SwarmStorePath,
|
||||||
SwarmStoreCapacity,
|
SwarmStoreCapacity,
|
||||||
|
|
|
||||||
|
|
@ -66,6 +66,7 @@ type Config struct {
|
||||||
DeliverySkipCheck bool
|
DeliverySkipCheck bool
|
||||||
MaxStreamPeerServers int
|
MaxStreamPeerServers int
|
||||||
LightNodeEnabled bool
|
LightNodeEnabled bool
|
||||||
|
BootnodeMode bool
|
||||||
SyncUpdateDelay time.Duration
|
SyncUpdateDelay time.Duration
|
||||||
SwapAPI string
|
SwapAPI string
|
||||||
Cors string
|
Cors string
|
||||||
|
|
|
||||||
|
|
@ -84,12 +84,11 @@ type Swarm struct {
|
||||||
tracerClose io.Closer
|
tracerClose io.Closer
|
||||||
}
|
}
|
||||||
|
|
||||||
// creates a new swarm service instance
|
// NewSwarm creates a new swarm service instance
|
||||||
// implements node.Service
|
// implements node.Service
|
||||||
// If mockStore is not nil, it will be used as the storage for chunk data.
|
// If mockStore is not nil, it will be used as the storage for chunk data.
|
||||||
// MockStore should be used only for testing.
|
// MockStore should be used only for testing.
|
||||||
func NewSwarm(config *api.Config, mockStore *mock.NodeStore) (self *Swarm, err error) {
|
func NewSwarm(config *api.Config, mockStore *mock.NodeStore) (self *Swarm, err error) {
|
||||||
|
|
||||||
if bytes.Equal(common.FromHex(config.PublicKey), storage.ZeroAddr) {
|
if bytes.Equal(common.FromHex(config.PublicKey), storage.ZeroAddr) {
|
||||||
return nil, fmt.Errorf("empty public key")
|
return nil, fmt.Errorf("empty public key")
|
||||||
}
|
}
|
||||||
|
|
@ -455,13 +454,26 @@ func (self *Swarm) Stop() error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// implements the node.Service interface
|
// Protocols implements the node.Service interface
|
||||||
func (self *Swarm) Protocols() (protos []p2p.Protocol) {
|
func (self *Swarm) Protocols() (protos []p2p.Protocol) {
|
||||||
|
if self.config.BootnodeMode {
|
||||||
|
protos = []p2p.Protocol{
|
||||||
|
{
|
||||||
|
Name: network.DiscoverySpec.Name,
|
||||||
|
Version: network.DiscoverySpec.Version,
|
||||||
|
Length: network.DiscoverySpec.Length(),
|
||||||
|
Run: self.bzz.RunProtocol(network.DiscoverySpec, self.bzz.Hive.Run),
|
||||||
|
NodeInfo: self.bzz.Hive.NodeInfo,
|
||||||
|
PeerInfo: self.bzz.Hive.PeerInfo,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
} else {
|
||||||
protos = append(protos, self.bzz.Protocols()...)
|
protos = append(protos, self.bzz.Protocols()...)
|
||||||
|
|
||||||
if self.ps != nil {
|
if self.ps != nil {
|
||||||
protos = append(protos, self.ps.Protocols()...)
|
protos = append(protos, self.ps.Protocols()...)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue