plugeth/cmd/utils/plugin_hooks.go
2023-10-23 13:25:54 -07:00

140 lines
3.7 KiB
Go

package utils
import (
"encoding/json"
"github.com/ethereum/go-ethereum/core"
"github.com/ethereum/go-ethereum/log"
"github.com/ethereum/go-ethereum/plugins"
)
func DefaultDataDir(pl *plugins.PluginLoader, path string) string {
dataDirPath := ""
fnList := pl.Lookup("SetDefaultDataDir", 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 {
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, mode bool) []string {
var ethDiscoveryURLs []string
fnList := pl.Lookup("SetETHDiscoveryURLs", func(item interface{}) bool {
_, ok := item.(func(bool) []string)
return ok
})
for _, fni := range fnList {
if fn, ok := fni.(func(bool) []string); ok {
ethDiscoveryURLs = fn(mode)
}
}
return ethDiscoveryURLs
}
func pluginETHDiscoveryURLs(mode bool) []string {
if plugins.DefaultPluginLoader == nil {
log.Warn("Attempting pluginETHDiscoveryURLs, but default PluginLoader has not been initialized")
return nil
}
return PluginETHDiscoveryURLs(plugins.DefaultPluginLoader, mode)
}
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)
}
func PluginGenesisBlock(pl *plugins.PluginLoader) *core.Genesis {
genesisJSON, ok := plugins.LookupOne[func() []byte](pl, "GenesisBlock")
if !ok {
return nil
}
var genesis core.Genesis
if err := json.Unmarshal(genesisJSON(), &genesis); err != nil {
log.Warn("Error unmarshalling genesis", "err", err)
return nil
}
return &genesis
}
func pluginGenesisBlock() *core.Genesis {
if plugins.DefaultPluginLoader == nil {
log.Warn("Attempting PluginGenesisBlock, but default PluginLoader has not been initialized")
return nil
}
return PluginGenesisBlock(plugins.DefaultPluginLoader)
}