forked from seeleteam/go-seele
-
Notifications
You must be signed in to change notification settings - Fork 0
/
config.go
132 lines (113 loc) · 3.77 KB
/
config.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/**
* @file
* @copyright defined in go-seele/LICENSE
*/
package cmd
import (
"encoding/json"
"errors"
"io/ioutil"
"math/big"
"path/filepath"
"runtime"
"github.com/seeleteam/go-seele/cmd/util"
"github.com/seeleteam/go-seele/common"
"github.com/seeleteam/go-seele/core"
"github.com/seeleteam/go-seele/crypto"
"github.com/seeleteam/go-seele/log/comm"
"github.com/seeleteam/go-seele/node"
"github.com/seeleteam/go-seele/p2p"
)
// GetConfigFromFile unmarshals the config from the given file
func GetConfigFromFile(filepath string) (*util.Config, error) {
var config util.Config
buff, err := ioutil.ReadFile(filepath)
if err != nil {
return &config, err
}
err = json.Unmarshal(buff, &config)
return &config, err
}
// LoadConfigFromFile gets node config from the given file
func LoadConfigFromFile(configFile string, accounts string) (*node.Config, error) {
cmdConfig, err := GetConfigFromFile(configFile)
if err != nil {
return nil, err
}
if cmdConfig.GenesisConfig.CreateTimestamp == nil {
return nil, errors.New("Failed to get genesis timestamp")
}
cmdConfig.GenesisConfig.Accounts, err = LoadAccountConfig(accounts)
if err != nil {
return nil, err
}
config := CopyConfig(cmdConfig)
convertIPCServerPath(cmdConfig, config)
config.P2PConfig, err = GetP2pConfig(cmdConfig)
if err != nil {
return config, err
}
if len(config.BasicConfig.Coinbase) > 0 {
config.SeeleConfig.Coinbase = common.HexMustToAddres(config.BasicConfig.Coinbase)
}
if len(config.BasicConfig.PrivateKey) > 0 {
config.SeeleConfig.CoinbasePrivateKey, err = crypto.LoadECDSAFromString(config.BasicConfig.PrivateKey)
if err != nil {
return config, err
}
}
config.SeeleConfig.TxConf = *core.DefaultTxPoolConfig()
config.SeeleConfig.GenesisConfig = cmdConfig.GenesisConfig
comm.LogConfiguration.PrintLog = config.LogConfig.PrintLog
comm.LogConfiguration.IsDebug = config.LogConfig.IsDebug
comm.LogConfiguration.DataDir = config.BasicConfig.DataDir
config.BasicConfig.DataDir = filepath.Join(common.GetDefaultDataFolder(), config.BasicConfig.DataDir)
config.BasicConfig.DataSetDir = filepath.Join(common.GetTempFolder(), config.BasicConfig.DataDir)
return config, nil
}
// convertIPCServerPath convert the config to the real path
func convertIPCServerPath(cmdConfig *util.Config, config *node.Config) {
if cmdConfig.Ipcconfig.PipeName == "" {
config.IpcConfig.PipeName = common.GetDefaultIPCPath()
} else if runtime.GOOS == "windows" {
config.IpcConfig.PipeName = common.WindowsPipeDir + cmdConfig.Ipcconfig.PipeName
} else {
config.IpcConfig.PipeName = filepath.Join(common.GetDefaultDataFolder(), cmdConfig.Ipcconfig.PipeName)
}
}
// CopyConfig copy Config from the given config
func CopyConfig(cmdConfig *util.Config) *node.Config {
config := &node.Config{
BasicConfig: cmdConfig.BasicConfig,
LogConfig: cmdConfig.LogConfig,
HTTPServer: cmdConfig.HTTPServer,
WSServerConfig: cmdConfig.WSServerConfig,
P2PConfig: cmdConfig.P2PConfig,
SeeleConfig: node.SeeleConfig{},
MetricsConfig: cmdConfig.MetricsConfig,
}
return config
}
// GetP2pConfig get P2PConfig from the given config
func GetP2pConfig(cmdConfig *util.Config) (p2p.Config, error) {
if cmdConfig.P2PConfig.PrivateKey == nil {
key, err := crypto.LoadECDSAFromString(cmdConfig.P2PConfig.SubPrivateKey) // GetP2pConfigPrivateKey get privateKey from the given config
if err != nil {
return cmdConfig.P2PConfig, err
}
cmdConfig.P2PConfig.PrivateKey = key
}
return cmdConfig.P2PConfig, nil
}
func LoadAccountConfig(account string) (map[common.Address]*big.Int, error) {
result := make(map[common.Address]*big.Int)
if account == "" {
return result, nil
}
buff, err := ioutil.ReadFile(account)
if err != nil {
return result, err
}
err = json.Unmarshal(buff, &result)
return result, err
}