mirror of
https://github.com/AthanorLabs/atomic-swap.git
synced 2026-01-09 22:28:04 -05:00
fix: remove ws eth endpoint requirement, update taker exit (#358)
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user