From 454a3291d12d573d35032ff29cd2f1c3d58cd8fe Mon Sep 17 00:00:00 2001 From: Vlad Date: Tue, 19 Dec 2023 23:45:52 +0800 Subject: [PATCH 1/4] report known headersr as soft failure --- verify.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/verify.go b/verify.go index 0c1f3e9e..98301b35 100644 --- a/verify.go +++ b/verify.go @@ -19,7 +19,12 @@ func Verify[H Header[H]](trstd, untrstd H, heightThreshold uint64) error { // general mandatory verification err := verify[H](trstd, untrstd, heightThreshold) if err != nil { - return &VerifyError{Reason: err} + verErr := &VerifyError{Reason: err} + if errors.Is(err, ErrKnownHeader) { + // if known, header is not *really* wrong, just already known and we can ignore it + verErr.SoftFailure = true + } + return verErr } // user defined verification err = trstd.Verify(untrstd) From af93eaea563698bae90c5edcfe9d9312bd1aba3d Mon Sep 17 00:00:00 2001 From: Vlad Date: Wed, 20 Dec 2023 00:16:30 +0800 Subject: [PATCH 2/4] fix test --- headertest/verify_test.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/headertest/verify_test.go b/headertest/verify_test.go index 2774c056..ebc2680f 100644 --- a/headertest/verify_test.go +++ b/headertest/verify_test.go @@ -83,7 +83,8 @@ func TestVerify(t *testing.T) { untrusted.HeightI = trusted.Height() return untrusted }, - err: header.ErrKnownHeader, + err: header.ErrKnownHeader, + soft: true, }, { prepare: func() *DummyHeader { From 41e02118027e28e68d16232e42fdfb9021faf7a2 Mon Sep 17 00:00:00 2001 From: Vlad Date: Thu, 21 Dec 2023 12:37:32 +0800 Subject: [PATCH 3/4] adjust logging level for verify errors --- p2p/exchange.go | 7 +++++-- sync/sync_head.go | 7 ++++++- verify.go | 7 +------ 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/p2p/exchange.go b/p2p/exchange.go index 607bfb0f..ec424b47 100644 --- a/p2p/exchange.go +++ b/p2p/exchange.go @@ -174,11 +174,14 @@ func (ex *Exchange[H]) Head(ctx context.Context, opts ...header.HeadOption[H]) ( headerRespCh <- headers[0] return } - log.Errorw("verifying head received from tracked peer", "tracked peer", from, + logF := log.Warnw + if errors.Is(err, header.ErrKnownHeader) { + logF = log.Debugw + } + logF("verifying head received from tracked peer", "tracked peer", from, "height", headers[0].Height(), "err", err) headerRespCh <- zero return - } } // request ensures that the result slice will have at least one Header diff --git a/sync/sync_head.go b/sync/sync_head.go index 66a497f6..b01e3901 100644 --- a/sync/sync_head.go +++ b/sync/sync_head.go @@ -172,7 +172,12 @@ func (s *Syncer[H]) verify(ctx context.Context, newHead H) (bool, error) { var verErr *header.VerifyError if errors.As(err, &verErr) && !verErr.SoftFailure { - log.Errorw("invalid network header", + logF := log.Warnw + if errors.Is(err, header.ErrKnownHeader) { + logF = log.Debugw + log.Level() + } + logF("invalid network header", "height_of_invalid", newHead.Height(), "hash_of_invalid", newHead.Hash(), "height_of_subjective", sbjHead.Height(), diff --git a/verify.go b/verify.go index 98301b35..0c1f3e9e 100644 --- a/verify.go +++ b/verify.go @@ -19,12 +19,7 @@ func Verify[H Header[H]](trstd, untrstd H, heightThreshold uint64) error { // general mandatory verification err := verify[H](trstd, untrstd, heightThreshold) if err != nil { - verErr := &VerifyError{Reason: err} - if errors.Is(err, ErrKnownHeader) { - // if known, header is not *really* wrong, just already known and we can ignore it - verErr.SoftFailure = true - } - return verErr + return &VerifyError{Reason: err} } // user defined verification err = trstd.Verify(untrstd) From 95f29315b1c62bcdd00650cd1efa479e2eac634b Mon Sep 17 00:00:00 2001 From: Vlad Date: Mon, 25 Dec 2023 22:40:19 +0700 Subject: [PATCH 4/4] fix test --- headertest/verify_test.go | 3 +-- sync/sync_head.go | 1 - 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/headertest/verify_test.go b/headertest/verify_test.go index ebc2680f..2774c056 100644 --- a/headertest/verify_test.go +++ b/headertest/verify_test.go @@ -83,8 +83,7 @@ func TestVerify(t *testing.T) { untrusted.HeightI = trusted.Height() return untrusted }, - err: header.ErrKnownHeader, - soft: true, + err: header.ErrKnownHeader, }, { prepare: func() *DummyHeader { diff --git a/sync/sync_head.go b/sync/sync_head.go index b01e3901..349b4c5d 100644 --- a/sync/sync_head.go +++ b/sync/sync_head.go @@ -175,7 +175,6 @@ func (s *Syncer[H]) verify(ctx context.Context, newHead H) (bool, error) { logF := log.Warnw if errors.Is(err, header.ErrKnownHeader) { logF = log.Debugw - log.Level() } logF("invalid network header", "height_of_invalid", newHead.Height(),