diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index 8e1d637e8..5e99b9a87 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -95,6 +95,12 @@ var ( Value: flags.DirectoryString(filepath.Join("", "plugins")), Category: flags.EthCategory, } + // ClassicFlag = &cli.BoolFlag{ + // Name: "Classic", + // Usage: "Sepolia network: pre-configured proof-of-work test network", + // Category: flags.EthCategory, + // } + //end PluGeth code injection DataDirFlag = &flags.DirectoryFlag{ Name: "datadir", @@ -965,7 +971,12 @@ func init() { // if none (or the empty string) is specified. If the node is starting a testnet, // then a subdirectory of the specified datadir will be used. func MakeDataDir(ctx *cli.Context) string { + // begin PluGeth injection if path := ctx.String(DataDirFlag.Name); path != "" { + if pluginPath := pluginDefaultDataDir(path); pluginPath != "" { + return pluginPath + } + // end PluGeth injection if ctx.Bool(RinkebyFlag.Name) { return filepath.Join(path, "rinkeby") } @@ -1018,6 +1029,11 @@ func setNodeUserIdent(ctx *cli.Context, cfg *node.Config) { // flags, reverting to pre-configured ones if none have been specified. func setBootstrapNodes(ctx *cli.Context, cfg *p2p.Config) { urls := params.MainnetBootnodes + // begin PluGeth injection + if pluginUrls := pluginSetBootstrapNodes(); pluginUrls != nil { + urls = pluginUrls + } + // end PluGeth injection switch { case ctx.IsSet(BootnodesFlag.Name): urls = SplitAndTrim(ctx.String(BootnodesFlag.Name)) @@ -1651,6 +1667,18 @@ func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *ethconfig.Config) { setRequiredBlocks(ctx, cfg) setLes(ctx, cfg) + // beginPluGethInjection + if pluginNetworkId := pluginNetworkId(); pluginNetworkId != nil { + cfg.NetworkId = *pluginNetworkId + } + if pluginETHDiscoveryURLs := pluginETHDiscoveryURLs(); pluginETHDiscoveryURLs != nil { + cfg.EthDiscoveryURLs = pluginETHDiscoveryURLs + } + if pluginSnapDiscoveryURLs := pluginSnapDiscoveryURLs(); pluginSnapDiscoveryURLs != nil { + cfg.SnapDiscoveryURLs = pluginSnapDiscoveryURLs + } + //end PluGeth injection + // Cap the cache allowance and tune the garbage collector mem, err := gopsutil.VirtualMemory() if err == nil { diff --git a/cmd/utils/plugin_hooks.go b/cmd/utils/plugin_hooks.go new file mode 100644 index 000000000..d0fdbff91 --- /dev/null +++ b/cmd/utils/plugin_hooks.go @@ -0,0 +1,118 @@ +package utils + +import ( + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/plugins" +) + +func DefaultDataDir(pl *plugins.PluginLoader, path string) string { + log.Error("inside default data dir hook") + dataDirPath := "" + fnList := pl.Lookup("DefaultDataDir", func(item interface{}) bool { + _, ok := item.(func(string) string) + return ok + }) + for _, fni := range fnList { + if fn, ok := fni.(func(string) string); ok { + dataDirPath = fn(path) + } + } + return dataDirPath +} + +func pluginDefaultDataDir(path string) string { + log.Error("inside default data dir injection") + if plugins.DefaultPluginLoader == nil { + log.Warn("Attempting DefaultDataDir, but default PluginLoader has not been initialized") + return "" + } + return DefaultDataDir(plugins.DefaultPluginLoader, path) +} + +func PluginSetBootStrapNodes(pl *plugins.PluginLoader) []string { + var urls []string + fnList := pl.Lookup("SetBootstrapNodes", func(item interface{}) bool { + _, ok := item.(func() []string) + return ok + }) + for _, fni := range fnList { + if fn, ok := fni.(func() []string); ok { + urls = fn() + } + } + return urls +} + +func pluginSetBootstrapNodes() []string { + if plugins.DefaultPluginLoader == nil { + log.Warn("Attempting pluginSetBootStrapNodes, but default PluginLoader has not been initialized") + return nil + } + return PluginSetBootStrapNodes(plugins.DefaultPluginLoader) +} + +func PluginNetworkId(pl *plugins.PluginLoader) *uint64 { + var networkId *uint64 + fnList := pl.Lookup("SetNetworkId", func(item interface{}) bool { + _, ok := item.(func() *uint64) + return ok + }) + for _, fni := range fnList { + if fn, ok := fni.(func() *uint64); ok { + networkId = fn() + } + } + return networkId +} + +func pluginNetworkId() *uint64 { + if plugins.DefaultPluginLoader == nil { + log.Warn("Attempting pluginNetworkID, but default PluginLoader has not been initialized") + return nil + } + return PluginNetworkId(plugins.DefaultPluginLoader) +} + +func PluginETHDiscoveryURLs(pl *plugins.PluginLoader) []string { + var ethDiscoveryURLs []string + fnList := pl.Lookup("SetETHDiscoveryURLs", func(item interface{}) bool { + _, ok := item.(func() []string) + return ok + }) + for _, fni := range fnList { + if fn, ok := fni.(func() []string); ok { + ethDiscoveryURLs = fn() + } + } + return ethDiscoveryURLs +} + +func pluginETHDiscoveryURLs() []string { + if plugins.DefaultPluginLoader == nil { + log.Warn("Attempting pluginETHDiscoveryURLs, but default PluginLoader has not been initialized") + return nil + } + return PluginETHDiscoveryURLs(plugins.DefaultPluginLoader) +} + +func PluginSnapDiscoveryURLs(pl *plugins.PluginLoader) []string { + var snapDiscoveryURLs []string + fnList := pl.Lookup("SetSnapDiscoveryURLs", func(item interface{}) bool { + _, ok := item.(func() []string) + return ok + }) + for _, fni := range fnList { + if fn, ok := fni.(func() []string); ok { + snapDiscoveryURLs = fn() + } + } + return snapDiscoveryURLs +} + +func pluginSnapDiscoveryURLs() []string { + if plugins.DefaultPluginLoader == nil { + log.Warn("Attempting PluginSnapDiscoveryURLs, but default PluginLoader has not been initialized") + return nil + } + return PluginSnapDiscoveryURLs(plugins.DefaultPluginLoader) +} \ No newline at end of file diff --git a/go.mod b/go.mod index e258e5191..de4055416 100644 --- a/go.mod +++ b/go.mod @@ -38,7 +38,7 @@ require ( github.com/graph-gophers/graphql-go v1.3.0 github.com/hashicorp/go-bexpr v0.1.10 github.com/holiman/bloomfilter/v2 v2.0.3 - github.com/holiman/uint256 v1.2.2-0.20230321075855-87b91420868c + github.com/holiman/uint256 v1.2.3 github.com/huin/goupnp v1.0.3 github.com/influxdata/influxdb-client-go/v2 v2.4.0 github.com/influxdata/influxdb1-client v0.0.0-20220302092344-a9ab5670611c diff --git a/go.sum b/go.sum index 2f95dd941..4189574e2 100644 --- a/go.sum +++ b/go.sum @@ -230,8 +230,8 @@ github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09 github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/holiman/bloomfilter/v2 v2.0.3 h1:73e0e/V0tCydx14a0SCYS/EWCxgwLZ18CZcZKVu0fao= github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iURXE7ZOP9L9hSkA= -github.com/holiman/uint256 v1.2.2-0.20230321075855-87b91420868c h1:DZfsyhDK1hnSS5lH8l+JggqzEleHteTYfutAiVlSUM8= -github.com/holiman/uint256 v1.2.2-0.20230321075855-87b91420868c/go.mod h1:SC8Ryt4n+UBbPbIBKaG9zbbDlp4jOru9xFZmPzLUTxw= +github.com/holiman/uint256 v1.2.3 h1:K8UWO1HUJpRMXBxbmaY1Y8IAMZC/RsKB+ArEnnK4l5o= +github.com/holiman/uint256 v1.2.3/go.mod h1:SC8Ryt4n+UBbPbIBKaG9zbbDlp4jOru9xFZmPzLUTxw= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/huin/goupnp v1.0.3 h1:N8No57ls+MnjlB+JPiCVSOyy/ot7MJTqlo7rn+NYSqQ= github.com/huin/goupnp v1.0.3/go.mod h1:ZxNlw5WqJj6wSsRK5+YfflQGXYfccj5VgQsMNixHM7Y=