From 47f2d110025aa76a6893b37d1e6246148528089a Mon Sep 17 00:00:00 2001 From: Kishan Sagathiya Date: Mon, 21 Mar 2022 20:18:22 +0530 Subject: [PATCH 01/17] Check for duplicate message earlier Check if we have seen the notification message before any processing happens on it --- dot/network/block_announce.go | 17 +++++++++------- dot/network/gossip.go | 15 +++++++++----- dot/network/gossip_test.go | 9 ++++++--- dot/network/message.go | 12 ++++++----- dot/network/message_cache.go | 8 +++++++- dot/network/notifications.go | 38 +++++++++++++++++++++++------------ dot/network/transaction.go | 26 +++++++++++++++++------- dot/peerset/handler.go | 4 ++++ dot/state/block.go | 1 + dot/types/block_data.go | 2 +- go.mod | 10 ++++----- go.sum | 22 +++++++++++++------- lib/grandpa/network.go | 4 ++-- 13 files changed, 112 insertions(+), 56 deletions(-) diff --git a/dot/network/block_announce.go b/dot/network/block_announce.go index 64338154cb..5da65a019b 100644 --- a/dot/network/block_announce.go +++ b/dot/network/block_announce.go @@ -69,11 +69,14 @@ func (bm *BlockAnnounceMessage) Decode(in []byte) error { } // Hash returns the hash of the BlockAnnounceMessage -func (bm *BlockAnnounceMessage) Hash() common.Hash { +func (bm *BlockAnnounceMessage) Hash() (common.Hash, error) { // scale encode each extrinsic - encMsg, _ := bm.Encode() - hash, _ := common.Blake2bHash(encMsg) - return hash + encMsg, err := bm.Encode() + if err != nil { + return common.Hash{}, err + } + + return common.Blake2bHash(encMsg) } // IsHandshake returns false @@ -145,8 +148,8 @@ func (*BlockAnnounceHandshake) Type() byte { } // Hash ... -func (*BlockAnnounceHandshake) Hash() common.Hash { - return common.Hash{} +func (*BlockAnnounceHandshake) Hash() (common.Hash, error) { + return common.Hash{}, nil } // IsHandshake returns true @@ -174,7 +177,7 @@ func (s *Service) validateBlockAnnounceHandshake(from peer.ID, hs Handshake) err return errors.New("invalid handshake type") } - if bhs.GenesisHash != s.blockState.GenesisHash() { + if !bhs.GenesisHash.Equal(s.blockState.GenesisHash()) { s.host.cm.peerSetHandler.ReportPeer(peerset.ReputationChange{ Value: peerset.GenesisMismatch, Reason: peerset.GenesisMismatchReason, diff --git a/dot/network/gossip.go b/dot/network/gossip.go index 55da229bd3..de84397650 100644 --- a/dot/network/gossip.go +++ b/dot/network/gossip.go @@ -4,6 +4,7 @@ package network import ( + "fmt" "sync" "github.com/ChainSafe/gossamer/internal/log" @@ -24,13 +25,17 @@ func newGossip() *gossip { } // hasSeen broadcasts messages that have not been seen -func (g *gossip) hasSeen(msg NotificationsMessage) bool { +func (g *gossip) hasSeen(msg NotificationsMessage) (bool, error) { // check if message has not been seen - if seen, ok := g.seen.Load(msg.Hash()); !ok || !seen.(bool) { + msgHash, err := msg.Hash() + if err != nil { + return false, fmt.Errorf("could not hash notification message: %w", err) + } + if seen, ok := g.seen.Load(msgHash); !ok || !seen.(bool) { // set message to has been seen - g.seen.Store(msg.Hash(), true) - return false + g.seen.Store(msgHash, true) + return false, nil } - return true + return true, nil } diff --git a/dot/network/gossip_test.go b/dot/network/gossip_test.go index 5a1eb051b8..689bf7cfc3 100644 --- a/dot/network/gossip_test.go +++ b/dot/network/gossip_test.go @@ -89,7 +89,10 @@ func TestGossip(t *testing.T) { time.Sleep(TestMessageTimeout) - if hasSeenB, ok := nodeB.gossip.seen.Load(announceMessage.Hash()); !ok || hasSeenB.(bool) == false { + hash, err := announceMessage.Hash() + require.NoError(t, err) + + if hasSeenB, ok := nodeB.gossip.seen.Load(hash); !ok || hasSeenB.(bool) == false { t.Error( "node B did not receive block request message from node A", "\nreceived:", hasSeenB, @@ -97,7 +100,7 @@ func TestGossip(t *testing.T) { ) } - if hasSeenC, ok := nodeC.gossip.seen.Load(announceMessage.Hash()); !ok || hasSeenC.(bool) == false { + if hasSeenC, ok := nodeC.gossip.seen.Load(hash); !ok || hasSeenC.(bool) == false { t.Error( "node C did not receive block request message from node B", "\nreceived:", hasSeenC, @@ -105,7 +108,7 @@ func TestGossip(t *testing.T) { ) } - if hasSeenA, ok := nodeA.gossip.seen.Load(announceMessage.Hash()); !ok || hasSeenA.(bool) == false { + if hasSeenA, ok := nodeA.gossip.seen.Load(hash); !ok || hasSeenA.(bool) == false { t.Error( "node A did not receive block request message from node C", "\nreceived:", hasSeenA, diff --git a/dot/network/message.go b/dot/network/message.go index 798ed3157a..dc360ca475 100644 --- a/dot/network/message.go +++ b/dot/network/message.go @@ -36,7 +36,7 @@ type Message interface { type NotificationsMessage interface { Message Type() byte - Hash() common.Hash + Hash() (common.Hash, error) IsHandshake() bool } @@ -389,11 +389,13 @@ func (cm *ConsensusMessage) Decode(in []byte) error { } // Hash returns the Hash of ConsensusMessage -func (cm *ConsensusMessage) Hash() common.Hash { +func (cm *ConsensusMessage) Hash() (common.Hash, error) { // scale encode each extrinsic - encMsg, _ := cm.Encode() - hash, _ := common.Blake2bHash(encMsg) - return hash + encMsg, err := cm.Encode() + if err != nil { + return common.Hash{}, err + } + return common.Blake2bHash(encMsg) } // IsHandshake returns false diff --git a/dot/network/message_cache.go b/dot/network/message_cache.go index c3a1da3692..d7f92e85cc 100644 --- a/dot/network/message_cache.go +++ b/dot/network/message_cache.go @@ -55,6 +55,7 @@ func (m *messageCache) put(peer peer.ID, msg NotificationsMessage) (bool, error) func (m *messageCache) exists(peer peer.ID, msg NotificationsMessage) bool { key, err := generateCacheKey(peer, msg) if err != nil { + logger.Errorf("could not generate cache key: %w", err) return false } @@ -67,7 +68,12 @@ func generateCacheKey(peer peer.ID, msg NotificationsMessage) ([]byte, error) { return nil, errors.New("cache does not support handshake messages") } - peerMsgHash, err := common.Blake2bHash(append([]byte(peer), msg.Hash().ToBytes()...)) + msgHash, err := msg.Hash() + if err != nil { + return nil, err + } + + peerMsgHash, err := common.Blake2bHash(append([]byte(peer), msgHash.ToBytes()...)) if err != nil { return nil, err } diff --git a/dot/network/notifications.go b/dot/network/notifications.go index 266ecc6018..1767c0b170 100644 --- a/dot/network/notifications.go +++ b/dot/network/notifications.go @@ -136,6 +136,20 @@ func (s *Service) createNotificationsMessageHandler( return fmt.Errorf("%w: expected %T but got %T", errMessageTypeNotValid, (NotificationsMessage)(nil), msg) } + hasSeen, err := s.gossip.hasSeen(msg) + if err != nil { + return fmt.Errorf("could not check if message was seen before: %w", err) + } + + if hasSeen { + // report peer if we get duplicate gossip message. + s.host.cm.peerSetHandler.ReportPeer(peerset.ReputationChange{ + Value: peerset.DuplicateGossipValue, + Reason: peerset.DuplicateGossipReason, + }, peer) + return nil + } + if msg.IsHandshake() { logger.Tracef("received handshake on notifications sub-protocol %s from peer %s, message is: %s", info.protocolID, stream.Conn().RemotePeer(), msg) @@ -207,16 +221,7 @@ func (s *Service) createNotificationsMessageHandler( return nil } - if !s.gossip.hasSeen(msg) { - s.broadcastExcluding(info, peer, msg) - return nil - } - - // report peer if we get duplicate gossip message. - s.host.cm.peerSetHandler.ReportPeer(peerset.ReputationChange{ - Value: peerset.DuplicateGossipValue, - Reason: peerset.DuplicateGossipReason, - }, peer) + s.broadcastExcluding(info, peer, msg) return nil } } @@ -238,7 +243,14 @@ func (s *Service) sendData(peer peer.ID, hs Handshake, info *notificationsProtoc return } - if support, err := s.host.supportsProtocol(peer, info.protocolID); err != nil || !support { + support, err := s.host.supportsProtocol(peer, info.protocolID) + if err != nil { + logger.Criticalf("could not check if protocol %s is supported by peer %s: %s", info.protocolID, peer, err) + } else if !support { + logger.Criticalf("protocol %s is not supported by peer %s", info.protocolID, peer) + } + + if err != nil || !support { s.host.cm.peerSetHandler.ReportPeer(peerset.ReputationChange{ Value: peerset.BadProtocolValue, Reason: peerset.BadProtocolReason, @@ -319,7 +331,7 @@ func (s *Service) sendHandshake(peer peer.ID, hs Handshake, info *notificationsP peer, info.protocolID, hs) stream, err := s.host.send(peer, info.protocolID, hs) if err != nil { - logger.Tracef("failed to send message to peer %s: %s", peer, err) + logger.Tracef("failed to send handshake to peer %s: %s", peer, err) // don't need to close the stream here, as it's nil! return nil, err } @@ -345,7 +357,7 @@ func (s *Service) sendHandshake(peer peer.ID, hs Handshake, info *notificationsP } if hsResponse.err != nil { - logger.Tracef("failed to read handshake from peer %s using protocol %s: %s", peer, info.protocolID, err) + logger.Tracef("failed to read handshake from peer %s using protocol %s: %s", peer, info.protocolID, hsResponse.err) closeOutboundStream(info, peer, stream) return nil, hsResponse.err } diff --git a/dot/network/transaction.go b/dot/network/transaction.go index b7a4f1adba..7a9cd89962 100644 --- a/dot/network/transaction.go +++ b/dot/network/transaction.go @@ -54,10 +54,12 @@ func (tm *TransactionMessage) Decode(in []byte) error { } // Hash returns the hash of the TransactionMessage -func (tm *TransactionMessage) Hash() common.Hash { - encMsg, _ := tm.Encode() - hash, _ := common.Blake2bHash(encMsg) - return hash +func (tm *TransactionMessage) Hash() (common.Hash, error) { + encMsg, err := tm.Encode() + if err != nil { + return common.Hash{}, nil + } + return common.Blake2bHash(encMsg) } // IsHandshake returns false @@ -93,8 +95,8 @@ func (*transactionHandshake) Type() byte { } // Hash ... -func (*transactionHandshake) Hash() common.Hash { - return common.Hash{} +func (*transactionHandshake) Hash() (common.Hash, error) { + return common.Hash{}, nil } // IsHandshake returns true @@ -129,6 +131,7 @@ func (s *Service) startTxnBatchProcessing(txnBatchCh chan *BatchMessage, slotDur case txnMsg := <-txnBatchCh: propagate, err := s.handleTransactionMessage(txnMsg.peer, txnMsg.msg) if err != nil { + logger.Warnf("could not handle transaction message: %s ", err) s.host.closeProtocolStream(protocolID, txnMsg.peer) continue } @@ -137,7 +140,16 @@ func (s *Service) startTxnBatchProcessing(txnBatchCh chan *BatchMessage, slotDur continue } - if !s.gossip.hasSeen(txnMsg.msg) { + // TODO: Check if s.gossip.hasSeen should be moved before handleTransactionMessage. + // That we could avoid handling the transactions again, which we would have already seen. + + hasSeen, err := s.gossip.hasSeen(txnMsg.msg) + if err != nil { + s.host.closeProtocolStream(protocolID, txnMsg.peer) + logger.Debugf("could not check if message was seen before: %s", err) + continue + } + if !hasSeen { s.broadcastExcluding(s.notificationsProtocols[TransactionMsgType], txnMsg.peer, txnMsg.msg) } } diff --git a/dot/peerset/handler.go b/dot/peerset/handler.go index ab69592daa..5c90d2be1b 100644 --- a/dot/peerset/handler.go +++ b/dot/peerset/handler.go @@ -77,6 +77,10 @@ func (h *Handler) RemovePeer(setID int, peers ...peer.ID) { // ReportPeer reports ReputationChange according to the peer behaviour. func (h *Handler) ReportPeer(rep ReputationChange, peers ...peer.ID) { + for _, pid := range peers { + logger.Debugf("reporting reputation change of %d to peer %s, reason: %s", rep.Value, pid, rep.Reason) + } + h.actionQueue <- action{ actionCall: reportPeer, reputation: rep, diff --git a/dot/state/block.go b/dot/state/block.go index b3da60f1c1..4a6cacadaf 100644 --- a/dot/state/block.go +++ b/dot/state/block.go @@ -164,6 +164,7 @@ func headerKey(hash common.Hash) []byte { } // headerHashKey = headerHashPrefix + num (uint64 big endian) +// TODO: Shouldn't we change this block number to uint32? func headerHashKey(number uint64) []byte { return append(headerHashPrefix, encodeBlockNumber(number)...) } diff --git a/dot/types/block_data.go b/dot/types/block_data.go index 35525c86d0..9e593848a1 100644 --- a/dot/types/block_data.go +++ b/dot/types/block_data.go @@ -28,7 +28,7 @@ func NewEmptyBlockData() *BlockData { // Number returns the block header number. func (bd *BlockData) Number() uint { - return bd.Header.Number + return uint(bd.Header.Number) } func (bd *BlockData) String() string { diff --git a/go.mod b/go.mod index b8f7770a3a..d94efcebb5 100644 --- a/go.mod +++ b/go.mod @@ -58,7 +58,7 @@ require ( github.com/btcsuite/btcd v0.22.0-beta // indirect github.com/cespare/xxhash v1.1.0 // indirect github.com/cespare/xxhash/v2 v2.1.2 // indirect - github.com/cpuguy83/go-md2man/v2 v2.0.0 // indirect + github.com/cpuguy83/go-md2man/v2 v2.0.1 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c // indirect github.com/deckarep/golang-set v1.8.0 // indirect @@ -130,7 +130,7 @@ require ( github.com/libp2p/go-yamux/v2 v2.2.0 // indirect github.com/libp2p/zeroconf/v2 v2.1.0 // indirect github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd // indirect - github.com/mattn/go-colorable v0.1.9 // indirect + github.com/mattn/go-colorable v0.1.12 // indirect github.com/mattn/go-isatty v0.0.14 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect github.com/miekg/dns v1.1.43 // indirect @@ -159,9 +159,8 @@ require ( github.com/prometheus/common v0.32.1 // indirect github.com/prometheus/procfs v0.7.3 // indirect github.com/rs/cors v1.7.0 // indirect - github.com/russross/blackfriday/v2 v2.0.1 // indirect + github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible // indirect - github.com/shurcooL/sanitized_anchor_name v1.0.0 // indirect github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 // indirect github.com/stretchr/objx v0.1.1 // indirect github.com/tklauser/go-sysconf v0.3.5 // indirect @@ -178,8 +177,9 @@ require ( go.uber.org/zap v1.19.0 // indirect golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2 // indirect golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect - golang.org/x/sys v0.0.0-20220114195835-da31bd327af9 // indirect + golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8 // indirect golang.org/x/text v0.3.7 // indirect + golang.org/x/tools v0.1.9 // indirect golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect google.golang.org/appengine v1.6.6 // indirect gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect diff --git a/go.sum b/go.sum index 730aa5a8f4..9f72d0ad71 100644 --- a/go.sum +++ b/go.sum @@ -191,8 +191,8 @@ github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4x github.com/cpuguy83/go-md2man v1.0.10 h1:BSKMNlYxDvnunlTymqtgONjNnaRV1sTpcovwwjF22jk= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cpuguy83/go-md2man/v2 v2.0.0 h1:EoUDS0afbrsXAZ9YQ9jdu/mZ2sXgT1/2yyNng4PGlyM= -github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/cpuguy83/go-md2man/v2 v2.0.1 h1:r/myEWzV9lfsM1tFLgDyu0atFtJ1fXn261LKYj/3DxU= +github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4= @@ -905,8 +905,9 @@ github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcncea github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.9 h1:sqDoxXbdeALODt0DAeJCVp38ps9ZogZEAXjus69YV3U= github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40= +github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-ieproxy v0.0.0-20190610004146-91bb50d98149/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= github.com/mattn/go-ieproxy v0.0.0-20190702010315-6dee0af9227d/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= @@ -1181,8 +1182,9 @@ github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/xhandler v0.0.0-20160618193221-ed27b6fd6521/go.mod h1:RvLn4FgxWubrpZHtQLnOf6EwhN2hEMusxZOhcW9H3UQ= github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= -github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= @@ -1212,7 +1214,6 @@ github.com/shurcooL/notifications v0.0.0-20181007000457-627ab5aea122/go.mod h1:b github.com/shurcooL/octicon v0.0.0-20181028054416-fa4f57f9efb2/go.mod h1:eWdoE5JD4R5UVWDucdOPg1g2fqQRq78IQa9zlOV1vpQ= github.com/shurcooL/reactions v0.0.0-20181006231557-f2e0b4ca5b82/go.mod h1:TCR1lToEk4d2s07G3XGfz2QrgHXg4RJBvjrOozvoWfk= github.com/shurcooL/sanitized_anchor_name v0.0.0-20170918181015-86672fcb3f95/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/shurcooL/users v0.0.0-20180125191416-49c67e49c537/go.mod h1:QJTqeLYEDaXHZDBsXlPCDqdhQuJkuw4NOtaxYe3xii4= github.com/shurcooL/webdavfs v0.0.0-20170829043945-18c3829fa133/go.mod h1:hKmq5kWdCj2z2KEozexVbfEZIWiTjhE0+UjmZgPqehw= @@ -1318,6 +1319,7 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= go.opencensus.io v0.18.0/go.mod h1:vKdFvxhtzZ9onBp9VKHK8z/sRpBMnKAsufL7wlDrCOA= @@ -1433,6 +1435,7 @@ golang.org/x/mod v0.1.1-0.20191209134235-331c550502dd/go.mod h1:s0Qsj1ACt9ePp/hM golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1489,6 +1492,7 @@ golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2 h1:CIJ76btIcR3eFI5EgSo6k1qKw9KJexJuRLI9G7Hp5wE= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -1598,8 +1602,11 @@ golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220114195835-da31bd327af9 h1:XfKQ4OlFl8okEOr5UvAqFRVj8pY/4yfcXrddB8qAbU0= +golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8 h1:OH54vjqzRWmbJ62fjuhxy7AxFFgoHN0/DPc/UrL8cAs= +golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1 h1:v+OssWQX+hTHEmOBgwxdZxK4zHq3yOs8F9J7mk0PY8E= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= @@ -1679,8 +1686,9 @@ golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= -golang.org/x/tools v0.1.1 h1:wGiQel/hW0NnEkJUk8lbzkX2gFJU6PFxf1v5OlCfuOs= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.9 h1:j9KsMiaP1c3B0OTQGth0/k+miLGTgLsAFUCrF2vLcF8= +golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/lib/grandpa/network.go b/lib/grandpa/network.go index 49549243bf..5caaaf91c5 100644 --- a/lib/grandpa/network.go +++ b/lib/grandpa/network.go @@ -64,8 +64,8 @@ func (*GrandpaHandshake) Type() byte { } // Hash ... -func (*GrandpaHandshake) Hash() common.Hash { - return common.Hash{} +func (*GrandpaHandshake) Hash() (common.Hash, error) { + return common.Hash{}, nil } // IsHandshake returns true From f724864bad16b11a96922f788bce038bfa90673b Mon Sep 17 00:00:00 2001 From: Kishan Sagathiya Date: Fri, 25 Mar 2022 16:45:17 +0530 Subject: [PATCH 02/17] Update dot/types/block_data.go Co-authored-by: Quentin McGaw --- dot/types/block_data.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dot/types/block_data.go b/dot/types/block_data.go index 9e593848a1..35525c86d0 100644 --- a/dot/types/block_data.go +++ b/dot/types/block_data.go @@ -28,7 +28,7 @@ func NewEmptyBlockData() *BlockData { // Number returns the block header number. func (bd *BlockData) Number() uint { - return uint(bd.Header.Number) + return bd.Header.Number } func (bd *BlockData) String() string { From 25ddebaada486d129521dbe2798c49671aba2736 Mon Sep 17 00:00:00 2001 From: Kishan Sagathiya Date: Fri, 25 Mar 2022 16:46:01 +0530 Subject: [PATCH 03/17] Update dot/network/block_announce.go Co-authored-by: Quentin McGaw --- dot/network/block_announce.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dot/network/block_announce.go b/dot/network/block_announce.go index 5da65a019b..e7eafc5575 100644 --- a/dot/network/block_announce.go +++ b/dot/network/block_announce.go @@ -73,7 +73,7 @@ func (bm *BlockAnnounceMessage) Hash() (common.Hash, error) { // scale encode each extrinsic encMsg, err := bm.Encode() if err != nil { - return common.Hash{}, err + return common.Hash{}, fmt.Errorf("cannot encode message: %w", err) } return common.Blake2bHash(encMsg) From 844651ae9fe55f43dde22ee27bdd040e36f7c19d Mon Sep 17 00:00:00 2001 From: Kishan Sagathiya Date: Fri, 25 Mar 2022 16:46:17 +0530 Subject: [PATCH 04/17] Update dot/network/message.go Co-authored-by: Quentin McGaw --- dot/network/message.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dot/network/message.go b/dot/network/message.go index dc360ca475..8c26974138 100644 --- a/dot/network/message.go +++ b/dot/network/message.go @@ -393,7 +393,7 @@ func (cm *ConsensusMessage) Hash() (common.Hash, error) { // scale encode each extrinsic encMsg, err := cm.Encode() if err != nil { - return common.Hash{}, err + return common.Hash{}, fmt.Errorf("cannot encode message: %w", err) } return common.Blake2bHash(encMsg) } From b7de7eb494d2aa42e8200c98ef7334317ff999aa Mon Sep 17 00:00:00 2001 From: Kishan Sagathiya Date: Fri, 25 Mar 2022 16:46:30 +0530 Subject: [PATCH 05/17] Update dot/network/message_cache.go Co-authored-by: Quentin McGaw --- dot/network/message_cache.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dot/network/message_cache.go b/dot/network/message_cache.go index d7f92e85cc..e3a4ec308a 100644 --- a/dot/network/message_cache.go +++ b/dot/network/message_cache.go @@ -55,7 +55,7 @@ func (m *messageCache) put(peer peer.ID, msg NotificationsMessage) (bool, error) func (m *messageCache) exists(peer peer.ID, msg NotificationsMessage) bool { key, err := generateCacheKey(peer, msg) if err != nil { - logger.Errorf("could not generate cache key: %w", err) + logger.Errorf("could not generate cache key: %s", err) return false } From 1eccacbafa252eff97633aec763181d35673395d Mon Sep 17 00:00:00 2001 From: Kishan Sagathiya Date: Fri, 25 Mar 2022 16:46:49 +0530 Subject: [PATCH 06/17] Update dot/network/message_cache.go Co-authored-by: Quentin McGaw --- dot/network/message_cache.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dot/network/message_cache.go b/dot/network/message_cache.go index e3a4ec308a..b948a19ff1 100644 --- a/dot/network/message_cache.go +++ b/dot/network/message_cache.go @@ -70,7 +70,7 @@ func generateCacheKey(peer peer.ID, msg NotificationsMessage) ([]byte, error) { msgHash, err := msg.Hash() if err != nil { - return nil, err + return nil, fmt.Errorf("cannot hash notification message: %w", err) } peerMsgHash, err := common.Blake2bHash(append([]byte(peer), msgHash.ToBytes()...)) From 495e5dc7e6ffb344e7efe3bb765dd63d5c1258bc Mon Sep 17 00:00:00 2001 From: Kishan Sagathiya Date: Fri, 25 Mar 2022 16:47:15 +0530 Subject: [PATCH 07/17] Update dot/state/block.go Co-authored-by: Quentin McGaw --- dot/state/block.go | 1 - 1 file changed, 1 deletion(-) diff --git a/dot/state/block.go b/dot/state/block.go index 4a6cacadaf..b3da60f1c1 100644 --- a/dot/state/block.go +++ b/dot/state/block.go @@ -164,7 +164,6 @@ func headerKey(hash common.Hash) []byte { } // headerHashKey = headerHashPrefix + num (uint64 big endian) -// TODO: Shouldn't we change this block number to uint32? func headerHashKey(number uint64) []byte { return append(headerHashPrefix, encodeBlockNumber(number)...) } From c766bfd5404787c7a7767e700ce8db637b64e175 Mon Sep 17 00:00:00 2001 From: Kishan Sagathiya Date: Fri, 25 Mar 2022 16:56:06 +0530 Subject: [PATCH 08/17] small fixes --- dot/network/notifications.go | 4 +--- dot/network/transaction.go | 4 ++-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/dot/network/notifications.go b/dot/network/notifications.go index 1767c0b170..53fc9124a3 100644 --- a/dot/network/notifications.go +++ b/dot/network/notifications.go @@ -245,9 +245,7 @@ func (s *Service) sendData(peer peer.ID, hs Handshake, info *notificationsProtoc support, err := s.host.supportsProtocol(peer, info.protocolID) if err != nil { - logger.Criticalf("could not check if protocol %s is supported by peer %s: %s", info.protocolID, peer, err) - } else if !support { - logger.Criticalf("protocol %s is not supported by peer %s", info.protocolID, peer) + logger.Errorf("could not check if protocol %s is supported by peer %s: %s", info.protocolID, peer, err) } if err != nil || !support { diff --git a/dot/network/transaction.go b/dot/network/transaction.go index 7a9cd89962..dc645228e9 100644 --- a/dot/network/transaction.go +++ b/dot/network/transaction.go @@ -57,7 +57,7 @@ func (tm *TransactionMessage) Decode(in []byte) error { func (tm *TransactionMessage) Hash() (common.Hash, error) { encMsg, err := tm.Encode() if err != nil { - return common.Hash{}, nil + return common.Hash{}, fmt.Errorf("could not encode message: %w", err) } return common.Blake2bHash(encMsg) } @@ -131,7 +131,7 @@ func (s *Service) startTxnBatchProcessing(txnBatchCh chan *BatchMessage, slotDur case txnMsg := <-txnBatchCh: propagate, err := s.handleTransactionMessage(txnMsg.peer, txnMsg.msg) if err != nil { - logger.Warnf("could not handle transaction message: %s ", err) + logger.Warnf("could not handle transaction message: %s", err) s.host.closeProtocolStream(protocolID, txnMsg.peer) continue } From e8f6806a5c6b97b3884867447dc5fa86e8bbdb53 Mon Sep 17 00:00:00 2001 From: Kishan Sagathiya Date: Fri, 25 Mar 2022 17:03:20 +0530 Subject: [PATCH 09/17] small fixes --- dot/network/message_cache.go | 1 + 1 file changed, 1 insertion(+) diff --git a/dot/network/message_cache.go b/dot/network/message_cache.go index b948a19ff1..a2182db490 100644 --- a/dot/network/message_cache.go +++ b/dot/network/message_cache.go @@ -5,6 +5,7 @@ package network import ( "errors" + "fmt" "time" "github.com/ChainSafe/gossamer/lib/common" From f2b81ff89d0ed603fa19660105dea5ca3515d44a Mon Sep 17 00:00:00 2001 From: Kishan Sagathiya Date: Mon, 28 Mar 2022 12:28:44 +0530 Subject: [PATCH 10/17] small changes --- dot/network/gossip.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dot/network/gossip.go b/dot/network/gossip.go index 98cb30ff36..d4181c7316 100644 --- a/dot/network/gossip.go +++ b/dot/network/gossip.go @@ -26,9 +26,8 @@ func newGossip() *gossip { } } -// hasSeen broadcasts messages that have not been seen +// hasSeen checks if we have seen given message before. func (g *gossip) hasSeen(msg NotificationsMessage) (bool, error) { - // check if message has not been seen msgHash, err := msg.Hash() if err != nil { return false, fmt.Errorf("could not hash notification message: %w", err) @@ -37,6 +36,7 @@ func (g *gossip) hasSeen(msg NotificationsMessage) (bool, error) { g.seenMutex.Lock() defer g.seenMutex.Unlock() + // check if message has not been seen _, ok := g.seenMap[msgHash] if !ok { // set message to has been seen From 7a0f099c564ba07f598fe6e2d77da7d4451d25c9 Mon Sep 17 00:00:00 2001 From: Kishan Sagathiya Date: Mon, 28 Mar 2022 18:42:30 +0530 Subject: [PATCH 11/17] Update dot/network/gossip.go Co-authored-by: Quentin McGaw --- dot/network/gossip.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dot/network/gossip.go b/dot/network/gossip.go index d4181c7316..ab0d862f50 100644 --- a/dot/network/gossip.go +++ b/dot/network/gossip.go @@ -26,7 +26,7 @@ func newGossip() *gossip { } } -// hasSeen checks if we have seen given message before. +// hasSeen checks if we have seen the given message before. func (g *gossip) hasSeen(msg NotificationsMessage) (bool, error) { msgHash, err := msg.Hash() if err != nil { From 950e476c0a8ed1d528b920a35d11b6150908e4bf Mon Sep 17 00:00:00 2001 From: Kishan Sagathiya Date: Wed, 30 Mar 2022 17:14:50 +0530 Subject: [PATCH 12/17] trying to make go mod same as previous --- go.mod | 8 ++++---- go.sum | 15 ++++++--------- 2 files changed, 10 insertions(+), 13 deletions(-) diff --git a/go.mod b/go.mod index 0d086249b5..13d8db29c7 100644 --- a/go.mod +++ b/go.mod @@ -58,7 +58,7 @@ require ( github.com/btcsuite/btcd v0.22.0-beta // indirect github.com/cespare/xxhash v1.1.0 // indirect github.com/cespare/xxhash/v2 v2.1.2 // indirect - github.com/cpuguy83/go-md2man/v2 v2.0.1 // indirect + github.com/cpuguy83/go-md2man/v2 v2.0.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c // indirect github.com/deckarep/golang-set v1.8.0 // indirect @@ -130,7 +130,7 @@ require ( github.com/libp2p/go-yamux/v2 v2.2.0 // indirect github.com/libp2p/zeroconf/v2 v2.1.0 // indirect github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd // indirect - github.com/mattn/go-colorable v0.1.12 // indirect + github.com/mattn/go-colorable v0.1.9 // indirect github.com/mattn/go-isatty v0.0.14 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect github.com/miekg/dns v1.1.43 // indirect @@ -159,8 +159,9 @@ require ( github.com/prometheus/common v0.32.1 // indirect github.com/prometheus/procfs v0.7.3 // indirect github.com/rs/cors v1.7.0 // indirect - github.com/russross/blackfriday/v2 v2.1.0 // indirect + github.com/russross/blackfriday/v2 v2.0.1 // indirect github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible // indirect + github.com/shurcooL/sanitized_anchor_name v1.0.0 // indirect github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 // indirect github.com/stretchr/objx v0.1.1 // indirect github.com/tklauser/go-sysconf v0.3.5 // indirect @@ -179,7 +180,6 @@ require ( golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8 // indirect golang.org/x/text v0.3.7 // indirect - golang.org/x/tools v0.1.9 // indirect golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect google.golang.org/appengine v1.6.6 // indirect gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect diff --git a/go.sum b/go.sum index b42224e9ec..be4ee8ed32 100644 --- a/go.sum +++ b/go.sum @@ -190,8 +190,8 @@ github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cpuguy83/go-md2man/v2 v2.0.1 h1:r/myEWzV9lfsM1tFLgDyu0atFtJ1fXn261LKYj/3DxU= -github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/cpuguy83/go-md2man/v2 v2.0.0 h1:EoUDS0afbrsXAZ9YQ9jdu/mZ2sXgT1/2yyNng4PGlyM= +github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4= @@ -902,9 +902,8 @@ github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcncea github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.9 h1:sqDoxXbdeALODt0DAeJCVp38ps9ZogZEAXjus69YV3U= github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40= -github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-ieproxy v0.0.0-20190610004146-91bb50d98149/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= github.com/mattn/go-ieproxy v0.0.0-20190702010315-6dee0af9227d/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= @@ -1178,9 +1177,8 @@ github.com/rs/cors v1.7.0 h1:+88SsELBHx5r+hZ8TCkggzSstaWNbDvThkVK8H6f9ik= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/xhandler v0.0.0-20160618193221-ed27b6fd6521/go.mod h1:RvLn4FgxWubrpZHtQLnOf6EwhN2hEMusxZOhcW9H3UQ= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= +github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= -github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= @@ -1210,6 +1208,7 @@ github.com/shurcooL/notifications v0.0.0-20181007000457-627ab5aea122/go.mod h1:b github.com/shurcooL/octicon v0.0.0-20181028054416-fa4f57f9efb2/go.mod h1:eWdoE5JD4R5UVWDucdOPg1g2fqQRq78IQa9zlOV1vpQ= github.com/shurcooL/reactions v0.0.0-20181006231557-f2e0b4ca5b82/go.mod h1:TCR1lToEk4d2s07G3XGfz2QrgHXg4RJBvjrOozvoWfk= github.com/shurcooL/sanitized_anchor_name v0.0.0-20170918181015-86672fcb3f95/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= +github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/shurcooL/users v0.0.0-20180125191416-49c67e49c537/go.mod h1:QJTqeLYEDaXHZDBsXlPCDqdhQuJkuw4NOtaxYe3xii4= github.com/shurcooL/webdavfs v0.0.0-20170829043945-18c3829fa133/go.mod h1:hKmq5kWdCj2z2KEozexVbfEZIWiTjhE0+UjmZgPqehw= @@ -1595,7 +1594,6 @@ golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8 h1:OH54vjqzRWmbJ62fjuhxy7AxFFgoHN0/DPc/UrL8cAs= golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1678,9 +1676,8 @@ golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= +golang.org/x/tools v0.1.1 h1:wGiQel/hW0NnEkJUk8lbzkX2gFJU6PFxf1v5OlCfuOs= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.9 h1:j9KsMiaP1c3B0OTQGth0/k+miLGTgLsAFUCrF2vLcF8= -golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= From a36d66ebacc279994b59d8841b200510b0447e81 Mon Sep 17 00:00:00 2001 From: Kishan Sagathiya Date: Wed, 30 Mar 2022 23:16:23 +0530 Subject: [PATCH 13/17] something --- go.mod | 2 +- go.sum | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 13d8db29c7..c93c469e69 100644 --- a/go.mod +++ b/go.mod @@ -178,7 +178,7 @@ require ( go.uber.org/zap v1.19.0 // indirect golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2 // indirect golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect - golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8 // indirect + golang.org/x/sys v0.0.0-20220114195835-da31bd327af9 // indirect golang.org/x/text v0.3.7 // indirect golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect google.golang.org/appengine v1.6.6 // indirect diff --git a/go.sum b/go.sum index be4ee8ed32..cea2884517 100644 --- a/go.sum +++ b/go.sum @@ -1594,9 +1594,8 @@ golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220114195835-da31bd327af9 h1:XfKQ4OlFl8okEOr5UvAqFRVj8pY/4yfcXrddB8qAbU0= golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8 h1:OH54vjqzRWmbJ62fjuhxy7AxFFgoHN0/DPc/UrL8cAs= -golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1 h1:v+OssWQX+hTHEmOBgwxdZxK4zHq3yOs8F9J7mk0PY8E= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= From 1a042d8f2af2cb3ce84d7ba0ccac38154f288fb9 Mon Sep 17 00:00:00 2001 From: Kishan Sagathiya Date: Thu, 31 Mar 2022 15:35:21 +0530 Subject: [PATCH 14/17] fixed a test --- dot/network/notifications_test.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/dot/network/notifications_test.go b/dot/network/notifications_test.go index a62f121e4b..1d31a261d1 100644 --- a/dot/network/notifications_test.go +++ b/dot/network/notifications_test.go @@ -367,28 +367,28 @@ func TestCreateNotificationsMessageHandler_HandleTransaction(t *testing.T) { require.Len(t, txnBatch, 1) msg = &TransactionMessage{ - Extrinsics: []types.Extrinsic{{1, 1}, {2, 2}}, + Extrinsics: []types.Extrinsic{{1, 1}, {2, 2}, {3, 3}}, } err = handler(stream, msg) require.NoError(t, err) require.Len(t, txnBatch, 2) msg = &TransactionMessage{ - Extrinsics: []types.Extrinsic{{1, 1}, {2, 2}}, + Extrinsics: []types.Extrinsic{{1, 1}, {2, 2}, {3, 3}, {4, 4}}, } err = handler(stream, msg) require.NoError(t, err) require.Len(t, txnBatch, 3) msg = &TransactionMessage{ - Extrinsics: []types.Extrinsic{{1, 1}, {2, 2}}, + Extrinsics: []types.Extrinsic{{1, 1}, {2, 2}, {3, 3}, {4, 4}, {5, 5}}, } err = handler(stream, msg) require.NoError(t, err) require.Len(t, txnBatch, 4) msg = &TransactionMessage{ - Extrinsics: []types.Extrinsic{{1, 1}, {2, 2}}, + Extrinsics: []types.Extrinsic{{1, 1}, {2, 2}, {3, 3}, {4, 4}, {5, 5}, {6, 6}}, } err = handler(stream, msg) require.NoError(t, err) @@ -396,14 +396,14 @@ func TestCreateNotificationsMessageHandler_HandleTransaction(t *testing.T) { // reached batch size limit, below transaction will not be included in batch. msg = &TransactionMessage{ - Extrinsics: []types.Extrinsic{{1, 1}, {2, 2}}, + Extrinsics: []types.Extrinsic{{1, 1}, {2, 2}, {3, 3}, {4, 4}, {5, 5}, {6, 6}, {7, 7}}, } err = handler(stream, msg) require.NoError(t, err) require.Len(t, txnBatch, 5) msg = &TransactionMessage{ - Extrinsics: []types.Extrinsic{{1, 1}, {2, 2}}, + Extrinsics: []types.Extrinsic{{1, 1}, {2, 2}, {3, 3}, {4, 4}, {5, 5}, {6, 6}, {7, 7}, {8, 8}}, } // wait for transaction batch channel to process. time.Sleep(1300 * time.Millisecond) From 1fcfb7fc6a5bb0835c89a3f382a8609814f08388 Mon Sep 17 00:00:00 2001 From: Kishan Sagathiya Date: Thu, 31 Mar 2022 15:38:46 +0530 Subject: [PATCH 15/17] linked the issue --- dot/network/transaction.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dot/network/transaction.go b/dot/network/transaction.go index dc645228e9..e8a41087d4 100644 --- a/dot/network/transaction.go +++ b/dot/network/transaction.go @@ -140,7 +140,7 @@ func (s *Service) startTxnBatchProcessing(txnBatchCh chan *BatchMessage, slotDur continue } - // TODO: Check if s.gossip.hasSeen should be moved before handleTransactionMessage. + // TODO: Check if s.gossip.hasSeen should be moved before handleTransactionMessage. #2445 // That we could avoid handling the transactions again, which we would have already seen. hasSeen, err := s.gossip.hasSeen(txnMsg.msg) From 41d1f45c99df8e6ad067eaeb5da9bd568e0f4e32 Mon Sep 17 00:00:00 2001 From: Kishan Sagathiya Date: Fri, 1 Apr 2022 20:46:17 +0530 Subject: [PATCH 16/17] implement Hash function for block announce handshake --- dot/network/block_announce.go | 12 +++++++++--- dot/network/gossip.go | 4 +++- dot/network/notifications_test.go | 4 +++- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/dot/network/block_announce.go b/dot/network/block_announce.go index e7eafc5575..8c5771b67e 100644 --- a/dot/network/block_announce.go +++ b/dot/network/block_announce.go @@ -147,9 +147,15 @@ func (*BlockAnnounceHandshake) Type() byte { return 0 } -// Hash ... -func (*BlockAnnounceHandshake) Hash() (common.Hash, error) { - return common.Hash{}, nil +// Hash returns blake2b hash of block announce handshake. +func (hs *BlockAnnounceHandshake) Hash() (common.Hash, error) { + // scale encode each extrinsic + encMsg, err := hs.Encode() + if err != nil { + return common.Hash{}, fmt.Errorf("cannot encode handshake: %w", err) + } + + return common.Blake2bHash(encMsg) } // IsHandshake returns true diff --git a/dot/network/gossip.go b/dot/network/gossip.go index ab0d862f50..d91f1c017e 100644 --- a/dot/network/gossip.go +++ b/dot/network/gossip.go @@ -40,7 +40,9 @@ func (g *gossip) hasSeen(msg NotificationsMessage) (bool, error) { _, ok := g.seenMap[msgHash] if !ok { // set message to has been seen - g.seenMap[msgHash] = struct{}{} + if !msg.IsHandshake() { + g.seenMap[msgHash] = struct{}{} + } return false, nil } diff --git a/dot/network/notifications_test.go b/dot/network/notifications_test.go index 1d31a261d1..5670114262 100644 --- a/dot/network/notifications_test.go +++ b/dot/network/notifications_test.go @@ -189,7 +189,9 @@ func TestCreateNotificationsMessageHandler_BlockAnnounceHandshake(t *testing.T) Roles: 4, BestBlockNumber: 77, BestBlockHash: common.Hash{1}, - GenesisHash: common.Hash{2}, + // we are using a different genesis here, thus this + // handshake would be validated to be incorrect. + GenesisHash: common.Hash{2}, } err = handler(stream, testHandshake) From 67ace9e6c2d101418ead0189996a1adbf138020c Mon Sep 17 00:00:00 2001 From: Kishan Sagathiya Date: Mon, 4 Apr 2022 13:07:36 +0530 Subject: [PATCH 17/17] don't report if we fail to find if a protocol is supported --- dot/network/notifications.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dot/network/notifications.go b/dot/network/notifications.go index 53fc9124a3..758c97b99d 100644 --- a/dot/network/notifications.go +++ b/dot/network/notifications.go @@ -246,9 +246,10 @@ func (s *Service) sendData(peer peer.ID, hs Handshake, info *notificationsProtoc support, err := s.host.supportsProtocol(peer, info.protocolID) if err != nil { logger.Errorf("could not check if protocol %s is supported by peer %s: %s", info.protocolID, peer, err) + return } - if err != nil || !support { + if !support { s.host.cm.peerSetHandler.ReportPeer(peerset.ReputationChange{ Value: peerset.BadProtocolValue, Reason: peerset.BadProtocolReason,