Skip to content

Commit c8ef7e0

Browse files
authored
Merge pull request #96 from renproject/fix/validator-interface
Include height and round in the validator interface
2 parents 362ae11 + 1f7d347 commit c8ef7e0

File tree

5 files changed

+31
-26
lines changed

5 files changed

+31
-26
lines changed

process/message.go

+8-3
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,18 @@ import (
77
"github.com/renproject/surge"
88
)
99

10+
// MessageType enumerates the various types of Hyperdrive messages.
1011
type MessageType int8
1112

1213
const (
13-
MessageTypePropose MessageType = 1
14-
MessageTypePrevote MessageType = 2
14+
// MessageTypePropose is the message type for a propose message.
15+
MessageTypePropose MessageType = 1
16+
// MessageTypePrevote is the message type for a prevote message.
17+
MessageTypePrevote MessageType = 2
18+
// MessageTypePrecommit is the message type for a precommit message.
1519
MessageTypePrecommit MessageType = 3
16-
MessageTypeTimeout MessageType = 4
20+
// MessageTypeTimeout is the message type for a timeout message.
21+
MessageTypeTimeout MessageType = 4
1722
)
1823

1924
// String implements the Stringer interface.

process/process.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ type Broadcaster interface {
6262
// A Validator is used to validate a proposed Value. Processes are not required
6363
// to agree on the validity of a Value.
6464
type Validator interface {
65-
Valid(Value) bool
65+
Valid(Height, Round, Value) bool
6666
}
6767

6868
// A Committer is used to emit Values that are committed. The commitment of a
@@ -760,7 +760,7 @@ func (p *Process) insertPropose(propose Propose) bool {
760760
// trace logs as it is an invalid proposal. We return true as we have in fact
761761
// inserted the propose message to our propose logs, while explicitly marking
762762
// it as invalid.
763-
if propose.Value == NilValue || (p.validator != nil && !p.validator.Valid(propose.Value)) {
763+
if propose.Value == NilValue || (p.validator != nil && !p.validator.Valid(propose.Height, propose.Round, propose.Value)) {
764764
p.ProposeLogs[propose.Round] = propose
765765
p.ProposeIsValid[propose.Round] = false
766766
return true

process/process_test.go

+17-17
Original file line numberDiff line numberDiff line change
@@ -614,7 +614,7 @@ var _ = Describe("Process", func() {
614614
}
615615
scheduledProposer := id.NewPrivKey().Signatory()
616616
scheduler := scheduler.NewRoundRobin([]id.Signatory{scheduledProposer})
617-
validator := processutil.MockValidator{MockValid: func(process.Value) bool { return true }}
617+
validator := processutil.MockValidator{MockValid: func(process.Height, process.Round, process.Value) bool { return true }}
618618

619619
p := process.New(whoami, 33, nil, scheduler, nil, validator, broadcaster, nil, nil)
620620
p.StartRound(round)
@@ -656,7 +656,7 @@ var _ = Describe("Process", func() {
656656
}
657657
scheduledProposer := id.NewPrivKey().Signatory()
658658
scheduler := scheduler.NewRoundRobin([]id.Signatory{scheduledProposer})
659-
validator := processutil.MockValidator{MockValid: func(process.Value) bool { return true }}
659+
validator := processutil.MockValidator{MockValid: func(process.Height, process.Round, process.Value) bool { return true }}
660660

661661
p := process.New(whoami, 33, nil, scheduler, nil, validator, broadcaster, nil, nil)
662662
p.StartRound(round)
@@ -702,7 +702,7 @@ var _ = Describe("Process", func() {
702702
}
703703
scheduledProposer := id.NewPrivKey().Signatory()
704704
scheduler := scheduler.NewRoundRobin([]id.Signatory{scheduledProposer})
705-
validator := processutil.MockValidator{MockValid: func(process.Value) bool { return true }}
705+
validator := processutil.MockValidator{MockValid: func(process.Height, process.Round, process.Value) bool { return true }}
706706

707707
p := process.New(whoami, 33, nil, scheduler, nil, validator, broadcaster, nil, nil)
708708
p.StartRound(round)
@@ -747,7 +747,7 @@ var _ = Describe("Process", func() {
747747
}
748748
scheduledProposer := id.NewPrivKey().Signatory()
749749
scheduler := scheduler.NewRoundRobin([]id.Signatory{scheduledProposer})
750-
validator := processutil.MockValidator{MockValid: func(process.Value) bool { return false }}
750+
validator := processutil.MockValidator{MockValid: func(process.Height, process.Round, process.Value) bool { return false }}
751751

752752
p := process.New(whoami, 33, nil, scheduler, nil, validator, broadcaster, nil, nil)
753753
p.StartRound(round)
@@ -876,7 +876,7 @@ var _ = Describe("Process", func() {
876876
}
877877
scheduledProposer := id.NewPrivKey().Signatory()
878878
scheduler := scheduler.NewRoundRobin([]id.Signatory{scheduledProposer})
879-
validator := processutil.MockValidator{MockValid: func(process.Value) bool { return true }}
879+
validator := processutil.MockValidator{MockValid: func(process.Height, process.Round, process.Value) bool { return true }}
880880

881881
p := process.New(whoami, 33, nil, scheduler, nil, validator, broadcaster, nil, nil)
882882
p.StartRound(round)
@@ -917,7 +917,7 @@ var _ = Describe("Process", func() {
917917
}
918918
// the future proposal will be invalid
919919
validator := processutil.MockValidator{
920-
MockValid: func(value process.Value) bool {
920+
MockValid: func(process.Height, process.Round, process.Value) bool {
921921
return false
922922
},
923923
}
@@ -964,7 +964,7 @@ var _ = Describe("Process", func() {
964964
}
965965
// the future proposal will be invalid
966966
validator := processutil.MockValidator{
967-
MockValid: func(value process.Value) bool {
967+
MockValid: func(process.Height, process.Round, process.Value) bool {
968968
return false
969969
},
970970
}
@@ -1055,7 +1055,7 @@ var _ = Describe("Process", func() {
10551055
}
10561056
// the future proposal will be invalid
10571057
validator := processutil.MockValidator{
1058-
MockValid: func(value process.Value) bool {
1058+
MockValid: func(process.Height, process.Round, process.Value) bool {
10591059
return false
10601060
},
10611061
}
@@ -1209,7 +1209,7 @@ var _ = Describe("Process", func() {
12091209
// this scheduler will always schedule the above proposer to propose
12101210
mockScheduler := scheduler.NewRoundRobin([]id.Signatory{scheduledProposer})
12111211
// mock validator that considers any proposal as valid
1212-
mockValidator := processutil.MockValidator{MockValid: func(process.Value) bool { return true }}
1212+
mockValidator := processutil.MockValidator{MockValid: func(process.Height, process.Round, process.Value) bool { return true }}
12131213
// this will be the proposed value
12141214
proposedValue := processutil.RandomValue(r)
12151215
for proposedValue == process.NilValue {
@@ -1275,7 +1275,7 @@ var _ = Describe("Process", func() {
12751275
// this scheduler will always schedule the above proposer to propose
12761276
mockScheduler := scheduler.NewRoundRobin([]id.Signatory{scheduledProposer})
12771277
// mock validator that considers any proposal as valid
1278-
mockValidator := processutil.MockValidator{MockValid: func(process.Value) bool { return true }}
1278+
mockValidator := processutil.MockValidator{MockValid: func(process.Height, process.Round, process.Value) bool { return true }}
12791279
// this will be the proposed value
12801280
proposedValue := processutil.RandomValue(r)
12811281
for proposedValue == process.NilValue {
@@ -1343,7 +1343,7 @@ var _ = Describe("Process", func() {
13431343
// this scheduler will always schedule the above proposer to propose
13441344
mockScheduler := scheduler.NewRoundRobin([]id.Signatory{scheduledProposer})
13451345
// mock validator that considers any proposal as valid
1346-
mockValidator := processutil.MockValidator{MockValid: func(process.Value) bool { return true }}
1346+
mockValidator := processutil.MockValidator{MockValid: func(process.Height, process.Round, process.Value) bool { return true }}
13471347
// this will be the proposed value
13481348
proposedValue := processutil.RandomValue(r)
13491349
for proposedValue == process.NilValue {
@@ -1416,7 +1416,7 @@ var _ = Describe("Process", func() {
14161416
// this scheduler will always schedule the above proposer to propose
14171417
mockScheduler := scheduler.NewRoundRobin([]id.Signatory{scheduledProposer})
14181418
// mock validator that considers any proposal as invalid
1419-
mockValidator := processutil.MockValidator{MockValid: func(process.Value) bool { return false }}
1419+
mockValidator := processutil.MockValidator{MockValid: func(process.Height, process.Round, process.Value) bool { return false }}
14201420
// this will be the proposed value
14211421
proposedValue := processutil.RandomValue(r)
14221422
for proposedValue == process.NilValue {
@@ -1486,7 +1486,7 @@ var _ = Describe("Process", func() {
14861486
// this scheduler will always schedule the above proposer to propose
14871487
mockScheduler := scheduler.NewRoundRobin([]id.Signatory{scheduledProposer})
14881488
// mock validator that considers any proposal as valid
1489-
mockValidator := processutil.MockValidator{MockValid: func(process.Value) bool { return true }}
1489+
mockValidator := processutil.MockValidator{MockValid: func(process.Height, process.Round, process.Value) bool { return true }}
14901490
// this will be the proposed value
14911491
proposedValue := processutil.RandomValue(r)
14921492
for proposedValue == process.NilValue {
@@ -1547,7 +1547,7 @@ var _ = Describe("Process", func() {
15471547
f := 10 + rand.Intn(40)
15481548
scheduledProposer := id.NewPrivKey().Signatory()
15491549
mockScheduler := scheduler.NewRoundRobin([]id.Signatory{scheduledProposer})
1550-
mockValidator := processutil.MockValidator{MockValid: func(process.Value) bool { return true }}
1550+
mockValidator := processutil.MockValidator{MockValid: func(process.Height, process.Round, process.Value) bool { return true }}
15511551
value := processutil.RandomValue(r)
15521552
for value == process.NilValue {
15531553
value = processutil.RandomValue(r)
@@ -2177,7 +2177,7 @@ var _ = Describe("Process", func() {
21772177
}
21782178
scheduledProposer := id.NewPrivKey().Signatory()
21792179
scheduler := scheduler.NewRoundRobin([]id.Signatory{scheduledProposer})
2180-
validator := processutil.MockValidator{MockValid: func(process.Value) bool { return false }}
2180+
validator := processutil.MockValidator{MockValid: func(process.Height, process.Round, process.Value) bool { return false }}
21812181

21822182
// instantiate a new process and its state
21832183
p := process.New(whoami, f, nil, scheduler, nil, validator, broadcaster, nil, nil)
@@ -2682,7 +2682,7 @@ var _ = Describe("Process", func() {
26822682
}
26832683
scheduledProposer := id.NewPrivKey().Signatory()
26842684
scheduler := scheduler.NewRoundRobin([]id.Signatory{scheduledProposer})
2685-
validator := processutil.MockValidator{MockValid: func(process.Value) bool { return true }}
2685+
validator := processutil.MockValidator{MockValid: func(process.Height, process.Round, process.Value) bool { return true }}
26862686

26872687
// instantiate a new process at the current round and height
26882688
// and at any valid step
@@ -2914,7 +2914,7 @@ var _ = Describe("Process", func() {
29142914
Fail("unexpectedly received a commit")
29152915
},
29162916
}
2917-
validator := processutil.MockValidator{MockValid: func(process.Value) bool { return false }}
2917+
validator := processutil.MockValidator{MockValid: func(process.Height, process.Round, process.Value) bool { return false }}
29182918

29192919
// instantiate a new process at the current round and height
29202920
// and at any valid step

process/processutil/processutil.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -69,15 +69,15 @@ func (p MockProposer) Propose(height process.Height, round process.Round) proces
6969
// MockValidator is a mock implementation of the Validator interface
7070
// It always returns the MockValid value as its validation check
7171
type MockValidator struct {
72-
MockValid func(value process.Value) bool
72+
MockValid func(height process.Height, round process.Round, value process.Value) bool
7373
}
7474

7575
// Valid implements the validation behaviour as required by the Validator interface
7676
// The MockValidator's valid method does not take into consideration the
7777
// received propose message, but simply returns the MockValid value as its
7878
// validation check
79-
func (v MockValidator) Valid(value process.Value) bool {
80-
return v.MockValid(value)
79+
func (v MockValidator) Valid(height process.Height, round process.Round, value process.Value) bool {
80+
return v.MockValid(height, round, value)
8181
}
8282

8383
// CatcherCallbacks provide callback functions to test the Catcher interface

replica/replica_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ var _ = Describe("Replica", func() {
140140
},
141141
// Validator
142142
processutil.MockValidator{
143-
MockValid: func(value process.Value) bool {
143+
MockValid: func(_ process.Height, _ process.Round, value process.Value) bool {
144144
// if this is a malicious replica, but less than f total malicious
145145
if validationFn != nil && replicaIndex < f {
146146
return validationFn(value)

0 commit comments

Comments
 (0)