51 lines
1.5 KiB
Go
51 lines
1.5 KiB
Go
|
package rpcservices
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"fmt"
|
||
|
"time"
|
||
|
|
||
|
"github.com/ledgerwatch/erigon-lib/gointerfaces"
|
||
|
"github.com/ledgerwatch/erigon-lib/gointerfaces/grpcutil"
|
||
|
txpooproto "github.com/ledgerwatch/erigon-lib/gointerfaces/txpool"
|
||
|
txpool2 "github.com/ledgerwatch/erigon-lib/txpool"
|
||
|
"github.com/ledgerwatch/log/v3"
|
||
|
"google.golang.org/grpc"
|
||
|
"google.golang.org/protobuf/types/known/emptypb"
|
||
|
)
|
||
|
|
||
|
type TxPoolService struct {
|
||
|
txpooproto.TxpoolClient
|
||
|
log log.Logger
|
||
|
version gointerfaces.Version
|
||
|
}
|
||
|
|
||
|
func NewTxPoolService(client txpooproto.TxpoolClient) *TxPoolService {
|
||
|
return &TxPoolService{
|
||
|
TxpoolClient: client,
|
||
|
version: gointerfaces.VersionFromProto(txpool2.TxPoolAPIVersion),
|
||
|
log: log.New("remote_service", "tx_pool"),
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (s *TxPoolService) EnsureVersionCompatibility() bool {
|
||
|
Start:
|
||
|
versionReply, err := s.Version(context.Background(), &emptypb.Empty{}, grpc.WaitForReady(true))
|
||
|
if err != nil {
|
||
|
if grpcutil.ErrIs(err, txpool2.ErrPoolDisabled) {
|
||
|
time.Sleep(3 * time.Second)
|
||
|
goto Start
|
||
|
}
|
||
|
s.log.Error("ensure version", "err", err)
|
||
|
return false
|
||
|
}
|
||
|
if !gointerfaces.EnsureVersion(s.version, versionReply) {
|
||
|
s.log.Error("incompatible interface versions", "client", s.version.String(),
|
||
|
"server", fmt.Sprintf("%d.%d.%d", versionReply.Major, versionReply.Minor, versionReply.Patch))
|
||
|
return false
|
||
|
}
|
||
|
s.log.Info("interfaces compatible", "client", s.version.String(),
|
||
|
"server", fmt.Sprintf("%d.%d.%d", versionReply.Major, versionReply.Minor, versionReply.Patch))
|
||
|
return true
|
||
|
}
|