Skip to content

Commit 6f12bfa

Browse files
cristalolegrenaynay
authored andcommitted
feat(verify): remove height check in Verify (#216)
Remove `heightThreshold` check in `Verify` func.
1 parent c3a0082 commit 6f12bfa

File tree

4 files changed

+23
-33
lines changed

4 files changed

+23
-33
lines changed

headertest/verify_test.go

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -87,17 +87,22 @@ func TestVerify(t *testing.T) {
8787
},
8888
{
8989
prepare: func() *DummyHeader {
90-
untrusted := next()
91-
untrusted.HeightI += 100000
92-
return untrusted
90+
return zero
9391
},
94-
err: header.ErrHeightFromFuture,
92+
err: header.ErrZeroHeader,
93+
},
94+
{
95+
trusted: zero,
96+
prepare: func() *DummyHeader {
97+
return next()
98+
},
99+
err: header.ErrZeroHeader,
95100
},
96101
}
97102

98103
for i, test := range tests {
99104
t.Run(strconv.Itoa(i), func(t *testing.T) {
100-
err := header.Verify(trusted, test.prepare(), 0)
105+
err := header.Verify(test.trusted, test.prepare())
101106
if test.err != nil {
102107
var verErr *header.VerifyError
103108
assert.ErrorAs(t, err, &verErr)

p2p/exchange.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ func (ex *Exchange[H]) Head(ctx context.Context, opts ...header.HeadOption[H]) (
182182
}
183183
// if tracked (untrusted) peers were requested, verify head
184184
if useTrackedPeers {
185-
err = header.Verify[H](reqParams.TrustedHead, headers[0], header.DefaultHeightThreshold)
185+
err = header.Verify[H](reqParams.TrustedHead, headers[0])
186186
if err != nil {
187187
var verErr *header.VerifyError
188188
if errors.As(err, &verErr) && verErr.SoftFailure {

sync/sync_head.go

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -167,13 +167,7 @@ func (s *Syncer[H]) verify(ctx context.Context, newHead H) (bool, error) {
167167
return true, &header.VerifyError{Reason: err, SoftFailure: true}
168168
}
169169

170-
var heightThreshold uint64
171-
if s.Params.TrustingPeriod != 0 && s.Params.blockTime != 0 {
172-
buffer := time.Hour * 48 / s.Params.blockTime // generous buffer to account for variable block time
173-
heightThreshold = uint64(s.Params.TrustingPeriod/s.Params.blockTime + buffer)
174-
}
175-
176-
err = header.Verify(sbjHead, newHead, heightThreshold)
170+
err = header.Verify(sbjHead, newHead)
177171
if err == nil {
178172
return false, nil
179173
}

verify.go

Lines changed: 11 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,11 @@ const DefaultHeightThreshold uint64 = 80000 // ~ 14 days of 15 second headers
1313
// Verify verifies untrusted Header against trusted following general Header checks and
1414
// custom user-specific checks defined in Header.Verify
1515
//
16-
// If heightThreshold is zero, uses DefaultHeightThreshold.
16+
// Given headers must be non-zero
1717
// Always returns VerifyError.
18-
func Verify[H Header[H]](trstd, untrstd H, heightThreshold uint64) error {
18+
func Verify[H Header[H]](trstd, untrstd H) error {
1919
// general mandatory verification
20-
err := verify[H](trstd, untrstd, heightThreshold)
20+
err := verify[H](trstd, untrstd)
2121
if err != nil {
2222
return &VerifyError{Reason: err}
2323
}
@@ -45,11 +45,10 @@ func Verify[H Header[H]](trstd, untrstd H, heightThreshold uint64) error {
4545

4646
// verify is a little bro of Verify yet performs mandatory Header checks
4747
// for any Header implementation.
48-
func verify[H Header[H]](trstd, untrstd H, heightThreshold uint64) error {
49-
if heightThreshold == 0 {
50-
heightThreshold = DefaultHeightThreshold
48+
func verify[H Header[H]](trstd, untrstd H) error {
49+
if trstd.IsZero() {
50+
return ErrZeroHeader
5151
}
52-
5352
if untrstd.IsZero() {
5453
return ErrZeroHeader
5554
}
@@ -71,24 +70,16 @@ func verify[H Header[H]](trstd, untrstd H, heightThreshold uint64) error {
7170
if known {
7271
return fmt.Errorf("%w: '%d' <= current '%d'", ErrKnownHeader, untrstd.Height(), trstd.Height())
7372
}
74-
// reject headers with height too far from the future
75-
// this is essential for headers failed non-adjacent verification
76-
// yet taken as sync target
77-
adequateHeight := untrstd.Height()-trstd.Height() < heightThreshold
78-
if !adequateHeight {
79-
return fmt.Errorf("%w: '%d' - current '%d' >= threshold '%d'", ErrHeightFromFuture, untrstd.Height(), trstd.Height(), heightThreshold)
80-
}
8173

8274
return nil
8375
}
8476

8577
var (
86-
ErrZeroHeader = errors.New("zero header")
87-
ErrWrongChainID = errors.New("wrong chain id")
88-
ErrUnorderedTime = errors.New("unordered headers")
89-
ErrFromFuture = errors.New("header is from the future")
90-
ErrKnownHeader = errors.New("known header")
91-
ErrHeightFromFuture = errors.New("header height is far from future")
78+
ErrZeroHeader = errors.New("zero header")
79+
ErrWrongChainID = errors.New("wrong chain id")
80+
ErrUnorderedTime = errors.New("unordered headers")
81+
ErrFromFuture = errors.New("header is from the future")
82+
ErrKnownHeader = errors.New("known header")
9283
)
9384

9485
// VerifyError is thrown if a Header failed verification.

0 commit comments

Comments
 (0)