12
12
flagStakingNodesPath string
13
13
)
14
14
15
- // finallistCmd represents the final list command
15
+ // finalListCmd represents the final list command
16
16
var finalListCmd = & cobra.Command {
17
17
Use : "finallist" ,
18
18
Short : "generates a final list of nodes to be used for next network" ,
@@ -45,92 +45,105 @@ func addFinalListFlags() {
45
45
func finalList (cmd * cobra.Command , args []string ) {
46
46
// read public partner node infos
47
47
log .Info ().Msgf ("reading partner public node information: %s" , flagPartnerNodeInfoDir )
48
- partnerNodes := assemblePartnerNodesWithoutStake ()
48
+ partnerNodes := assemblePartnerNodesWithoutWeight ()
49
49
50
50
// read internal private node infos
51
51
log .Info ().Msgf ("reading internal/flow private node information: %s" , flagInternalNodePrivInfoDir )
52
- flowNodes := assembleInternalNodesWithoutStake ()
52
+ internalNodes := assembleInternalNodesWithoutWeight ()
53
53
54
54
log .Info ().Msg ("checking constraints on consensus/cluster nodes" )
55
- checkConstraints (partnerNodes , flowNodes )
55
+ checkConstraints (partnerNodes , internalNodes )
56
56
57
+ // nodes which are registered on-chain
57
58
log .Info ().Msgf ("reading staking contract node information: %s" , flagStakingNodesPath )
58
- stakingNodes := readStakingContractDetails ()
59
+ registeredNodes := readStakingContractDetails ()
59
60
60
- // merge internal and partner node infos
61
- mixedNodeInfos := mergeNodeInfos (flowNodes , partnerNodes )
61
+ // merge internal and partner node infos (from local files)
62
+ localNodes := mergeNodeInfos (internalNodes , partnerNodes )
62
63
63
64
// reconcile nodes from staking contract nodes
64
- validateNodes (mixedNodeInfos , stakingNodes )
65
+ validateNodes (localNodes , registeredNodes )
65
66
66
67
// write node-config.json with the new list of nodes to be used for the `finalize` command
67
- writeJSON (model .PathFinallist , model .ToPublicNodeInfoList (mixedNodeInfos ))
68
+ writeJSON (model .PathFinallist , model .ToPublicNodeInfoList (localNodes ))
68
69
}
69
70
70
- func validateNodes (nodes []model.NodeInfo , stakingNodes []model.NodeInfo ) {
71
+ func validateNodes (localNodes []model.NodeInfo , registeredNodes []model.NodeInfo ) {
71
72
// check node count
72
- if len (nodes ) != len (stakingNodes ) {
73
- log .Error ().Int ("nodes" , len (nodes )).Int ("staked nodes" , len (stakingNodes )).
74
- Msg ("staked node count does not match flow and parnter node count" )
73
+ if len (localNodes ) != len (registeredNodes ) {
74
+ log .Error ().
75
+ Int ("local" , len (localNodes )).
76
+ Int ("onchain" , len (registeredNodes )).
77
+ Msg ("onchain node count does not match local internal+partner node count" )
75
78
}
76
79
77
- // check staked and collected nodes and make sure node ID are not missing
78
- validateNodeIDs (nodes , stakingNodes )
80
+ // check registered and local nodes to make sure node ID are not missing
81
+ validateNodeIDs (localNodes , registeredNodes )
79
82
80
- // print mis matching nodes
81
- checkMisMatchingNodes ( nodes , stakingNodes )
83
+ // print mismatching nodes
84
+ checkMismatchingNodes ( localNodes , registeredNodes )
82
85
83
86
// create map
84
- nodesByID := make (map [flow.Identifier ]model.NodeInfo )
85
- for _ , node := range nodes {
86
- nodesByID [node .NodeID ] = node
87
+ localNodeMap := make (map [flow.Identifier ]model.NodeInfo )
88
+ for _ , node := range localNodes {
89
+ localNodeMap [node .NodeID ] = node
87
90
}
88
91
89
92
// check node type mismatch
90
- for _ , stakedNode := range stakingNodes {
93
+ for _ , registeredNode := range registeredNodes {
91
94
92
95
// win have matching node as we have a check before
93
- matchingNode := nodesByID [ stakedNode .NodeID ]
96
+ matchingNode := localNodeMap [ registeredNode .NodeID ]
94
97
95
98
// check node type and error if mismatch
96
- if matchingNode .Role != stakedNode .Role {
97
- log .Error ().Str ("staked node" , stakedNode .NodeID .String ()).
98
- Str ("staked node-type" , stakedNode .Role .String ()).
99
- Str ("node" , matchingNode .NodeID .String ()).
100
- Str ("node-type" , matchingNode .Role .String ()).
101
- Msg ("node type does not match" )
99
+ if matchingNode .Role != registeredNode .Role {
100
+ log .Error ().
101
+ Str ("registered node id" , registeredNode .NodeID .String ()).
102
+ Str ("registered node role" , registeredNode .Role .String ()).
103
+ Str ("local node" , matchingNode .NodeID .String ()).
104
+ Str ("local node role" , matchingNode .Role .String ()).
105
+ Msg ("node role does not match" )
102
106
}
103
107
104
- // No need to error adderss, and public keys as they may be different
105
- // we only keep node-id constant through out sporks
108
+ if matchingNode .Address != registeredNode .Address {
109
+ log .Error ().
110
+ Str ("registered node id" , registeredNode .NodeID .String ()).
111
+ Str ("registered node address" , registeredNode .Address ).
112
+ Str ("local node" , matchingNode .NodeID .String ()).
113
+ Str ("local node address" , matchingNode .Address ).
114
+ Msg ("node address does not match" )
115
+ }
106
116
107
117
// check address match
108
- if matchingNode .Address != stakedNode .Address {
109
- log .Warn ().Str ("staked node" , stakedNode .NodeID .String ()).
110
- Str ("node" , matchingNode .NodeID .String ()).
118
+ if matchingNode .Address != registeredNode .Address {
119
+ log .Warn ().
120
+ Str ("registered node" , registeredNode .NodeID .String ()).
121
+ Str ("node id" , matchingNode .NodeID .String ()).
111
122
Msg ("address do not match" )
112
123
}
113
124
114
- // flow nodes contain private key info
125
+ // flow localNodes contain private key info
115
126
if matchingNode .NetworkPubKey ().String () != "" {
116
127
// check networking pubkey match
117
128
matchNodeKey := matchingNode .NetworkPubKey ().String ()
118
- stakedNodeKey := stakedNode .NetworkPubKey ().String ()
129
+ registeredNodeKey := registeredNode .NetworkPubKey ().String ()
119
130
120
- if matchNodeKey != stakedNodeKey {
121
- log .Warn ().Str ("staked network key" , stakedNodeKey ).
131
+ if matchNodeKey != registeredNodeKey {
132
+ log .Error ().
133
+ Str ("registered network key" , registeredNodeKey ).
122
134
Str ("network key" , matchNodeKey ).
123
135
Msg ("networking keys do not match" )
124
136
}
125
137
}
126
138
127
- // flow nodes contain priv atekey info
139
+ // flow localNodes contain privatekey info
128
140
if matchingNode .StakingPubKey ().String () != "" {
129
141
matchNodeKey := matchingNode .StakingPubKey ().String ()
130
- stakedNodeKey := stakedNode .StakingPubKey ().String ()
142
+ registeredNodeKey := registeredNode .StakingPubKey ().String ()
131
143
132
- if matchNodeKey != stakedNodeKey {
133
- log .Warn ().Str ("staked staking key" , stakedNodeKey ).
144
+ if matchNodeKey != registeredNodeKey {
145
+ log .Error ().
146
+ Str ("registered staking key" , registeredNodeKey ).
134
147
Str ("staking key" , matchNodeKey ).
135
148
Msg ("staking keys do not match" )
136
149
}
@@ -140,31 +153,31 @@ func validateNodes(nodes []model.NodeInfo, stakingNodes []model.NodeInfo) {
140
153
141
154
// validateNodeIDs will go through both sets of nodes and ensure that no node-id
142
155
// are missing. It will log all missing node ID's and throw an error.
143
- func validateNodeIDs (collectedNodes []model.NodeInfo , stakedNodes []model.NodeInfo ) {
156
+ func validateNodeIDs (localNodes []model.NodeInfo , registeredNodes []model.NodeInfo ) {
144
157
145
- // go through staking nodes
158
+ // go through registered nodes
146
159
invalidStakingNodes := make ([]model.NodeInfo , 0 )
147
- for _ , node := range stakedNodes {
160
+ for _ , node := range registeredNodes {
148
161
if node .NodeID .String () == "" {
149
162
150
163
// we warn here but exit later
151
164
invalidStakingNodes = append (invalidStakingNodes , node )
152
165
log .Warn ().
153
166
Str ("node-address" , node .Address ).
154
- Msg ("missing node-id from staked nodes" )
167
+ Msg ("missing node-id from registered nodes" )
155
168
}
156
169
}
157
170
158
- // go through staking nodes
171
+ // go through local nodes
159
172
invalidNodes := make ([]model.NodeInfo , 0 )
160
- for _ , node := range collectedNodes {
173
+ for _ , node := range localNodes {
161
174
if node .NodeID .String () == "" {
162
175
163
176
// we warn here but exit later
164
177
invalidNodes = append (invalidNodes , node )
165
178
log .Warn ().
166
179
Str ("node-address" , node .Address ).
167
- Msg ("missing node-id from collected nodes" )
180
+ Msg ("missing node-id from local nodes" )
168
181
}
169
182
}
170
183
@@ -173,43 +186,49 @@ func validateNodeIDs(collectedNodes []model.NodeInfo, stakedNodes []model.NodeIn
173
186
}
174
187
}
175
188
176
- func checkMisMatchingNodes ( collectedNodes []model.NodeInfo , stakedNodes []model.NodeInfo ) {
189
+ func checkMismatchingNodes ( localNodes []model.NodeInfo , registeredNodes []model.NodeInfo ) {
177
190
178
- collectedNodesByID := make (map [flow.Identifier ]model.NodeInfo )
179
- for _ , node := range collectedNodes {
180
- collectedNodesByID [node .NodeID ] = node
191
+ localNodesByID := make (map [flow.Identifier ]model.NodeInfo )
192
+ for _ , node := range localNodes {
193
+ localNodesByID [node .NodeID ] = node
181
194
}
182
195
183
- stakedNodesByID := make (map [flow.Identifier ]model.NodeInfo )
184
- for _ , node := range stakedNodes {
185
- stakedNodesByID [node .NodeID ] = node
196
+ registeredNodesByID := make (map [flow.Identifier ]model.NodeInfo )
197
+ for _ , node := range registeredNodes {
198
+ registeredNodesByID [node .NodeID ] = node
186
199
}
187
200
188
- // try match collected nodes to staked nodes
189
- invalidCollectedNodes := make ([]model.NodeInfo , 0 )
190
- for _ , node := range collectedNodes {
191
- if _ , ok := stakedNodesByID [node .NodeID ]; ! ok {
192
- log .Warn ().Str ("collected-node-id" , node .NodeID .String ()).Str ("role" , node .Role .String ()).Str ("address" , node .Address ).
193
- Msg ("matching staked node not found for collected node" )
194
- invalidCollectedNodes = append (invalidCollectedNodes , node )
201
+ // try match local nodes to registered nodes
202
+ invalidLocalNodes := make ([]model.NodeInfo , 0 )
203
+ for _ , node := range localNodes {
204
+ if _ , ok := registeredNodesByID [node .NodeID ]; ! ok {
205
+ log .Warn ().
206
+ Str ("local-node-id" , node .NodeID .String ()).
207
+ Str ("role" , node .Role .String ()).
208
+ Str ("address" , node .Address ).
209
+ Msg ("matching registered node not found for local node" )
210
+ invalidLocalNodes = append (invalidLocalNodes , node )
195
211
}
196
212
}
197
213
198
- invalidStakedNodes := make ([]model.NodeInfo , 0 )
199
- for _ , node := range stakedNodes {
200
- if _ , ok := collectedNodesByID [node .NodeID ]; ! ok {
201
- log .Warn ().Str ("staked-node-id" , node .NodeID .String ()).Str ("role" , node .Role .String ()).Str ("address" , node .Address ).
202
- Msg ("matching collected node not found for staked node" )
203
- invalidStakedNodes = append (invalidStakedNodes , node )
214
+ invalidRegisteredNodes := make ([]model.NodeInfo , 0 )
215
+ for _ , node := range registeredNodes {
216
+ if _ , ok := localNodesByID [node .NodeID ]; ! ok {
217
+ log .Warn ().
218
+ Str ("registered-node-id" , node .NodeID .String ()).
219
+ Str ("role" , node .Role .String ()).
220
+ Str ("address" , node .Address ).
221
+ Msg ("matching local node not found for local node" )
222
+ invalidRegisteredNodes = append (invalidRegisteredNodes , node )
204
223
}
205
224
}
206
225
207
- if len (invalidCollectedNodes ) != 0 || len (invalidStakedNodes ) != 0 {
226
+ if len (invalidLocalNodes ) != 0 || len (invalidRegisteredNodes ) != 0 {
208
227
log .Fatal ().Msg ("found missing mismatching nodes" )
209
228
}
210
229
}
211
230
212
- func assembleInternalNodesWithoutStake () []model.NodeInfo {
231
+ func assembleInternalNodesWithoutWeight () []model.NodeInfo {
213
232
privInternals := readInternalNodes ()
214
233
log .Info ().Msgf ("read %v internal private node-info files" , len (privInternals ))
215
234
@@ -224,7 +243,7 @@ func assembleInternalNodesWithoutStake() []model.NodeInfo {
224
243
nodeID ,
225
244
internal .Role ,
226
245
internal .Address ,
227
- 1000 ,
246
+ flow . DefaultInitialWeight ,
228
247
internal .NetworkPrivKey ,
229
248
internal .StakingPrivKey ,
230
249
)
@@ -235,7 +254,7 @@ func assembleInternalNodesWithoutStake() []model.NodeInfo {
235
254
return nodes
236
255
}
237
256
238
- func assemblePartnerNodesWithoutStake () []model.NodeInfo {
257
+ func assemblePartnerNodesWithoutWeight () []model.NodeInfo {
239
258
partners := readPartnerNodes ()
240
259
log .Info ().Msgf ("read %v partner node configuration files" , len (partners ))
241
260
return createPublicNodeInfo (partners )
@@ -257,12 +276,12 @@ func createPublicNodeInfo(nodes []model.NodeInfoPub) []model.NodeInfo {
257
276
networkPubKey := validateNetworkPubKey (n .NetworkPubKey )
258
277
stakingPubKey := validateStakingPubKey (n .StakingPubKey )
259
278
260
- // stake set to 1000 to give equal weight to each node
279
+ // all nodes should have equal weight
261
280
node := model .NewPublicNodeInfo (
262
281
nodeID ,
263
282
n .Role ,
264
283
n .Address ,
265
- 1000 ,
284
+ flow . DefaultInitialWeight ,
266
285
networkPubKey ,
267
286
stakingPubKey ,
268
287
)
0 commit comments