Guardian eth nil event check (#1300)

* Guardian eth nil event check

* Check for number being nil in watcher
This commit is contained in:
bruce-riley 2022-06-23 09:40:04 -05:00 committed by GitHub
parent fe198be748
commit cdc6edd425
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 25 additions and 6 deletions

View File

@ -164,6 +164,14 @@ func (e *CeloImpl) SubscribeForBlocks(ctx context.Context, sink chan<- *common.N
case <-ctx.Done(): case <-ctx.Done():
return return
case ev := <-headSink: case ev := <-headSink:
if ev == nil {
e.logger.Error("new header event is nil", zap.String("eth_network", e.NetworkName))
continue
}
if ev.Number == nil {
e.logger.Error("new header block number is nil", zap.String("eth_network", e.NetworkName))
continue
}
sink <- &common.NewBlock{ sink <- &common.NewBlock{
Number: ev.Number, Number: ev.Number,
Hash: ethCommon.BytesToHash(ev.Hash().Bytes()), Hash: ethCommon.BytesToHash(ev.Hash().Bytes()),

View File

@ -20,12 +20,15 @@ import (
type EthImpl struct { type EthImpl struct {
NetworkName string NetworkName string
logger *zap.Logger
client *ethClient.Client client *ethClient.Client
filterer *ethAbi.AbiFilterer filterer *ethAbi.AbiFilterer
caller *ethAbi.AbiCaller caller *ethAbi.AbiCaller
} }
func (e *EthImpl) SetLogger(_l *zap.Logger) {} func (e *EthImpl) SetLogger(l *zap.Logger) {
e.logger = l
}
func (e *EthImpl) DialContext(ctx context.Context, rawurl string) (err error) { func (e *EthImpl) DialContext(ctx context.Context, rawurl string) (err error) {
e.client, err = ethClient.DialContext(ctx, rawurl) e.client, err = ethClient.DialContext(ctx, rawurl)
@ -115,6 +118,14 @@ func (e *EthImpl) SubscribeForBlocks(ctx context.Context, sink chan<- *common.Ne
case <-ctx.Done(): case <-ctx.Done():
return return
case ev := <-headSink: case ev := <-headSink:
if ev == nil {
e.logger.Error("new header event is nil", zap.String("eth_network", e.NetworkName))
continue
}
if ev.Number == nil {
e.logger.Error("new header block number is nil", zap.String("eth_network", e.NetworkName))
continue
}
sink <- &common.NewBlock{ sink <- &common.NewBlock{
Number: ev.Number, Number: ev.Number,
Hash: ev.Hash(), Hash: ev.Hash(),

View File

@ -132,11 +132,6 @@ func (f *GetLogsQuery) DialContext(ctx context.Context, rawurl string) (err erro
timeout, cancel := context.WithTimeout(ctx, 15*time.Second) timeout, cancel := context.WithTimeout(ctx, 15*time.Second)
defer cancel() defer cancel()
f.client, err = ethClient.DialContext(timeout, rawurl) f.client, err = ethClient.DialContext(timeout, rawurl)
if err != nil {
return err
}
return err return err
} }

View File

@ -399,10 +399,15 @@ func (e *Watcher) Run(ctx context.Context) error {
p2p.DefaultRegistry.AddErrorCount(e.chainID, 1) p2p.DefaultRegistry.AddErrorCount(e.chainID, 1)
return return
case ev := <-headSink: case ev := <-headSink:
// These two pointers should have been checked before the event was placed on the channel, but just being safe.
if ev == nil { if ev == nil {
logger.Error("new header event is nil", zap.String("eth_network", e.networkName)) logger.Error("new header event is nil", zap.String("eth_network", e.networkName))
continue continue
} }
if ev.Number == nil {
logger.Error("new header block number is nil", zap.String("eth_network", e.networkName))
continue
}
start := time.Now() start := time.Now()
currentHash := ev.Hash currentHash := ev.Hash