2022-05-26 03:31:06 +00:00
|
|
|
package rpcservices
|
2021-05-22 10:00:13 +00:00
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
"fmt"
|
|
|
|
|
2021-07-01 21:31:14 +00:00
|
|
|
"github.com/ledgerwatch/erigon-lib/gointerfaces"
|
|
|
|
"github.com/ledgerwatch/erigon-lib/gointerfaces/txpool"
|
2021-07-28 02:47:38 +00:00
|
|
|
"github.com/ledgerwatch/erigon/ethdb/privateapi"
|
2021-07-29 10:23:23 +00:00
|
|
|
"github.com/ledgerwatch/log/v3"
|
2021-05-22 10:00:13 +00:00
|
|
|
"google.golang.org/grpc"
|
|
|
|
"google.golang.org/protobuf/types/known/emptypb"
|
|
|
|
)
|
|
|
|
|
|
|
|
type MiningService struct {
|
|
|
|
txpool.MiningClient
|
|
|
|
log log.Logger
|
|
|
|
version gointerfaces.Version
|
|
|
|
}
|
|
|
|
|
2022-02-11 10:11:59 +00:00
|
|
|
func NewMiningService(client txpool.MiningClient) *MiningService {
|
2021-05-22 10:00:13 +00:00
|
|
|
return &MiningService{
|
2022-02-11 10:11:59 +00:00
|
|
|
MiningClient: client,
|
2021-07-28 02:47:38 +00:00
|
|
|
version: gointerfaces.VersionFromProto(privateapi.MiningAPIVersion),
|
2021-05-22 10:00:13 +00:00
|
|
|
log: log.New("remote_service", "mining"),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (s *MiningService) EnsureVersionCompatibility() bool {
|
|
|
|
versionReply, err := s.Version(context.Background(), &emptypb.Empty{}, grpc.WaitForReady(true))
|
|
|
|
if err != nil {
|
2022-03-01 15:40:51 +00:00
|
|
|
s.log.Error("getting Version", "err", err)
|
2021-05-22 10:00:13 +00:00
|
|
|
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
|
|
|
|
}
|