Skip to content

Commit 12cc054

Browse files
authored
perf(p2p): avoid deserialization for locally published headers (#251)
Self-explanatory
1 parent 44cbdf2 commit 12cc054

File tree

2 files changed

+15
-6
lines changed

2 files changed

+15
-6
lines changed

p2p/subscriber.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,10 +138,18 @@ func (s *Subscriber[H]) Broadcast(ctx context.Context, header H, opts ...pubsub.
138138
if err != nil {
139139
return err
140140
}
141+
142+
opts = append(opts, pubsub.WithValidatorData(header))
141143
return s.topic.Publish(ctx, bin, opts...)
142144
}
143145

144146
func (s *Subscriber[H]) verifyMessage(ctx context.Context, p peer.ID, msg *pubsub.Message) (res pubsub.ValidationResult) {
147+
if msg.ValidatorData != nil {
148+
// means the message is local and was already validated
149+
// so simply accept it
150+
return pubsub.ValidationAccept
151+
}
152+
145153
defer func() {
146154
err := recover()
147155
if err != nil {

p2p/subscription_test.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import (
1414
"github.com/celestiaorg/go-header/headertest"
1515
)
1616

17-
// TestSubscriber tests the header Module's implementation of Subscriber.
17+
// TestSubscriber a simple test to check if the subscriber can receive headers from the network.
1818
func TestSubscriber(t *testing.T) {
1919
ctx, cancel := context.WithTimeout(context.Background(), time.Second*15)
2020
defer cancel()
@@ -73,23 +73,24 @@ func TestSubscriber(t *testing.T) {
7373
}
7474

7575
// subscribe
76-
_, err = p2pSub2.Subscribe()
76+
senderSubscription, err := p2pSub2.Subscribe()
7777
require.NoError(t, err)
7878

7979
subscription, err := p2pSub1.Subscribe()
8080
require.NoError(t, err)
8181

8282
expectedHeader := suite.GenDummyHeaders(1)[0]
83-
bin, err := expectedHeader.MarshalBinary()
84-
require.NoError(t, err)
85-
86-
err = p2pSub2.topic.Publish(ctx, bin, pubsub.WithReadiness(pubsub.MinTopicSize(1)))
83+
err = p2pSub2.Broadcast(ctx, expectedHeader, pubsub.WithReadiness(pubsub.MinTopicSize(1)))
8784
require.NoError(t, err)
8885

8986
// get next Header from network
9087
header, err := subscription.NextHeader(ctx)
9188
require.NoError(t, err)
89+
assert.Equal(t, expectedHeader.Height(), header.Height())
90+
assert.Equal(t, expectedHeader.Hash(), header.Hash())
9291

92+
header, err = senderSubscription.NextHeader(ctx)
93+
require.NoError(t, err)
9394
assert.Equal(t, expectedHeader.Height(), header.Height())
9495
assert.Equal(t, expectedHeader.Hash(), header.Hash())
9596
}

0 commit comments

Comments
 (0)