diff --git a/cmd/geth/main.go b/cmd/geth/main.go index c2d719d95602562af70f4f60a4f3e2e3ed2bb369..ad7b639a3f174d4e357f673805a47bd4babcef62 100644 --- a/cmd/geth/main.go +++ b/cmd/geth/main.go @@ -88,6 +88,7 @@ func init() { utils.BootnodesFlag, utils.DataDirFlag, utils.KeyStoreDirFlag, + utils.NoUSBFlag, utils.EthashCacheDirFlag, utils.EthashCachesInMemoryFlag, utils.EthashCachesOnDiskFlag, diff --git a/cmd/geth/usage.go b/cmd/geth/usage.go index 4577281546a87c7eb7d99113978796d6185f11fd..9f06a308b3ba86469627b8c620ea620a48e85892 100644 --- a/cmd/geth/usage.go +++ b/cmd/geth/usage.go @@ -67,6 +67,7 @@ var AppHelpFlagGroups = []flagGroup{ configFileFlag, utils.DataDirFlag, utils.KeyStoreDirFlag, + utils.NoUSBFlag, utils.NetworkIdFlag, utils.TestNetFlag, utils.DevModeFlag, diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index b35574c86a2e99e8b16f7ae954d3eb5be475e03e..af9585bd057dbde3e89ebae599a52933e7dedba3 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -115,6 +115,10 @@ var ( Name: "keystore", Usage: "Directory for the keystore (default = inside the datadir)", } + NoUSBFlag = cli.BoolFlag{ + Name: "nousb", + Usage: "Disables monitoring for and managine USB hardware wallets", + } EthashCacheDirFlag = DirectoryFlag{ Name: "ethash.cachedir", Usage: "Directory to store the ethash verification caches (default = inside the datadir)", @@ -729,6 +733,9 @@ func SetNodeConfig(ctx *cli.Context, cfg *node.Config) { if ctx.GlobalIsSet(LightKDFFlag.Name) { cfg.UseLightweightKDF = ctx.GlobalBool(LightKDFFlag.Name) } + if ctx.GlobalIsSet(NoUSBFlag.Name) { + cfg.NoUSB = ctx.GlobalBool(NoUSBFlag.Name) + } } func setGPO(ctx *cli.Context, cfg *gasprice.Config) { diff --git a/node/config.go b/node/config.go index 1bab4c5745f89cc4bfca9bacc61b7ef570de72ab..61e0008ef95b7859bf499b9b7fa0ec77fd849300 100644 --- a/node/config.go +++ b/node/config.go @@ -82,6 +82,9 @@ type Config struct { // scrypt KDF at the expense of security. UseLightweightKDF bool `toml:",omitempty"` + // NoUSB disables hardware wallet monitoring and connectivity. + NoUSB bool `toml:",omitempty"` + // IPCPath is the requested location to place the IPC endpoint. If the path is // a simple file name, it is placed inside the data directory (or on the root // pipe path on Windows), whereas if it's a resolvable path name (absolute or @@ -389,10 +392,12 @@ func makeAccountManager(conf *Config) (*accounts.Manager, string, error) { backends := []accounts.Backend{ keystore.NewKeyStore(keydir, scryptN, scryptP), } - if ledgerhub, err := usbwallet.NewLedgerHub(); err != nil { - log.Warn(fmt.Sprintf("Failed to start Ledger hub, disabling: %v", err)) - } else { - backends = append(backends, ledgerhub) + if !conf.NoUSB { + if ledgerhub, err := usbwallet.NewLedgerHub(); err != nil { + log.Warn(fmt.Sprintf("Failed to start Ledger hub, disabling: %v", err)) + } else { + backends = append(backends, ledgerhub) + } } return accounts.NewManager(backends...), ephemeral, nil }