mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-28 07:36:44 +00:00
Add P2P private key
This commit is contained in:
parent
3acd7a12de
commit
449e6a517a
3 changed files with 82 additions and 10 deletions
|
|
@ -9,6 +9,7 @@ import (
|
|||
"syscall"
|
||||
"time"
|
||||
|
||||
"github.com/ethereum/go-ethereum/accounts/keystore"
|
||||
"github.com/ethereum/go-ethereum/eth"
|
||||
"github.com/ethereum/go-ethereum/ethstats"
|
||||
"github.com/ethereum/go-ethereum/log"
|
||||
|
|
@ -85,9 +86,7 @@ func (c *Command) Run(args []string) int {
|
|||
|
||||
// TODO: MakeChain?
|
||||
// TODO: Metrics
|
||||
// TODO: Node key, pre generate one
|
||||
// TODO: apis
|
||||
// TODO: account management
|
||||
// TODO: Graphql
|
||||
// TODO: embed
|
||||
|
||||
|
|
@ -111,6 +110,24 @@ func (c *Command) Run(args []string) int {
|
|||
}
|
||||
}
|
||||
|
||||
// setup account manager (only keystore)
|
||||
{
|
||||
keydir := stack.KeyStoreDir()
|
||||
scryptN := keystore.StandardScryptN
|
||||
scryptP := keystore.StandardScryptP
|
||||
|
||||
stack.AccountManager().AddBackend(keystore.NewKeyStore(keydir, scryptN, scryptP))
|
||||
}
|
||||
|
||||
// sealing (if enabled)
|
||||
if *config.Sealer.Enabled {
|
||||
if err := backend.StartMining(1); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
||||
c.setupMetrics()
|
||||
|
||||
// start the node
|
||||
if err := c.node.Start(); err != nil {
|
||||
panic(err)
|
||||
|
|
@ -118,14 +135,15 @@ func (c *Command) Run(args []string) int {
|
|||
return c.handleSignals()
|
||||
}
|
||||
|
||||
func (c *Command) setupMetrics() {
|
||||
func (c *Command) setupMetrics() error {
|
||||
if !metrics.Enabled {
|
||||
// metrics are globally disabled
|
||||
return
|
||||
return nil
|
||||
}
|
||||
|
||||
// Start system runtime metrics collection
|
||||
go metrics.CollectProcessMetrics(3 * time.Second)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c *Command) handleSignals() int {
|
||||
|
|
|
|||
|
|
@ -1,17 +1,24 @@
|
|||
package server
|
||||
|
||||
import (
|
||||
"crypto/ecdsa"
|
||||
"fmt"
|
||||
"math/big"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
"github.com/ethereum/go-ethereum/command/server/chains"
|
||||
"github.com/ethereum/go-ethereum/common"
|
||||
"github.com/ethereum/go-ethereum/common/fdlimit"
|
||||
"github.com/ethereum/go-ethereum/crypto"
|
||||
"github.com/ethereum/go-ethereum/eth/downloader"
|
||||
"github.com/ethereum/go-ethereum/eth/ethconfig"
|
||||
"github.com/ethereum/go-ethereum/node"
|
||||
"github.com/ethereum/go-ethereum/p2p"
|
||||
"github.com/ethereum/go-ethereum/p2p/enode"
|
||||
"github.com/ethereum/go-ethereum/params"
|
||||
"github.com/imdario/mergo"
|
||||
)
|
||||
|
||||
|
|
@ -78,9 +85,11 @@ type TxPoolConfig struct {
|
|||
}
|
||||
|
||||
type SealerConfig struct {
|
||||
Seal *bool
|
||||
Enabled *bool
|
||||
Etherbase *string
|
||||
ExtraData *string
|
||||
GasCeil *uint64
|
||||
GasPrice *big.Int
|
||||
}
|
||||
|
||||
func DefaultConfig() *Config {
|
||||
|
|
@ -120,7 +129,9 @@ func DefaultConfig() *Config {
|
|||
LifeTime: durPtr(3 * time.Hour),
|
||||
},
|
||||
Sealer: &SealerConfig{
|
||||
Seal: boolPtr(false),
|
||||
Enabled: boolPtr(false),
|
||||
GasCeil: uint64Ptr(8000000),
|
||||
GasPrice: big.NewInt(params.GWei),
|
||||
},
|
||||
}
|
||||
}
|
||||
|
|
@ -173,7 +184,9 @@ func (c *Config) buildEth() (*ethconfig.Config, error) {
|
|||
// miner options
|
||||
{
|
||||
cfg := n.Miner
|
||||
fmt.Println(cfg)
|
||||
cfg.Etherbase = common.HexToAddress(*c.Sealer.Etherbase)
|
||||
cfg.GasPrice = c.Sealer.GasPrice
|
||||
cfg.GasCeil = *c.Sealer.GasCeil
|
||||
}
|
||||
|
||||
// discovery (this params should be in node.Config)
|
||||
|
|
@ -195,10 +208,17 @@ func (c *Config) buildEth() (*ethconfig.Config, error) {
|
|||
return &n, nil
|
||||
}
|
||||
|
||||
var (
|
||||
clientIdentifier = "bor"
|
||||
gitCommit = "" // Git SHA1 commit hash of the release (set via linker flags)
|
||||
gitDate = "" // Git commit date YYYYMMDD of the release (set via linker flags)
|
||||
)
|
||||
|
||||
func (c *Config) buildNode() (*node.Config, error) {
|
||||
cfg := &node.Config{
|
||||
Name: "reader",
|
||||
Name: clientIdentifier,
|
||||
DataDir: *c.DataDir,
|
||||
Version: params.VersionWithCommit(gitCommit, gitDate),
|
||||
P2P: p2p.Config{
|
||||
MaxPeers: int(*c.P2P.MaxPeers),
|
||||
ListenAddr: *c.P2P.Bind + ":" + strconv.Itoa(int(*c.P2P.Port)),
|
||||
|
|
@ -212,8 +232,14 @@ func (c *Config) buildNode() (*node.Config, error) {
|
|||
*/
|
||||
}
|
||||
|
||||
// setup private key for DevP2P if not found
|
||||
devP2PPrivKey, err := readDevP2PKey(*c.DataDir)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
cfg.P2P.PrivateKey = devP2PPrivKey
|
||||
|
||||
// Discovery
|
||||
var err error
|
||||
if cfg.P2P.BootstrapNodes, err = parseBootnodes(c.P2P.Discovery.Bootnodes); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
@ -269,3 +295,31 @@ func parseBootnodes(urls []string) ([]*enode.Node, error) {
|
|||
}
|
||||
return dst, nil
|
||||
}
|
||||
|
||||
const devP2PKeyPath = "devp2p.key"
|
||||
|
||||
func readDevP2PKey(dataDir string) (*ecdsa.PrivateKey, error) {
|
||||
path := filepath.Join(dataDir, devP2PKeyPath)
|
||||
_, err := os.Stat(path)
|
||||
if err != nil && !os.IsNotExist(err) {
|
||||
return nil, fmt.Errorf("failed to stat (%s): %v", path, err)
|
||||
}
|
||||
|
||||
if os.IsNotExist(err) {
|
||||
priv, err := crypto.GenerateKey()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if err := crypto.SaveECDSA(path, priv); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return priv, nil
|
||||
}
|
||||
|
||||
// exists
|
||||
priv, err := crypto.LoadECDSA(path)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return priv, nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@ func (c *Command) Flags() *flagset.Flagset {
|
|||
// sealer options
|
||||
f.BoolFlag(&flagset.BoolFlag{
|
||||
Name: "mine",
|
||||
Value: c.cliConfig.Sealer.Seal,
|
||||
Value: c.cliConfig.Sealer.Enabled,
|
||||
Usage: "",
|
||||
})
|
||||
f.StringFlag(&flagset.StringFlag{
|
||||
|
|
|
|||
Loading…
Reference in a new issue