From 19ecd5b5149129eb542be65b205f9a11e5f58237 Mon Sep 17 00:00:00 2001 From: rene <41963722+renaynay@users.noreply.github.com> Date: Fri, 22 Sep 2023 16:07:04 +0200 Subject: [PATCH] fix(p2p): use header.Verify instead of trustedHeader.Verify(h) --- opts.go | 4 ++-- p2p/exchange.go | 4 ++-- p2p/exchange_test.go | 9 ++++----- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/opts.go b/opts.go index ce3b7cc4..10a02955 100644 --- a/opts.go +++ b/opts.go @@ -6,11 +6,11 @@ type HeadOption[H Header[H]] func(opts *HeadParams[H]) type HeadParams[H Header[H]] struct { // TrustedHead allows the caller of Head to specify a trusted header // against which the underlying implementation of Head can verify against. - TrustedHead Header[H] + TrustedHead H } // WithTrustedHead sets the TrustedHead parameter to the given header. -func WithTrustedHead[H Header[H]](verified Header[H]) func(opts *HeadParams[H]) { +func WithTrustedHead[H Header[H]](verified H) func(opts *HeadParams[H]) { return func(opts *HeadParams[H]) { opts.TrustedHead = verified } diff --git a/p2p/exchange.go b/p2p/exchange.go index af0bf100..0813e5b3 100644 --- a/p2p/exchange.go +++ b/p2p/exchange.go @@ -127,7 +127,7 @@ func (ex *Exchange[H]) Head(ctx context.Context, opts ...header.HeadOption[H]) ( // trusted peers for its Head request. If nil, trusted peers will // be used. If non-nil, Exchange will ask several peers from its network for // their Head and verify against the given trusted header. - useTrackedPeers := reqParams.TrustedHead != nil + useTrackedPeers := !reqParams.TrustedHead.IsZero() if useTrackedPeers { trackedPeers := ex.peerTracker.getPeers(maxUntrustedHeadRequests) if len(trackedPeers) > 0 { @@ -154,7 +154,7 @@ func (ex *Exchange[H]) Head(ctx context.Context, opts ...header.HeadOption[H]) ( } // if tracked (untrusted) peers were requested, verify head if useTrackedPeers { - err = reqParams.TrustedHead.Verify(headers[0]) + err = header.Verify[H](reqParams.TrustedHead, headers[0], header.DefaultHeightThreshold) if err != nil { var verErr *header.VerifyError if errors.As(err, &verErr) && verErr.SoftFailure { diff --git a/p2p/exchange_test.go b/p2p/exchange_test.go index 35d70d72..62311d47 100644 --- a/p2p/exchange_test.go +++ b/p2p/exchange_test.go @@ -52,7 +52,7 @@ func TestExchange_RequestHead(t *testing.T) { tests := []struct { requestFromTrusted bool - lastHeader header.Header[*headertest.DummyHeader] + lastHeader *headertest.DummyHeader expectedHeight uint64 expectedHash header.Hash }{ @@ -76,7 +76,7 @@ func TestExchange_RequestHead(t *testing.T) { t.Run(strconv.Itoa(i), func(t *testing.T) { var opts []header.HeadOption[*headertest.DummyHeader] if !tt.requestFromTrusted { - opts = append(opts, header.WithTrustedHead(tt.lastHeader)) + opts = append(opts, header.WithTrustedHead[*headertest.DummyHeader](tt.lastHeader)) } header, err := exchg.Head(ctx, opts...) @@ -121,13 +121,12 @@ func TestExchange_RequestHead_SoftFailure(t *testing.T) { // get first subjective head from trusted peer to initialize the // exchange's store - var head header.Header[*headertest.DummyHeader] - head, err = exchg.Head(ctx) + head, err := exchg.Head(ctx) require.NoError(t, err) // now use that trusted head to request a new head from the exchange // from the tracked peer - softFailHead, err := exchg.Head(ctx, header.WithTrustedHead(head)) + softFailHead, err := exchg.Head(ctx, header.WithTrustedHead[*headertest.DummyHeader](head)) require.NoError(t, err) assert.Equal(t, trackedStore.HeadHeight, softFailHead.Height()) }