Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
G
Geth-Modification
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
张蕾
Geth-Modification
Commits
e9689286
Commit
e9689286
authored
Feb 20, 2015
by
Felix Lange
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
eth: persist node key between sessions (#304)
parent
e282ad25
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
27 additions
and
6 deletions
+27
-6
backend.go
eth/backend.go
+27
-6
No files found.
eth/backend.go
View file @
e9689286
...
...
@@ -3,6 +3,8 @@ package eth
import
(
"crypto/ecdsa"
"fmt"
"io/ioutil"
"path"
"strings"
"github.com/ethereum/go-ethereum/core"
...
...
@@ -80,6 +82,27 @@ func (cfg *Config) parseBootNodes() []*discover.Node {
return
ns
}
func
(
cfg
*
Config
)
nodeKey
()
(
*
ecdsa
.
PrivateKey
,
error
)
{
// use explicit key from command line args if set
if
cfg
.
NodeKey
!=
nil
{
return
cfg
.
NodeKey
,
nil
}
// use persistent key if present
keyfile
:=
path
.
Join
(
cfg
.
DataDir
,
"nodekey"
)
key
,
err
:=
crypto
.
LoadECDSA
(
keyfile
)
if
err
==
nil
{
return
key
,
nil
}
// no persistent key, generate and store a new one
if
key
,
err
=
crypto
.
GenerateKey
();
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"could not generate server key: %v"
,
err
)
}
if
err
:=
ioutil
.
WriteFile
(
keyfile
,
crypto
.
FromECDSA
(
key
),
0600
);
err
!=
nil
{
logger
.
Errorln
(
"could not persist nodekey: "
,
err
)
}
return
key
,
nil
}
type
Ethereum
struct
{
// Channel for shutting down the ethereum
shutdownChan
chan
bool
...
...
@@ -164,18 +187,16 @@ func New(config *Config) (*Ethereum, error) {
insertChain
:=
eth
.
chainManager
.
InsertChain
eth
.
blockPool
=
NewBlockPool
(
hasBlock
,
insertChain
,
ezp
.
Verify
)
netprv
,
err
:=
config
.
nodeKey
()
if
err
!=
nil
{
return
nil
,
err
}
ethProto
:=
EthProtocol
(
eth
.
txPool
,
eth
.
chainManager
,
eth
.
blockPool
)
protocols
:=
[]
p2p
.
Protocol
{
ethProto
}
if
config
.
Shh
{
protocols
=
append
(
protocols
,
eth
.
whisper
.
Protocol
())
}
netprv
:=
config
.
NodeKey
if
netprv
==
nil
{
if
netprv
,
err
=
crypto
.
GenerateKey
();
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"could not generate server key: %v"
,
err
)
}
}
eth
.
net
=
&
p2p
.
Server
{
PrivateKey
:
netprv
,
Name
:
config
.
Name
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment