fix: remove ws eth endpoint requirement, update taker exit (#358)

This commit is contained in:
noot
2023-03-28 10:21:28 -04:00
committed by GitHub
parent 528715b602
commit 4c3caedcc3
13 changed files with 132 additions and 59 deletions

View File

@@ -26,22 +26,18 @@ func WaitForEthBlockAfterTimestamp(ctx context.Context, ec *ethclient.Client, ts
return nil, err
}
// subscribe to new block headers
headers := make(chan *ethtypes.Header)
defer close(headers)
sub, err := ec.SubscribeNewHead(ctx, headers)
if err != nil {
return nil, err
}
defer sub.Unsubscribe()
ticker := time.NewTicker(time.Second)
for {
select {
case <-ctx.Done():
return nil, ctx.Err()
case err := <-sub.Err():
return nil, err
case header := <-headers:
case <-ticker.C:
header, err := ec.HeaderByNumber(ctx, nil)
if err != nil {
return nil, err
}
if header.Time >= uint64(ts.Unix()) {
return header, nil
}

View File

@@ -56,11 +56,6 @@ func NewEventFilter(
// Start starts the EventFilter. It watches the chain for logs.
func (f *EventFilter) Start() error {
header, err := f.ec.HeaderByNumber(f.ctx, nil)
if err != nil {
return err
}
go func() {
for {
select {
@@ -71,10 +66,11 @@ func (f *EventFilter) Start() error {
currHeader, err := f.ec.HeaderByNumber(f.ctx, nil)
if err != nil {
log.Errorf("failed to get header in event watcher: %s", err)
continue
}
if currHeader.Number.Cmp(header.Number) <= 0 {
if currHeader.Number.Cmp(f.filterQuery.FromBlock) <= 0 {
// no new blocks, don't do anything
continue
}
@@ -82,9 +78,12 @@ func (f *EventFilter) Start() error {
// let's see if we have logs
logs, err := f.ec.FilterLogs(f.ctx, f.filterQuery)
if err != nil {
log.Errorf("failed to filter logs for topic %s: %s", f.topic, err)
continue
}
log.Debugf("filtered for logs from block %s to block %s", f.filterQuery.FromBlock, currHeader.Number)
for _, l := range logs {
if l.Topics[0] != f.topic {
continue
@@ -95,12 +94,11 @@ func (f *EventFilter) Start() error {
continue
}
log.Debugf("watcher for topic %s found log in block %d", f.topic, l.BlockNumber)
f.logCh <- l
}
// the filter is inclusive of the latest block when `ToBlock` is nil, so we add 1
f.filterQuery.FromBlock = new(big.Int).Add(currHeader.Number, big.NewInt(1))
header = currHeader
f.filterQuery.FromBlock = currHeader.Number
}
}()