status-go/services/wallet/watch_transaction.go

42 lines
814 B
Go

package wallet
import (
"context"
"errors"
"time"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/event"
"github.com/ethereum/go-ethereum/log"
)
type watchTransactionCommand struct {
client *walletClient
hash common.Hash
feed *event.Feed
}
func (c *watchTransactionCommand) Command() Command {
return FiniteCommand{
Interval: 10 * time.Second,
Runable: c.Run,
}.Run
}
func (c *watchTransactionCommand) Run(ctx context.Context) error {
requestContext, cancel := context.WithTimeout(ctx, 10*time.Second)
defer cancel()
_, isPending, err := c.client.TransactionByHash(requestContext, c.hash)
if err != nil {
log.Error("Watching transaction error", "error", err)
return err
}
if isPending {
return errors.New("Transaction is pending")
}
return nil
}