Skip to content

Commit

Permalink
Merge pull request #2026 from ElrondNetwork/fix-whitelisting-requests
Browse files Browse the repository at this point in the history
Fix whitelisting of nonce/epoch requests
  • Loading branch information
sasurobert committed Jun 26, 2020
2 parents a038856 + 3816e6a commit a058e7d
Show file tree
Hide file tree
Showing 25 changed files with 18 additions and 85 deletions.
2 changes: 0 additions & 2 deletions cmd/node/factory/structs.go
Original file line number Diff line number Diff line change
Expand Up @@ -766,7 +766,6 @@ func newShardInterceptorContainerFactory(
WhiteListHandler: whiteListHandler,
WhiteListerVerifiedTxs: whiteListerVerifiedTxs,
AntifloodHandler: network.InputAntifloodHandler,
NonceConverter: dataCore.Uint64ByteSliceConverter,
}
interceptorContainerFactory, err := interceptorscontainer.NewShardInterceptorsContainerFactory(shardInterceptorsContainerFactoryArgs)
if err != nil {
Expand Down Expand Up @@ -821,7 +820,6 @@ func newMetaInterceptorContainerFactory(
WhiteListHandler: whiteListHandler,
WhiteListerVerifiedTxs: whiteListerVerifiedTxs,
AntifloodHandler: network.InputAntifloodHandler,
NonceConverter: dataCore.Uint64ByteSliceConverter,
}
interceptorContainerFactory, err := interceptorscontainer.NewMetaInterceptorsContainerFactory(metaInterceptorsContainerFactoryArgs)
if err != nil {
Expand Down
2 changes: 2 additions & 0 deletions dataRetriever/requestHandlers/requestHandler.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ var log = logger.GetOrCreate("dataretriever/requesthandlers")
const minHashesToRequest = 10
const timeToAccumulateTrieHashes = 100 * time.Millisecond

//TODO move the keys definitions that are whitelisted in core and use them in InterceptedData implementations, Identifiers() function

type resolverRequestHandler struct {
epoch uint32
shardID uint32
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,6 @@ func NewEpochStartInterceptorsContainer(args ArgsEpochStartInterceptorContainer)
WhiteListHandler: args.WhiteListHandler,
WhiteListerVerifiedTxs: args.WhiteListerVerifiedTxs,
AntifloodHandler: antiFloodHandler,
NonceConverter: args.NonceConverter,
}

interceptorsContainerFactory, err := interceptorscontainer.NewMetaInterceptorsContainerFactory(containerFactoryArgs)
Expand Down
1 change: 0 additions & 1 deletion epochStart/bootstrap/syncEpochStartMeta.go
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,6 @@ func NewEpochStartMetaSyncer(args ArgsNewEpochStartMetaSyncer) (*epochStartMetaS
HeaderIntegrityVerifier: headerIntegrityVerifier,
ValidityAttester: disabled.NewValidityAttester(),
EpochStartTrigger: disabled.NewEpochStartTrigger(),
NonceConverter: args.NonceConverter,
}

interceptedMetaHdrDataFactory, err := interceptorsFactory.NewInterceptedMetaHeaderDataFactory(&argsInterceptedDataFactory)
Expand Down
2 changes: 0 additions & 2 deletions integrationTests/testProcessorNode.go
Original file line number Diff line number Diff line change
Expand Up @@ -688,7 +688,6 @@ func (tpn *TestProcessorNode) initInterceptors() {
WhiteListHandler: tpn.WhiteListHandler,
WhiteListerVerifiedTxs: tpn.WhiteListerVerifiedTxs,
AntifloodHandler: &mock.NilAntifloodHandler{},
NonceConverter: TestUint64Converter,
}
interceptorContainerFactory, _ := interceptorscontainer.NewMetaInterceptorsContainerFactory(metaIntercContFactArgs)

Expand Down Expand Up @@ -747,7 +746,6 @@ func (tpn *TestProcessorNode) initInterceptors() {
WhiteListHandler: tpn.WhiteListHandler,
WhiteListerVerifiedTxs: tpn.WhiteListerVerifiedTxs,
AntifloodHandler: &mock.NilAntifloodHandler{},
NonceConverter: TestUint64Converter,
}
interceptorContainerFactory, _ := interceptorscontainer.NewShardInterceptorsContainerFactory(shardInterContFactArgs)

Expand Down
2 changes: 0 additions & 2 deletions process/block/interceptedBlocks/argInterceptedBlockHeader.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package interceptedBlocks

import (
"github.com/ElrondNetwork/elrond-go/data/typeConverters"
"github.com/ElrondNetwork/elrond-go/hashing"
"github.com/ElrondNetwork/elrond-go/marshal"
"github.com/ElrondNetwork/elrond-go/process"
Expand All @@ -18,5 +17,4 @@ type ArgInterceptedBlockHeader struct {
HeaderIntegrityVerifier process.InterceptedHeaderIntegrityVerifier
ValidityAttester process.ValidityAttester
EpochStartTrigger process.EpochStartTriggerHandler
NonceConverter typeConverters.Uint64ByteSliceConverter
}
3 changes: 0 additions & 3 deletions process/block/interceptedBlocks/common.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,9 +37,6 @@ func checkBlockHeaderArgument(arg *ArgInterceptedBlockHeader) error {
if check.IfNil(arg.ValidityAttester) {
return process.ErrNilValidityAttester
}
if check.IfNil(arg.NonceConverter) {
return process.ErrNilUint64Converter
}

return nil
}
Expand Down
12 changes: 0 additions & 12 deletions process/block/interceptedBlocks/common_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ func createDefaultBlockHeaderArgument() *ArgInterceptedBlockHeader {
HeaderIntegrityVerifier: &mock.HeaderIntegrityVerifierStub{},
ValidityAttester: &mock.ValidityAttesterStub{},
EpochStartTrigger: &mock.EpochStartTriggerStub{},
NonceConverter: mock.NewNonceHashConverterMock(),
}

return arg
Expand Down Expand Up @@ -135,17 +134,6 @@ func TestCheckBlockHeaderArgument_NilValidityAttesterShouldErr(t *testing.T) {
assert.Equal(t, process.ErrNilValidityAttester, err)
}

func TestCheckBlockHeaderArgument_NilNonceConverterShouldErr(t *testing.T) {
t.Parallel()

arg := createDefaultBlockHeaderArgument()
arg.NonceConverter = nil

err := checkBlockHeaderArgument(arg)

assert.Equal(t, process.ErrNilUint64Converter, err)
}

func TestCheckBlockHeaderArgument_ShouldWork(t *testing.T) {
t.Parallel()

Expand Down
8 changes: 3 additions & 5 deletions process/block/interceptedBlocks/interceptedBlockHeader.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import (
"github.com/ElrondNetwork/elrond-go/core"
"github.com/ElrondNetwork/elrond-go/data"
"github.com/ElrondNetwork/elrond-go/data/block"
"github.com/ElrondNetwork/elrond-go/data/typeConverters"
"github.com/ElrondNetwork/elrond-go/hashing"
"github.com/ElrondNetwork/elrond-go/marshal"
"github.com/ElrondNetwork/elrond-go/process"
Expand All @@ -29,7 +28,6 @@ type InterceptedHeader struct {
isForCurrentShard bool
validityAttester process.ValidityAttester
epochStartTrigger process.EpochStartTriggerHandler
nonceConverter typeConverters.Uint64ByteSliceConverter
}

// NewInterceptedHeader creates a new instance of InterceptedHeader struct
Expand All @@ -52,7 +50,6 @@ func NewInterceptedHeader(arg *ArgInterceptedBlockHeader) (*InterceptedHeader, e
shardCoordinator: arg.ShardCoordinator,
validityAttester: arg.ValidityAttester,
epochStartTrigger: arg.EpochStartTrigger,
nonceConverter: arg.NonceConverter,
}
inHdr.processFields(arg.HdrBuff)

Expand Down Expand Up @@ -192,9 +189,10 @@ func (inHdr *InterceptedHeader) String() string {

// Identifiers returns the identifiers used in requests
func (inHdr *InterceptedHeader) Identifiers() [][]byte {
nonceBytes := inHdr.nonceConverter.ToByteSlice(inHdr.hdr.Nonce)
keyNonce := []byte(fmt.Sprintf("%d-%d", inHdr.hdr.ShardID, inHdr.hdr.Nonce))
keyEpoch := []byte(core.EpochStartIdentifier(inHdr.hdr.Epoch))

return [][]byte{inHdr.hash, nonceBytes}
return [][]byte{inHdr.hash, keyNonce, keyEpoch}
}

// IsInterfaceNil returns true if there is no value under the interface
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@ func createDefaultShardArgument() *interceptedBlocks.ArgInterceptedBlockHeader {
HeaderIntegrityVerifier: &mock.HeaderIntegrityVerifierStub{},
ValidityAttester: &mock.ValidityAttesterStub{},
EpochStartTrigger: &mock.EpochStartTriggerStub{},
NonceConverter: mock.NewNonceHashConverterMock(),
}

hdr := createMockShardHeader()
Expand Down
9 changes: 4 additions & 5 deletions process/block/interceptedBlocks/interceptedMetaBlockHeader.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ package interceptedBlocks
import (
"fmt"

"github.com/ElrondNetwork/elrond-go/core"
"github.com/ElrondNetwork/elrond-go/data"
"github.com/ElrondNetwork/elrond-go/data/block"
"github.com/ElrondNetwork/elrond-go/data/typeConverters"
"github.com/ElrondNetwork/elrond-go/hashing"
"github.com/ElrondNetwork/elrond-go/marshal"
"github.com/ElrondNetwork/elrond-go/process"
Expand All @@ -25,7 +25,6 @@ type InterceptedMetaHeader struct {
hash []byte
validityAttester process.ValidityAttester
epochStartTrigger process.EpochStartTriggerHandler
nonceConverter typeConverters.Uint64ByteSliceConverter
}

// NewInterceptedMetaHeader creates a new instance of InterceptedMetaHeader struct
Expand All @@ -48,7 +47,6 @@ func NewInterceptedMetaHeader(arg *ArgInterceptedBlockHeader) (*InterceptedMetaH
shardCoordinator: arg.ShardCoordinator,
validityAttester: arg.ValidityAttester,
epochStartTrigger: arg.EpochStartTrigger,
nonceConverter: arg.NonceConverter,
}
inHdr.processFields(arg.HdrBuff)

Expand Down Expand Up @@ -147,9 +145,10 @@ func (imh *InterceptedMetaHeader) String() string {

// Identifiers returns the identifiers used in requests
func (imh *InterceptedMetaHeader) Identifiers() [][]byte {
nonceBytes := imh.nonceConverter.ToByteSlice(imh.hdr.Nonce)
keyNonce := []byte(fmt.Sprintf("%d-%d", core.MetachainShardId, imh.hdr.Nonce))
keyEpoch := []byte(core.EpochStartIdentifier(imh.hdr.Epoch))

return [][]byte{imh.hash, nonceBytes}
return [][]byte{imh.hash, keyNonce, keyEpoch}
}

// IsInterfaceNil returns true if there is no value under the interface
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ func createDefaultMetaArgument() *interceptedBlocks.ArgInterceptedBlockHeader {
HeaderIntegrityVerifier: &mock.HeaderIntegrityVerifierStub{},
ValidityAttester: &mock.ValidityAttesterStub{},
EpochStartTrigger: &mock.EpochStartTriggerStub{},
NonceConverter: mock.NewNonceHashConverterMock(),
}

hdr := createMockMetaHeader()
Expand Down
3 changes: 0 additions & 3 deletions process/factory/interceptorscontainer/args.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import (
"github.com/ElrondNetwork/elrond-go/core"
"github.com/ElrondNetwork/elrond-go/crypto"
"github.com/ElrondNetwork/elrond-go/data/state"
"github.com/ElrondNetwork/elrond-go/data/typeConverters"
"github.com/ElrondNetwork/elrond-go/dataRetriever"
"github.com/ElrondNetwork/elrond-go/hashing"
"github.com/ElrondNetwork/elrond-go/marshal"
Expand Down Expand Up @@ -40,7 +39,6 @@ type ShardInterceptorsContainerFactoryArgs struct {
WhiteListHandler process.WhiteListHandler
WhiteListerVerifiedTxs process.WhiteListHandler
AntifloodHandler process.P2PAntifloodHandler
NonceConverter typeConverters.Uint64ByteSliceConverter
}

// MetaInterceptorsContainerFactoryArgs holds the arguments needed for MetaInterceptorsContainerFactory
Expand Down Expand Up @@ -71,5 +69,4 @@ type MetaInterceptorsContainerFactoryArgs struct {
WhiteListHandler process.WhiteListHandler
WhiteListerVerifiedTxs process.WhiteListHandler
AntifloodHandler process.P2PAntifloodHandler
NonceConverter typeConverters.Uint64ByteSliceConverter
}
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,6 @@ func NewMetaInterceptorsContainerFactory(
HeaderIntegrityVerifier: args.HeaderIntegrityVerifier,
ValidityAttester: args.ValidityAttester,
EpochStartTrigger: args.EpochStartTrigger,
NonceConverter: args.NonceConverter,
WhiteListerVerifiedTxs: args.WhiteListerVerifiedTxs,
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -480,7 +480,6 @@ func getArgumentsMeta() interceptorscontainer.MetaInterceptorsContainerFactoryAr
EpochStartTrigger: &mock.EpochStartTriggerStub{},
AntifloodHandler: &mock.P2PAntifloodHandlerStub{},
WhiteListHandler: &mock.WhiteListHandlerStub{},
NonceConverter: mock.NewNonceHashConverterMock(),
WhiteListerVerifiedTxs: &mock.WhiteListHandlerStub{},
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,6 @@ func NewShardInterceptorsContainerFactory(
HeaderIntegrityVerifier: args.HeaderIntegrityVerifier,
ValidityAttester: args.ValidityAttester,
EpochStartTrigger: args.EpochStartTrigger,
NonceConverter: args.NonceConverter,
WhiteListerVerifiedTxs: args.WhiteListerVerifiedTxs,
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -530,7 +530,6 @@ func getArgumentsShard() interceptorscontainer.ShardInterceptorsContainerFactory
EpochStartTrigger: &mock.EpochStartTriggerStub{},
AntifloodHandler: &mock.P2PAntifloodHandlerStub{},
WhiteListHandler: &mock.WhiteListHandlerStub{},
NonceConverter: mock.NewNonceHashConverterMock(),
WhiteListerVerifiedTxs: &mock.WhiteListHandlerStub{},
}
}
2 changes: 0 additions & 2 deletions process/interceptors/factory/argInterceptedDataFactory.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package factory
import (
"github.com/ElrondNetwork/elrond-go/core"
"github.com/ElrondNetwork/elrond-go/crypto"
"github.com/ElrondNetwork/elrond-go/data/typeConverters"
"github.com/ElrondNetwork/elrond-go/hashing"
"github.com/ElrondNetwork/elrond-go/marshal"
"github.com/ElrondNetwork/elrond-go/process"
Expand All @@ -30,5 +29,4 @@ type ArgInterceptedDataFactory struct {
HeaderIntegrityVerifier process.InterceptedHeaderIntegrityVerifier
ValidityAttester process.ValidityAttester
EpochStartTrigger process.EpochStartTriggerHandler
NonceConverter typeConverters.Uint64ByteSliceConverter
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package factory

import (
"github.com/ElrondNetwork/elrond-go/core/check"
"github.com/ElrondNetwork/elrond-go/data/typeConverters"
"github.com/ElrondNetwork/elrond-go/hashing"
"github.com/ElrondNetwork/elrond-go/marshal"
"github.com/ElrondNetwork/elrond-go/process"
Expand All @@ -21,7 +20,6 @@ type interceptedMetaHeaderDataFactory struct {
chainID []byte
validityAttester process.ValidityAttester
epochStartTrigger process.EpochStartTriggerHandler
nonceConverter typeConverters.Uint64ByteSliceConverter
}

// NewInterceptedMetaHeaderDataFactory creates an instance of interceptedMetaHeaderDataFactory
Expand Down Expand Up @@ -53,9 +51,6 @@ func NewInterceptedMetaHeaderDataFactory(argument *ArgInterceptedDataFactory) (*
if check.IfNil(argument.ValidityAttester) {
return nil, process.ErrNilValidityAttester
}
if check.IfNil(argument.NonceConverter) {
return nil, process.ErrNilUint64Converter
}

return &interceptedMetaHeaderDataFactory{
marshalizer: argument.ProtoMarshalizer,
Expand All @@ -65,7 +60,6 @@ func NewInterceptedMetaHeaderDataFactory(argument *ArgInterceptedDataFactory) (*
headerIntegrityVerifier: argument.HeaderIntegrityVerifier,
validityAttester: argument.ValidityAttester,
epochStartTrigger: argument.EpochStartTrigger,
nonceConverter: argument.NonceConverter,
}, nil
}

Expand All @@ -80,7 +74,6 @@ func (imhdf *interceptedMetaHeaderDataFactory) Create(buff []byte) (process.Inte
HeaderIntegrityVerifier: imhdf.headerIntegrityVerifier,
ValidityAttester: imhdf.validityAttester,
EpochStartTrigger: imhdf.epochStartTrigger,
NonceConverter: imhdf.nonceConverter,
}

return interceptedBlocks.NewInterceptedMetaHeader(arg)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,6 @@ func createMockArgument() *ArgInterceptedDataFactory {
HeaderIntegrityVerifier: &mock.HeaderIntegrityVerifierStub{},
ValidityAttester: &mock.ValidityAttesterStub{},
EpochStartTrigger: &mock.EpochStartTriggerStub{},
NonceConverter: mock.NewNonceHashConverterMock(),
WhiteListerVerifiedTxs: &mock.WhiteListHandlerStub{},
}
}
Expand Down Expand Up @@ -159,17 +158,6 @@ func TestNewInterceptedMetaHeaderDataFactory_NilValidityAttesterShouldErr(t *tes
assert.Equal(t, process.ErrNilValidityAttester, err)
}

func TestNewInterceptedMetaHeaderDataFactory_NilNonceConverterShouldErr(t *testing.T) {
t.Parallel()

arg := createMockArgument()
arg.NonceConverter = nil

imh, err := NewInterceptedMetaHeaderDataFactory(arg)
assert.True(t, check.IfNil(imh))
assert.Equal(t, process.ErrNilUint64Converter, err)
}

func TestNewInterceptedMetaHeaderDataFactory_ShouldWorkAndCreate(t *testing.T) {
t.Parallel()

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package factory

import (
"github.com/ElrondNetwork/elrond-go/core/check"
"github.com/ElrondNetwork/elrond-go/data/typeConverters"
"github.com/ElrondNetwork/elrond-go/hashing"
"github.com/ElrondNetwork/elrond-go/marshal"
"github.com/ElrondNetwork/elrond-go/process"
Expand All @@ -21,7 +20,6 @@ type interceptedShardHeaderDataFactory struct {
chainID []byte
validityAttester process.ValidityAttester
epochStartTrigger process.EpochStartTriggerHandler
nonceConverter typeConverters.Uint64ByteSliceConverter
}

// NewInterceptedShardHeaderDataFactory creates an instance of interceptedShardHeaderDataFactory
Expand Down Expand Up @@ -53,9 +51,6 @@ func NewInterceptedShardHeaderDataFactory(argument *ArgInterceptedDataFactory) (
if check.IfNil(argument.ValidityAttester) {
return nil, process.ErrNilValidityAttester
}
if check.IfNil(argument.NonceConverter) {
return nil, process.ErrNilUint64Converter
}

return &interceptedShardHeaderDataFactory{
marshalizer: argument.ProtoMarshalizer,
Expand All @@ -65,7 +60,6 @@ func NewInterceptedShardHeaderDataFactory(argument *ArgInterceptedDataFactory) (
headerIntegrityVerifier: argument.HeaderIntegrityVerifier,
validityAttester: argument.ValidityAttester,
epochStartTrigger: argument.EpochStartTrigger,
nonceConverter: argument.NonceConverter,
}, nil
}

Expand All @@ -80,7 +74,6 @@ func (ishdf *interceptedShardHeaderDataFactory) Create(buff []byte) (process.Int
HeaderIntegrityVerifier: ishdf.headerIntegrityVerifier,
ValidityAttester: ishdf.validityAttester,
EpochStartTrigger: ishdf.epochStartTrigger,
NonceConverter: ishdf.nonceConverter,
}

return interceptedBlocks.NewInterceptedHeader(arg)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,17 +86,6 @@ func TestNewInterceptedShardHeaderDataFactory_NilValidityAttesterShouldErr(t *te
assert.Equal(t, process.ErrNilValidityAttester, err)
}

func TestNewInterceptedShardHeaderDataFactory_NilNonceConverterShouldErr(t *testing.T) {
t.Parallel()

arg := createMockArgument()
arg.NonceConverter = nil

imh, err := NewInterceptedShardHeaderDataFactory(arg)
assert.True(t, check.IfNil(imh))
assert.Equal(t, process.ErrNilUint64Converter, err)
}

func TestInterceptedShardHeaderDataFactory_ShouldWorkAndCreate(t *testing.T) {
t.Parallel()

Expand Down

0 comments on commit a058e7d

Please sign in to comment.