Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PeerAuthenticationResolver #3749

Merged
merged 7 commits into from
Feb 8, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions dataRetriever/errors.go
Original file line number Diff line number Diff line change
Expand Up @@ -220,3 +220,18 @@ var ErrNilPathManager = errors.New("nil path manager")

// ErrNilEpochNotifier signals that the provided EpochNotifier is nil
var ErrNilEpochNotifier = errors.New("nil EpochNotifier")

// ErrNilPeerAuthenticationPool signals that a nil peer authentication pool has been provided
var ErrNilPeerAuthenticationPool = errors.New("nil peer authentication pool")

// ErrPeerAuthNotFound signals that no peer authentication found
var ErrPeerAuthNotFound = errors.New("peer authentication not found")

// ErrNilNodesCoordinator signals a nil nodes coordinator has been provided
var ErrNilNodesCoordinator = errors.New("nil nodes coordinator")

// InvalidChunkIndex signals that an invalid chunk was provided
var InvalidChunkIndex = errors.New("invalid chunk index")

// ErrInvalidNumOfPeerAuthentication signals that an invalid number of peer authentication was provided
var ErrInvalidNumOfPeerAuthentication = errors.New("invalid num of peer authentication")
Original file line number Diff line number Diff line change
Expand Up @@ -149,13 +149,15 @@ func (brcf *baseResolversContainerFactory) createTxResolver(
}

arg := resolvers.ArgTxResolver{
SenderResolver: resolverSender,
ArgBaseResolver: resolvers.ArgBaseResolver{
iulianpascalau marked this conversation as resolved.
Show resolved Hide resolved
SenderResolver: resolverSender,
Marshalizer: brcf.marshalizer,
AntifloodHandler: brcf.inputAntifloodHandler,
Throttler: brcf.throttler,
},
TxPool: dataPool,
TxStorage: txStorer,
Marshalizer: brcf.marshalizer,
DataPacker: brcf.dataPacker,
AntifloodHandler: brcf.inputAntifloodHandler,
Throttler: brcf.throttler,
IsFullHistoryNode: brcf.isFullHistoryNode,
}
resolver, err := resolvers.NewTxResolver(arg)
Expand Down Expand Up @@ -226,12 +228,14 @@ func (brcf *baseResolversContainerFactory) createMiniBlocksResolver(
}

arg := resolvers.ArgMiniblockResolver{
SenderResolver: resolverSender,
ArgBaseResolver: resolvers.ArgBaseResolver{
SenderResolver: resolverSender,
Marshalizer: brcf.marshalizer,
AntifloodHandler: brcf.inputAntifloodHandler,
Throttler: brcf.throttler,
},
MiniBlockPool: brcf.dataPools.MiniBlocks(),
MiniBlockStorage: miniBlocksStorer,
Marshalizer: brcf.marshalizer,
AntifloodHandler: brcf.inputAntifloodHandler,
Throttler: brcf.throttler,
DataPacker: brcf.dataPacker,
IsFullHistoryNode: brcf.isFullHistoryNode,
}
Expand Down Expand Up @@ -328,11 +332,13 @@ func (brcf *baseResolversContainerFactory) createTrieNodesResolver(

trie := brcf.triesContainer.Get([]byte(trieId))
argTrie := resolvers.ArgTrieNodeResolver{
SenderResolver: resolverSender,
TrieDataGetter: trie,
Marshalizer: brcf.marshalizer,
AntifloodHandler: brcf.inputAntifloodHandler,
Throttler: brcf.throttler,
ArgBaseResolver: resolvers.ArgBaseResolver{
SenderResolver: resolverSender,
Marshalizer: brcf.marshalizer,
AntifloodHandler: brcf.inputAntifloodHandler,
Throttler: brcf.throttler,
},
TrieDataGetter: trie,
}
resolver, err := resolvers.NewTrieNodeResolver(argTrie)
if err != nil {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -196,15 +196,17 @@ func (mrcf *metaResolversContainerFactory) createShardHeaderResolver(
hdrNonceHashDataUnit := dataRetriever.ShardHdrNonceHashDataUnit + dataRetriever.UnitType(shardID)
hdrNonceStore := mrcf.store.GetStorer(hdrNonceHashDataUnit)
arg := resolvers.ArgHeaderResolver{
SenderResolver: resolverSender,
ArgBaseResolver: resolvers.ArgBaseResolver{
SenderResolver: resolverSender,
Marshalizer: mrcf.marshalizer,
AntifloodHandler: mrcf.inputAntifloodHandler,
Throttler: mrcf.throttler,
},
Headers: mrcf.dataPools.Headers(),
HdrStorage: hdrStorer,
HeadersNoncesStorage: hdrNonceStore,
Marshalizer: mrcf.marshalizer,
NonceConverter: mrcf.uint64ByteSliceConverter,
ShardCoordinator: mrcf.shardCoordinator,
AntifloodHandler: mrcf.inputAntifloodHandler,
Throttler: mrcf.throttler,
IsFullHistoryNode: mrcf.isFullHistoryNode,
}
resolver, err := resolvers.NewHeaderResolver(arg)
Expand Down Expand Up @@ -245,15 +247,17 @@ func (mrcf *metaResolversContainerFactory) createMetaChainHeaderResolver(

hdrNonceStore := mrcf.store.GetStorer(dataRetriever.MetaHdrNonceHashDataUnit)
arg := resolvers.ArgHeaderResolver{
SenderResolver: resolverSender,
ArgBaseResolver: resolvers.ArgBaseResolver{
SenderResolver: resolverSender,
Marshalizer: mrcf.marshalizer,
AntifloodHandler: mrcf.inputAntifloodHandler,
Throttler: mrcf.throttler,
},
Headers: mrcf.dataPools.Headers(),
HdrStorage: hdrStorer,
HeadersNoncesStorage: hdrNonceStore,
Marshalizer: mrcf.marshalizer,
NonceConverter: mrcf.uint64ByteSliceConverter,
ShardCoordinator: mrcf.shardCoordinator,
AntifloodHandler: mrcf.inputAntifloodHandler,
Throttler: mrcf.throttler,
IsFullHistoryNode: mrcf.isFullHistoryNode,
}
resolver, err := resolvers.NewHeaderResolver(arg)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -137,15 +137,17 @@ func (srcf *shardResolversContainerFactory) generateHeaderResolvers() error {
hdrNonceHashDataUnit := dataRetriever.ShardHdrNonceHashDataUnit + dataRetriever.UnitType(shardC.SelfId())
hdrNonceStore := srcf.store.GetStorer(hdrNonceHashDataUnit)
arg := resolvers.ArgHeaderResolver{
SenderResolver: resolverSender,
ArgBaseResolver: resolvers.ArgBaseResolver{
SenderResolver: resolverSender,
Marshalizer: srcf.marshalizer,
AntifloodHandler: srcf.inputAntifloodHandler,
Throttler: srcf.throttler,
},
Headers: srcf.dataPools.Headers(),
HdrStorage: hdrStorer,
HeadersNoncesStorage: hdrNonceStore,
Marshalizer: srcf.marshalizer,
NonceConverter: srcf.uint64ByteSliceConverter,
ShardCoordinator: srcf.shardCoordinator,
AntifloodHandler: srcf.inputAntifloodHandler,
Throttler: srcf.throttler,
IsFullHistoryNode: srcf.isFullHistoryNode,
}
resolver, err := resolvers.NewHeaderResolver(arg)
Expand Down Expand Up @@ -176,15 +178,17 @@ func (srcf *shardResolversContainerFactory) generateMetablockHeaderResolvers() e

hdrNonceStore := srcf.store.GetStorer(dataRetriever.MetaHdrNonceHashDataUnit)
arg := resolvers.ArgHeaderResolver{
SenderResolver: resolverSender,
ArgBaseResolver: resolvers.ArgBaseResolver{
SenderResolver: resolverSender,
Marshalizer: srcf.marshalizer,
AntifloodHandler: srcf.inputAntifloodHandler,
Throttler: srcf.throttler,
},
Headers: srcf.dataPools.Headers(),
HdrStorage: hdrStorer,
HeadersNoncesStorage: hdrNonceStore,
Marshalizer: srcf.marshalizer,
NonceConverter: srcf.uint64ByteSliceConverter,
ShardCoordinator: srcf.shardCoordinator,
AntifloodHandler: srcf.inputAntifloodHandler,
Throttler: srcf.throttler,
IsFullHistoryNode: srcf.isFullHistoryNode,
}
resolver, err := resolvers.NewHeaderResolver(arg)
Expand Down
13 changes: 13 additions & 0 deletions dataRetriever/interface.go
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,13 @@ type MiniBlocksResolver interface {
RequestDataFromHashArray(hashes [][]byte, epoch uint32) error
}

// PeerAuthenticationResolver defines what a peer authentication resolver should do
type PeerAuthenticationResolver interface {
Resolver
RequestDataFromChunk(chunkIndex uint32, epoch uint32) error
RequestDataFromHashArray(hashes [][]byte, epoch uint32) error
}

// TopicResolverSender defines what sending operations are allowed for a topic resolver
type TopicResolverSender interface {
SendOnRequestTopic(rd *RequestData, originalHashes [][]byte) error
Expand Down Expand Up @@ -414,3 +421,9 @@ type SelfShardIDProvider interface {
SelfId() uint32
IsInterfaceNil() bool
}

// NodesCoordinator provides Validator methods needed for the peer processing
type NodesCoordinator interface {
GetAllEligibleValidatorsPublicKeys(epoch uint32) (map[uint32][][]byte, error)
IsInterfaceNil() bool
}
20 changes: 20 additions & 0 deletions dataRetriever/mock/nodesCoordinatorStub.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package mock

// NodesCoordinatorStub -
type NodesCoordinatorStub struct {
GetAllEligibleValidatorsPublicKeysCalled func(epoch uint32) (map[uint32][][]byte, error)
}

// GetAllEligibleValidatorsPublicKeys -
func (nc *NodesCoordinatorStub) GetAllEligibleValidatorsPublicKeys(epoch uint32) (map[uint32][][]byte, error) {
if nc.GetAllEligibleValidatorsPublicKeysCalled != nil {
return nc.GetAllEligibleValidatorsPublicKeysCalled(epoch)
}

return nil, nil
}

// IsInterfaceNil -
func (nc *NodesCoordinatorStub) IsInterfaceNil() bool {
return nc == nil
}
50 changes: 27 additions & 23 deletions dataRetriever/requestData.pb.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions dataRetriever/requestData.proto
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ enum RequestDataType {
NonceType = 3;
// EpochType indicates that the request data object is of type epoch
EpochType = 4;
// ChunkType indicates that the request data object is of type chunk
ChunkType = 5;
}

// RequestData holds the requested data
Expand Down
55 changes: 55 additions & 0 deletions dataRetriever/resolvers/baseResolver.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package resolvers

import (
"github.com/ElrondNetwork/elrond-go-core/core/check"
"github.com/ElrondNetwork/elrond-go-core/marshal"
"github.com/ElrondNetwork/elrond-go/dataRetriever"
)

// ArgBaseResolver is the argument structure used as base to create a new a resolver instance
type ArgBaseResolver struct {
SenderResolver dataRetriever.TopicResolverSender
Marshalizer marshal.Marshalizer
AntifloodHandler dataRetriever.P2PAntifloodHandler
Throttler dataRetriever.ResolverThrottler
}

type baseResolver struct {
dataRetriever.TopicResolverSender
}

func checkArgBase(arg ArgBaseResolver) error {
if check.IfNil(arg.SenderResolver) {
return dataRetriever.ErrNilResolverSender
}
if check.IfNil(arg.Marshalizer) {
return dataRetriever.ErrNilMarshalizer
}
if check.IfNil(arg.AntifloodHandler) {
return dataRetriever.ErrNilAntifloodHandler
}
if check.IfNil(arg.Throttler) {
return dataRetriever.ErrNilThrottler
}
return nil
}

// SetNumPeersToQuery will set the number of intra shard and cross shard number of peer to query
func (res *baseResolver) SetNumPeersToQuery(intra int, cross int) {
res.TopicResolverSender.SetNumPeersToQuery(intra, cross)
}

// NumPeersToQuery will return the number of intra shard and cross shard number of peer to query
func (res *baseResolver) NumPeersToQuery() (int, int) {
return res.TopicResolverSender.NumPeersToQuery()
}

// SetResolverDebugHandler will set a resolver debug handler
func (res *baseResolver) SetResolverDebugHandler(handler dataRetriever.ResolverDebugHandler) error {
return res.TopicResolverSender.SetResolverDebugHandler(handler)
}

// Close returns nil
func (res *baseResolver) Close() error {
return nil
}
11 changes: 11 additions & 0 deletions dataRetriever/resolvers/common_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,14 @@ func createRequestMsg(dataType dataRetriever.RequestDataType, val []byte) p2p.Me
buff, _ := marshalizer.Marshal(&dataRetriever.RequestData{Type: dataType, Value: val})
return &mock.P2PMessageMock{DataField: buff}
}

func createRequestMsgWithChunkIndex(dataType dataRetriever.RequestDataType, val []byte, epoch uint32, chunkIndex uint32) p2p.MessageP2P {
marshalizer := &mock.MarshalizerMock{}
buff, _ := marshalizer.Marshal(&dataRetriever.RequestData{
Type: dataType,
Value: val,
Epoch: epoch,
ChunkIndex: chunkIndex,
})
return &mock.P2PMessageMock{DataField: buff}
}
Loading