Skip to content

Commit 8c4bc4f

Browse files
authored
Merge pull request #19814 from karalabe/ulc-fixup
cmd, eth, les: fix up ultra light config integration
2 parents e970d60 + 213690c commit 8c4bc4f

21 files changed

+188
-273
lines changed

cmd/geth/config.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,6 @@ func makeConfigNode(ctx *cli.Context) (*node.Node, gethConfig) {
123123
}
124124

125125
// Apply flags.
126-
utils.SetULC(ctx, &cfg.Eth)
127126
utils.SetNodeConfig(ctx, &cfg.Node)
128127
stack, err := node.New(&cfg.Node)
129128
if err != nil {
@@ -133,7 +132,6 @@ func makeConfigNode(ctx *cli.Context) (*node.Node, gethConfig) {
133132
if ctx.GlobalIsSet(utils.EthStatsURLFlag.Name) {
134133
cfg.Ethstats.URL = ctx.GlobalString(utils.EthStatsURLFlag.Name)
135134
}
136-
137135
utils.SetShhConfig(ctx, stack, &cfg.Shh)
138136
utils.SetDashboardConfig(ctx, &cfg.Dashboard)
139137

cmd/geth/main.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -90,10 +90,6 @@ var (
9090
utils.TxPoolAccountQueueFlag,
9191
utils.TxPoolGlobalQueueFlag,
9292
utils.TxPoolLifetimeFlag,
93-
utils.ULCModeConfigFlag,
94-
utils.OnlyAnnounceModeFlag,
95-
utils.ULCTrustedNodesFlag,
96-
utils.ULCMinTrustedFractionFlag,
9793
utils.SyncModeFlag,
9894
utils.ExitWhenSyncedFlag,
9995
utils.GCModeFlag,
@@ -102,6 +98,9 @@ var (
10298
utils.LightBandwidthOutFlag,
10399
utils.LightPeersFlag,
104100
utils.LightKDFFlag,
101+
utils.UltraLightServersFlag,
102+
utils.UltraLightFractionFlag,
103+
utils.UltraLightOnlyAnnounceFlag,
105104
utils.WhitelistFlag,
106105
utils.CacheFlag,
107106
utils.CacheDatabaseFlag,

cmd/geth/usage.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,9 @@ var AppHelpFlagGroups = []flagGroup{
8686
utils.LightBandwidthInFlag,
8787
utils.LightBandwidthOutFlag,
8888
utils.LightPeersFlag,
89+
utils.UltraLightServersFlag,
90+
utils.UltraLightFractionFlag,
91+
utils.UltraLightOnlyAnnounceFlag,
8992
utils.LightKDFFlag,
9093
utils.WhitelistFlag,
9194
},

cmd/utils/flags.go

Lines changed: 22 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ package utils
1919

2020
import (
2121
"crypto/ecdsa"
22-
"encoding/json"
2322
"errors"
2423
"fmt"
2524
"io/ioutil"
@@ -100,7 +99,6 @@ func NewApp(gitCommit, gitDate, usage string) *cli.App {
10099
app := cli.NewApp()
101100
app.Name = filepath.Base(os.Args[0])
102101
app.Author = ""
103-
//app.Authors = nil
104102
app.Email = ""
105103
app.Version = params.VersionWithCommit(gitCommit, gitDate)
106104
app.Usage = usage
@@ -176,21 +174,19 @@ var (
176174
Name: "exitwhensynced",
177175
Usage: "Exits after block synchronisation completes",
178176
}
179-
ULCModeConfigFlag = cli.StringFlag{
180-
Name: "ulc.config",
181-
Usage: "Config file to use for ultra light client mode",
177+
UltraLightServersFlag = cli.StringFlag{
178+
Name: "ulc.servers",
179+
Usage: "List of trusted ultra-light servers",
180+
Value: strings.Join(eth.DefaultConfig.UltraLightServers, ","),
182181
}
183-
OnlyAnnounceModeFlag = cli.BoolFlag{
184-
Name: "ulc.onlyannounce",
185-
Usage: "ULC server sends announcements only",
186-
}
187-
ULCMinTrustedFractionFlag = cli.IntFlag{
182+
UltraLightFractionFlag = cli.IntFlag{
188183
Name: "ulc.fraction",
189-
Usage: "Minimum % of trusted ULC servers required to announce a new head",
184+
Usage: "Minimum % of trusted ultra-light servers required to announce a new head",
185+
Value: eth.DefaultConfig.UltraLightFraction,
190186
}
191-
ULCTrustedNodesFlag = cli.StringFlag{
192-
Name: "ulc.trusted",
193-
Usage: "List of trusted ULC servers",
187+
UltraLightOnlyAnnounceFlag = cli.BoolFlag{
188+
Name: "ulc.onlyannounce",
189+
Usage: "Ultra light server sends announcements only",
194190
}
195191
IterativeOutputFlag = cli.BoolFlag{
196192
Name: "iterative",
@@ -953,37 +949,20 @@ func setIPC(ctx *cli.Context, cfg *node.Config) {
953949
}
954950
}
955951

956-
// SetULC setup ULC config from file if given.
957-
func SetULC(ctx *cli.Context, cfg *eth.Config) {
958-
// ULC config isn't loaded from global config and ULC config and ULC trusted nodes are not defined.
959-
if cfg.ULC == nil && !(ctx.GlobalIsSet(ULCModeConfigFlag.Name) || ctx.GlobalIsSet(ULCTrustedNodesFlag.Name)) {
960-
return
961-
}
962-
cfg.ULC = &eth.ULCConfig{}
963-
964-
path := ctx.GlobalString(ULCModeConfigFlag.Name)
965-
if path != "" {
966-
cfgData, err := ioutil.ReadFile(path)
967-
if err != nil {
968-
Fatalf("Failed to unmarshal ULC configuration: %v", err)
969-
}
970-
971-
err = json.Unmarshal(cfgData, &cfg.ULC)
972-
if err != nil {
973-
Fatalf("Failed to unmarshal ULC configuration: %s", err.Error())
974-
}
952+
// setUltraLight configures the ultra light client settings from the command line flags.
953+
func setUltraLight(ctx *cli.Context, cfg *eth.Config) {
954+
if ctx.GlobalIsSet(UltraLightServersFlag.Name) {
955+
cfg.UltraLightServers = strings.Split(ctx.GlobalString(UltraLightServersFlag.Name), ",")
975956
}
976-
977-
if trustedNodes := ctx.GlobalString(ULCTrustedNodesFlag.Name); trustedNodes != "" {
978-
cfg.ULC.TrustedServers = strings.Split(trustedNodes, ",")
957+
if ctx.GlobalIsSet(UltraLightFractionFlag.Name) {
958+
cfg.UltraLightFraction = ctx.GlobalInt(UltraLightFractionFlag.Name)
979959
}
980-
981-
if trustedFraction := ctx.GlobalInt(ULCMinTrustedFractionFlag.Name); trustedFraction > 0 {
982-
cfg.ULC.MinTrustedFraction = trustedFraction
960+
if cfg.UltraLightFraction <= 0 && cfg.UltraLightFraction > 100 {
961+
log.Error("Ultra light fraction is invalid", "had", cfg.UltraLightFraction, "updated", eth.DefaultConfig.UltraLightFraction)
962+
cfg.UltraLightFraction = eth.DefaultConfig.UltraLightFraction
983963
}
984-
if cfg.ULC.MinTrustedFraction <= 0 && cfg.ULC.MinTrustedFraction > 100 {
985-
log.Error("MinTrustedFraction is invalid", "MinTrustedFraction", cfg.ULC.MinTrustedFraction, "Changed to default", eth.DefaultULCMinTrustedFraction)
986-
cfg.ULC.MinTrustedFraction = eth.DefaultULCMinTrustedFraction
964+
if ctx.GlobalIsSet(UltraLightOnlyAnnounceFlag.Name) {
965+
cfg.UltraLightOnlyAnnounce = ctx.GlobalBool(UltraLightOnlyAnnounceFlag.Name)
987966
}
988967
}
989968

@@ -1400,6 +1379,7 @@ func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *eth.Config) {
14001379
setEthash(ctx, cfg)
14011380
setMiner(ctx, &cfg.Miner)
14021381
setWhitelist(ctx, cfg)
1382+
setUltraLight(ctx, cfg)
14031383

14041384
if ctx.GlobalIsSet(SyncModeFlag.Name) {
14051385
cfg.SyncMode = *GlobalTextMarshaler(ctx, SyncModeFlag.Name).(*downloader.SyncMode)
@@ -1412,9 +1392,6 @@ func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *eth.Config) {
14121392
if ctx.GlobalIsSet(LightPeersFlag.Name) {
14131393
cfg.LightPeers = ctx.GlobalInt(LightPeersFlag.Name)
14141394
}
1415-
if ctx.GlobalIsSet(OnlyAnnounceModeFlag.Name) {
1416-
cfg.OnlyAnnounce = ctx.GlobalBool(OnlyAnnounceModeFlag.Name)
1417-
}
14181395
if ctx.GlobalIsSet(NetworkIdFlag.Name) {
14191396
cfg.NetworkId = ctx.GlobalUint64(NetworkIdFlag.Name)
14201397
}

eth/config.go

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -43,12 +43,13 @@ var DefaultConfig = Config{
4343
DatasetsInMem: 1,
4444
DatasetsOnDisk: 2,
4545
},
46-
NetworkId: 1,
47-
LightPeers: 100,
48-
DatabaseCache: 512,
49-
TrieCleanCache: 256,
50-
TrieDirtyCache: 256,
51-
TrieTimeout: 60 * time.Minute,
46+
NetworkId: 1,
47+
LightPeers: 100,
48+
UltraLightFraction: 75,
49+
DatabaseCache: 512,
50+
TrieCleanCache: 256,
51+
TrieDirtyCache: 256,
52+
TrieTimeout: 60 * time.Minute,
5253
Miner: miner.Config{
5354
GasFloor: 8000000,
5455
GasCeil: 8000000,
@@ -101,14 +102,15 @@ type Config struct {
101102
Whitelist map[uint64]common.Hash `toml:"-"`
102103

103104
// Light client options
104-
LightServ int `toml:",omitempty"` // Maximum percentage of time allowed for serving LES requests
105-
LightBandwidthIn int `toml:",omitempty"` // Incoming bandwidth limit for light servers
106-
LightBandwidthOut int `toml:",omitempty"` // Outgoing bandwidth limit for light servers
107-
LightPeers int `toml:",omitempty"` // Maximum number of LES client peers
108-
OnlyAnnounce bool // Maximum number of LES client peers
105+
LightServ int `toml:",omitempty"` // Maximum percentage of time allowed for serving LES requests
106+
LightBandwidthIn int `toml:",omitempty"` // Incoming bandwidth limit for light servers
107+
LightBandwidthOut int `toml:",omitempty"` // Outgoing bandwidth limit for light servers
108+
LightPeers int `toml:",omitempty"` // Maximum number of LES client peers
109109

110110
// Ultra Light client options
111-
ULC *ULCConfig `toml:",omitempty"`
111+
UltraLightServers []string `toml:",omitempty"` // List of trusted ultra light servers
112+
UltraLightFraction int `toml:",omitempty"` // Percentage of trusted servers to accept an announcement
113+
UltraLightOnlyAnnounce bool `toml:",omitempty"` // Whether to only announce headers, or also serve them
112114

113115
// Database options
114116
SkipBcVersionCheck bool `toml:"-"`

eth/gen_config.go

Lines changed: 20 additions & 15 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

eth/ulc_config.go

Lines changed: 0 additions & 9 deletions
This file was deleted.

les/backend.go

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -110,12 +110,7 @@ func New(ctx *node.ServiceContext, config *eth.Config) (*LightEthereum, error) {
110110
bloomRequests: make(chan chan *bloombits.Retrieval),
111111
bloomIndexer: eth.NewBloomIndexer(chainDb, params.BloomBitsBlocksClient, params.HelperTrieConfirmations),
112112
}
113-
114-
var trustedNodes []string
115-
if leth.config.ULC != nil {
116-
trustedNodes = leth.config.ULC.TrustedServers
117-
}
118-
leth.serverPool = newServerPool(chainDb, quitSync, &leth.wg, trustedNodes)
113+
leth.serverPool = newServerPool(chainDb, quitSync, &leth.wg, leth.config.UltraLightServers)
119114
leth.retriever = newRetrieveManager(peers, leth.reqDist, leth.serverPool)
120115
leth.relay = newLesTxRelay(peers, leth.retriever)
121116

@@ -159,11 +154,11 @@ func New(ctx *node.ServiceContext, config *eth.Config) (*LightEthereum, error) {
159154
oracle = params.CheckpointOracles[genesisHash]
160155
}
161156
registrar := newCheckpointOracle(oracle, leth.getLocalCheckpoint)
162-
if leth.protocolManager, err = NewProtocolManager(leth.chainConfig, checkpoint, light.DefaultClientIndexerConfig, config.ULC, true, config.NetworkId, leth.eventMux, leth.peers, leth.blockchain, nil, chainDb, leth.odr, leth.serverPool, registrar, quitSync, &leth.wg, nil); err != nil {
157+
if leth.protocolManager, err = NewProtocolManager(leth.chainConfig, checkpoint, light.DefaultClientIndexerConfig, config.UltraLightServers, config.UltraLightFraction, true, config.NetworkId, leth.eventMux, leth.peers, leth.blockchain, nil, chainDb, leth.odr, leth.serverPool, registrar, quitSync, &leth.wg, nil); err != nil {
163158
return nil, err
164159
}
165-
if leth.protocolManager.isULCEnabled() {
166-
log.Warn("Ultra light client is enabled", "trustedNodes", len(leth.protocolManager.ulc.trustedKeys), "minTrustedFraction", leth.protocolManager.ulc.minTrustedFraction)
160+
if leth.protocolManager.ulc != nil {
161+
log.Warn("Ultra light client is enabled", "servers", len(config.UltraLightServers), "fraction", config.UltraLightFraction)
167162
leth.blockchain.DisableCheckFreq()
168163
}
169164
return leth, nil

0 commit comments

Comments
 (0)