Skip to content

Commit 5f9bb08

Browse files
StephenButtolphDan Laine
andauthored
Add height voting for chits (#2102)
Signed-off-by: Stephen Buttolph <stephen@avalabs.org> Co-authored-by: Dan Laine <daniel.laine@avalabs.org>
1 parent 1eaf40b commit 5f9bb08

23 files changed

+556
-303
lines changed

message/inbound_msg_builder.go

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -199,18 +199,20 @@ func InboundPushQuery(
199199
requestID uint32,
200200
deadline time.Duration,
201201
container []byte,
202+
requestedHeight uint64,
202203
nodeID ids.NodeID,
203204
engineType p2p.EngineType,
204205
) InboundMessage {
205206
return &inboundMessage{
206207
nodeID: nodeID,
207208
op: PushQueryOp,
208209
message: &p2p.PushQuery{
209-
ChainId: chainID[:],
210-
RequestId: requestID,
211-
Deadline: uint64(deadline),
212-
Container: container,
213-
EngineType: engineType,
210+
ChainId: chainID[:],
211+
RequestId: requestID,
212+
Deadline: uint64(deadline),
213+
Container: container,
214+
RequestedHeight: requestedHeight,
215+
EngineType: engineType,
214216
},
215217
expiration: time.Now().Add(deadline),
216218
}
@@ -221,18 +223,20 @@ func InboundPullQuery(
221223
requestID uint32,
222224
deadline time.Duration,
223225
containerID ids.ID,
226+
requestedHeight uint64,
224227
nodeID ids.NodeID,
225228
engineType p2p.EngineType,
226229
) InboundMessage {
227230
return &inboundMessage{
228231
nodeID: nodeID,
229232
op: PullQueryOp,
230233
message: &p2p.PullQuery{
231-
ChainId: chainID[:],
232-
RequestId: requestID,
233-
Deadline: uint64(deadline),
234-
ContainerId: containerID[:],
235-
EngineType: engineType,
234+
ChainId: chainID[:],
235+
RequestId: requestID,
236+
Deadline: uint64(deadline),
237+
ContainerId: containerID[:],
238+
RequestedHeight: requestedHeight,
239+
EngineType: engineType,
236240
},
237241
expiration: time.Now().Add(deadline),
238242
}
@@ -242,17 +246,19 @@ func InboundChits(
242246
chainID ids.ID,
243247
requestID uint32,
244248
preferredID ids.ID,
249+
preferredIDAtHeight ids.ID,
245250
acceptedID ids.ID,
246251
nodeID ids.NodeID,
247252
) InboundMessage {
248253
return &inboundMessage{
249254
nodeID: nodeID,
250255
op: ChitsOp,
251256
message: &p2p.Chits{
252-
ChainId: chainID[:],
253-
RequestId: requestID,
254-
PreferredId: preferredID[:],
255-
AcceptedId: acceptedID[:],
257+
ChainId: chainID[:],
258+
RequestId: requestID,
259+
PreferredId: preferredID[:],
260+
PreferredIdAtHeight: preferredIDAtHeight[:],
261+
AcceptedId: acceptedID[:],
256262
},
257263
expiration: mockable.MaxTime,
258264
}

message/inbound_msg_builder_test.go

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -33,18 +33,19 @@ func Test_newMsgBuilder(t *testing.T) {
3333

3434
func TestInboundMsgBuilder(t *testing.T) {
3535
var (
36-
chainID = ids.GenerateTestID()
37-
requestID uint32 = 12345
38-
deadline = time.Hour
39-
nodeID = ids.GenerateTestNodeID()
40-
summary = []byte{9, 8, 7}
41-
appBytes = []byte{1, 3, 3, 7}
42-
container = []byte{1, 2, 3, 4, 5, 6, 7, 8, 9}
43-
containerIDs = []ids.ID{ids.GenerateTestID(), ids.GenerateTestID()}
44-
acceptedContainerIDs = []ids.ID{ids.GenerateTestID(), ids.GenerateTestID()}
45-
summaryIDs = []ids.ID{ids.GenerateTestID(), ids.GenerateTestID()}
46-
heights = []uint64{1000, 2000}
47-
engineType = p2p.EngineType_ENGINE_TYPE_SNOWMAN
36+
chainID = ids.GenerateTestID()
37+
requestID uint32 = 12345
38+
deadline = time.Hour
39+
nodeID = ids.GenerateTestNodeID()
40+
summary = []byte{9, 8, 7}
41+
appBytes = []byte{1, 3, 3, 7}
42+
container = []byte{1, 2, 3, 4, 5, 6, 7, 8, 9}
43+
containerIDs = []ids.ID{ids.GenerateTestID(), ids.GenerateTestID()}
44+
requestedHeight uint64 = 999
45+
acceptedContainerID = ids.GenerateTestID()
46+
summaryIDs = []ids.ID{ids.GenerateTestID(), ids.GenerateTestID()}
47+
heights = []uint64{1000, 2000}
48+
engineType = p2p.EngineType_ENGINE_TYPE_SNOWMAN
4849
)
4950

5051
t.Run(
@@ -267,6 +268,7 @@ func TestInboundMsgBuilder(t *testing.T) {
267268
requestID,
268269
deadline,
269270
container,
271+
requestedHeight,
270272
nodeID,
271273
engineType,
272274
)
@@ -281,6 +283,7 @@ func TestInboundMsgBuilder(t *testing.T) {
281283
require.Equal(chainID[:], innerMsg.ChainId)
282284
require.Equal(requestID, innerMsg.RequestId)
283285
require.Equal(container, innerMsg.Container)
286+
require.Equal(requestedHeight, innerMsg.RequestedHeight)
284287
require.Equal(engineType, innerMsg.EngineType)
285288
},
286289
)
@@ -296,6 +299,7 @@ func TestInboundMsgBuilder(t *testing.T) {
296299
requestID,
297300
deadline,
298301
containerIDs[0],
302+
requestedHeight,
299303
nodeID,
300304
engineType,
301305
)
@@ -310,6 +314,7 @@ func TestInboundMsgBuilder(t *testing.T) {
310314
require.Equal(chainID[:], innerMsg.ChainId)
311315
require.Equal(requestID, innerMsg.RequestId)
312316
require.Equal(containerIDs[0][:], innerMsg.ContainerId)
317+
require.Equal(requestedHeight, innerMsg.RequestedHeight)
313318
require.Equal(engineType, innerMsg.EngineType)
314319
},
315320
)
@@ -323,7 +328,8 @@ func TestInboundMsgBuilder(t *testing.T) {
323328
chainID,
324329
requestID,
325330
containerIDs[0],
326-
acceptedContainerIDs[0],
331+
containerIDs[1],
332+
acceptedContainerID,
327333
nodeID,
328334
)
329335

@@ -335,7 +341,8 @@ func TestInboundMsgBuilder(t *testing.T) {
335341
require.Equal(chainID[:], innerMsg.ChainId)
336342
require.Equal(requestID, innerMsg.RequestId)
337343
require.Equal(containerIDs[0][:], innerMsg.PreferredId)
338-
require.Equal(acceptedContainerIDs[0][:], innerMsg.AcceptedId)
344+
require.Equal(containerIDs[1][:], innerMsg.PreferredIdAtHeight)
345+
require.Equal(acceptedContainerID[:], innerMsg.AcceptedId)
339346
},
340347
)
341348

message/mock_outbound_message_builder.go

Lines changed: 12 additions & 12 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

message/outbound_msg_builder.go

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,7 @@ type OutboundMsgBuilder interface {
133133
requestID uint32,
134134
deadline time.Duration,
135135
container []byte,
136+
requestedHeight uint64,
136137
engineType p2p.EngineType,
137138
) (OutboundMessage, error)
138139

@@ -141,13 +142,15 @@ type OutboundMsgBuilder interface {
141142
requestID uint32,
142143
deadline time.Duration,
143144
containerID ids.ID,
145+
requestedHeight uint64,
144146
engineType p2p.EngineType,
145147
) (OutboundMessage, error)
146148

147149
Chits(
148150
chainID ids.ID,
149151
requestID uint32,
150152
preferredID ids.ID,
153+
preferredIDAtHeight ids.ID,
151154
acceptedID ids.ID,
152155
) (OutboundMessage, error)
153156

@@ -560,17 +563,19 @@ func (b *outMsgBuilder) PushQuery(
560563
requestID uint32,
561564
deadline time.Duration,
562565
container []byte,
566+
requestedHeight uint64,
563567
engineType p2p.EngineType,
564568
) (OutboundMessage, error) {
565569
return b.builder.createOutbound(
566570
&p2p.Message{
567571
Message: &p2p.Message_PushQuery{
568572
PushQuery: &p2p.PushQuery{
569-
ChainId: chainID[:],
570-
RequestId: requestID,
571-
Deadline: uint64(deadline),
572-
Container: container,
573-
EngineType: engineType,
573+
ChainId: chainID[:],
574+
RequestId: requestID,
575+
Deadline: uint64(deadline),
576+
Container: container,
577+
RequestedHeight: requestedHeight,
578+
EngineType: engineType,
574579
},
575580
},
576581
},
@@ -584,17 +589,19 @@ func (b *outMsgBuilder) PullQuery(
584589
requestID uint32,
585590
deadline time.Duration,
586591
containerID ids.ID,
592+
requestedHeight uint64,
587593
engineType p2p.EngineType,
588594
) (OutboundMessage, error) {
589595
return b.builder.createOutbound(
590596
&p2p.Message{
591597
Message: &p2p.Message_PullQuery{
592598
PullQuery: &p2p.PullQuery{
593-
ChainId: chainID[:],
594-
RequestId: requestID,
595-
Deadline: uint64(deadline),
596-
ContainerId: containerID[:],
597-
EngineType: engineType,
599+
ChainId: chainID[:],
600+
RequestId: requestID,
601+
Deadline: uint64(deadline),
602+
ContainerId: containerID[:],
603+
RequestedHeight: requestedHeight,
604+
EngineType: engineType,
598605
},
599606
},
600607
},
@@ -607,16 +614,18 @@ func (b *outMsgBuilder) Chits(
607614
chainID ids.ID,
608615
requestID uint32,
609616
preferredID ids.ID,
617+
preferredIDAtHeight ids.ID,
610618
acceptedID ids.ID,
611619
) (OutboundMessage, error) {
612620
return b.builder.createOutbound(
613621
&p2p.Message{
614622
Message: &p2p.Message_Chits{
615623
Chits: &p2p.Chits{
616-
ChainId: chainID[:],
617-
RequestId: requestID,
618-
PreferredId: preferredID[:],
619-
AcceptedId: acceptedID[:],
624+
ChainId: chainID[:],
625+
RequestId: requestID,
626+
PreferredId: preferredID[:],
627+
PreferredIdAtHeight: preferredIDAtHeight[:],
628+
AcceptedId: acceptedID[:],
620629
},
621630
},
622631
},

proto/p2p/p2p.proto

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -303,6 +303,7 @@ message PushQuery {
303303
uint64 deadline = 3;
304304
bytes container = 4;
305305
EngineType engine_type = 5;
306+
uint64 requested_height = 6;
306307
}
307308

308309
// Message that contains a preferred container ID to query other peers
@@ -316,6 +317,7 @@ message PullQuery {
316317
uint64 deadline = 3;
317318
bytes container_id = 4;
318319
EngineType engine_type = 5;
320+
uint64 requested_height = 6;
319321
}
320322

321323
// Message that contains the votes/preferences of the node. It is sent in
@@ -326,14 +328,14 @@ message PullQuery {
326328
// will respond with a "get" message to fetch the missing block from the remote
327329
// peer.
328330
message Chits {
329-
reserved 5; // Until Cortina upgrade is activated
330-
331331
bytes chain_id = 1;
332332
uint32 request_id = 2;
333333
// Represents the current preferred block.
334334
bytes preferred_id = 3;
335335
// Represents the last accepted block.
336336
bytes accepted_id = 4;
337+
// Represents the current preferred block at the requested height.
338+
bytes preferred_id_at_height = 5;
337339
}
338340

339341
message AppRequest {

0 commit comments

Comments
 (0)