-
Notifications
You must be signed in to change notification settings - Fork 151
/
core.go
100 lines (84 loc) · 2.98 KB
/
core.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
package protocfg
import (
"encoding/json"
flag "github.com/spf13/pflag"
"go.uber.org/dig"
"github.com/gohornet/hornet/pkg/model/coordinator"
"github.com/gohornet/hornet/pkg/node"
"github.com/iotaledger/hive.go/configuration"
iotago "github.com/iotaledger/iota.go/v2"
)
const (
// the ed25519 public key of the coordinator in hex representation
CfgProtocolPublicKeyRangesJSON = "publicKeyRanges"
// the ed25519 public key of the coordinator in hex representation
CfgProtocolPublicKeyRanges = "protocol.publicKeyRanges"
// the minimum PoW score required by the network
CfgProtocolMinPoWScore = "protocol.minPoWScore"
// the network ID on which this node operates on.
CfgProtocolNetworkIDName = "protocol.networkID"
// the HRP which should be used for Bech32 addresses.
CfgProtocolBech32HRP = "protocol.bech32HRP"
// the amount of public keys in a milestone
CfgProtocolMilestonePublicKeyCount = "protocol.milestonePublicKeyCount"
)
func init() {
flag.CommandLine.MarkHidden(CfgProtocolPublicKeyRangesJSON)
CorePlugin = &node.CorePlugin{
Pluggable: node.Pluggable{
Name: "ProtoCfg",
Params: &node.PluginParams{
Params: map[string]*flag.FlagSet{
"nodeConfig": func() *flag.FlagSet {
fs := flag.NewFlagSet("", flag.ContinueOnError)
fs.Float64(CfgProtocolMinPoWScore, 4000, "the minimum PoW score required by the network.")
fs.Int(CfgProtocolMilestonePublicKeyCount, 2, "the amount of public keys in a milestone")
fs.String(CfgProtocolNetworkIDName, "iota", "the network ID on which this node operates on.")
fs.String(CfgProtocolBech32HRP, string(iotago.PrefixMainnet), "the HRP which should be used for Bech32 addresses.")
return fs
}(),
},
Masked: nil,
},
Provide: provide,
},
}
}
var (
CorePlugin *node.CorePlugin
)
var cooPubKeyRangesFlag = flag.String(CfgProtocolPublicKeyRangesJSON, "", "overwrite public key ranges (JSON)")
func provide(c *dig.Container) {
type tangledeps struct {
dig.In
NodeConfig *configuration.Configuration `name:"nodeConfig"`
}
type protoresult struct {
dig.Out
PublicKeyRanges coordinator.PublicKeyRanges
NetworkID uint64 `name:"networkId"`
Bech32HRP iotago.NetworkPrefix `name:"bech32HRP"`
MinPoWScore float64 `name:"minPoWScore"`
}
if err := c.Provide(func(deps tangledeps) protoresult {
res := protoresult{
NetworkID: iotago.NetworkIDFromString(deps.NodeConfig.String(CfgProtocolNetworkIDName)),
Bech32HRP: iotago.NetworkPrefix(deps.NodeConfig.String(CfgProtocolBech32HRP)),
MinPoWScore: deps.NodeConfig.Float64(CfgProtocolMinPoWScore),
}
if *cooPubKeyRangesFlag != "" {
// load from special CLI flag
if err := json.Unmarshal([]byte(*cooPubKeyRangesFlag), &res.PublicKeyRanges); err != nil {
panic(err)
}
return res
}
// load from config
if err := deps.NodeConfig.Unmarshal(CfgProtocolPublicKeyRanges, &res.PublicKeyRanges); err != nil {
panic(err)
}
return res
}); err != nil {
panic(err)
}
}