Skip to content

Commit 2ac3c24

Browse files
authored
expose GetLatestLPBlock through EVM Service (#1654)
* expose GetLatestLPBlock through EVM Service * make generate * update comments * use safe converstion to prevent panic on hash size missmatch
1 parent 6b48ba8 commit 2ac3c24

8 files changed

Lines changed: 584 additions & 252 deletions

File tree

pkg/chains/evm/evm.pb.go

Lines changed: 382 additions & 248 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/chains/evm/evm.proto

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ service EVM{
2424
rpc SubmitTransaction(SubmitTransactionRequest) returns (SubmitTransactionReply);
2525
rpc CalculateTransactionFee(CalculateTransactionFeeRequest) returns (CalculateTransactionFeeReply);
2626
rpc GetForwarderForEOA(GetForwarderForEOARequest) returns (GetForwarderForEOAReply);
27+
rpc GetLatestLPBlock(google.protobuf.Empty) returns (GetLatestLPBlockReply);
2728
}
2829

2930
// represents simplified evm-style CallMsg
@@ -105,6 +106,15 @@ message Header {
105106
bytes parent_hash = 4; // in [32]byte fix-sized array format
106107
}
107108

109+
// represents LogPoller's latest/finalized/safe blocks view
110+
message LPBlock {
111+
bytes hash = 1;
112+
int64 latest_block_number = 2;
113+
uint64 block_timestamp = 3; // unix timestamp
114+
int64 finalized_block_number = 4;
115+
int64 safe_block_number = 5;
116+
}
117+
108118
message Expression {
109119
oneof evaluator {
110120
Primitive primitive = 1;
@@ -288,6 +298,10 @@ message QueryTrackedLogsReply {
288298
repeated Log logs = 1;
289299
}
290300

301+
message GetLatestLPBlockReply {
302+
LPBlock lp_block = 1;
303+
}
304+
291305
enum TxStatus {
292306
TX_FATAL = 0;
293307
TX_REVERTED = 1;
@@ -356,4 +370,4 @@ message GetForwarderForEOAReply {
356370

357371
message GetFiltersNamesReply {
358372
repeated string items = 1;
359-
}
373+
}

pkg/chains/evm/evm_grpc.pb.go

Lines changed: 38 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/loop/internal/relayer/evm.go

Lines changed: 52 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,14 @@ func (e *EVMClient) SubmitTransaction(ctx context.Context, txRequest evmtypes.Su
5555
return nil, net.WrapRPCErr(err)
5656
}
5757

58+
h, err := evmpb.ConvertHashFromProto(reply.TxHash)
59+
if err != nil {
60+
return nil, net.WrapRPCErr(err)
61+
}
62+
5863
return &evmtypes.TransactionResult{
5964
TxStatus: evmpb.ConvertTxStatusFromProto(reply.TxStatus),
60-
TxHash: evmtypes.Hash(reply.TxHash),
65+
TxHash: h,
6166
TxIdempotencyKey: reply.TxIdempotencyKey,
6267
}, nil
6368
}
@@ -279,6 +284,25 @@ func (e *EVMClient) GetForwarderForEOA(ctx context.Context, eoa, ocr2AggregatorI
279284
return evmtypes.Address(reply.GetAddr()), nil
280285
}
281286

287+
func (e *EVMClient) GetLatestLPBlock(ctx context.Context) (*evmtypes.LPBlock, error) {
288+
reply, err := e.grpcClient.GetLatestLPBlock(ctx, &emptypb.Empty{})
289+
if err != nil {
290+
return nil, net.WrapRPCErr(err)
291+
}
292+
h, err := evmpb.ConvertHashFromProto(reply.GetLpBlock().GetHash())
293+
if err != nil {
294+
return nil, net.WrapRPCErr(err)
295+
}
296+
297+
return &evmtypes.LPBlock{
298+
BlockTimestamp: reply.GetLpBlock().GetBlockTimestamp(),
299+
LatestBlockNumber: reply.GetLpBlock().GetLatestBlockNumber(),
300+
FinalizedBlockNumber: reply.GetLpBlock().GetFinalizedBlockNumber(),
301+
SafeBlockNumber: reply.GetLpBlock().GetSafeBlockNumber(),
302+
BlockHash: h,
303+
}, nil
304+
}
305+
282306
type evmServer struct {
283307
evmpb.UnimplementedEVMServer
284308

@@ -397,8 +421,12 @@ func (e *evmServer) EstimateGas(ctx context.Context, request *evmpb.EstimateGasR
397421
}
398422

399423
func (e *evmServer) GetTransactionByHash(ctx context.Context, request *evmpb.GetTransactionByHashRequest) (*evmpb.GetTransactionByHashReply, error) {
424+
h, err := evmpb.ConvertHashFromProto(request.GetHash())
425+
if err != nil {
426+
return nil, err
427+
}
400428
tx, err := e.impl.GetTransactionByHash(ctx, evmtypes.GetTransactionByHashRequest{
401-
Hash: evmtypes.Hash(request.GetHash()),
429+
Hash: h,
402430
IsExternal: request.IsExternal,
403431
})
404432
if err != nil {
@@ -414,8 +442,12 @@ func (e *evmServer) GetTransactionByHash(ctx context.Context, request *evmpb.Get
414442
}
415443

416444
func (e *evmServer) GetTransactionReceipt(ctx context.Context, request *evmpb.GetTransactionReceiptRequest) (*evmpb.GetTransactionReceiptReply, error) {
445+
h, err := evmpb.ConvertHashFromProto(request.GetHash())
446+
if err != nil {
447+
return nil, err
448+
}
417449
receipt, err := e.impl.GetTransactionReceipt(ctx, evmtypes.GeTransactionReceiptRequest{
418-
Hash: evmtypes.Hash(request.GetHash()),
450+
Hash: h,
419451
IsExternal: request.IsExternal,
420452
})
421453
if err != nil {
@@ -521,6 +553,23 @@ func (e *evmServer) SubmitTransaction(ctx context.Context, request *evmpb.Submit
521553
}, nil
522554
}
523555

556+
func (e *evmServer) GetLatestLPBlock(ctx context.Context, _ *emptypb.Empty) (*evmpb.GetLatestLPBlockReply, error) {
557+
b, err := e.impl.GetLatestLPBlock(ctx)
558+
if err != nil {
559+
return nil, err
560+
}
561+
562+
return &evmpb.GetLatestLPBlockReply{
563+
LpBlock: &evmpb.LPBlock{
564+
Hash: b.BlockHash[:],
565+
LatestBlockNumber: b.LatestBlockNumber,
566+
FinalizedBlockNumber: b.FinalizedBlockNumber,
567+
SafeBlockNumber: b.SafeBlockNumber,
568+
BlockTimestamp: b.BlockTimestamp,
569+
},
570+
}, nil
571+
}
572+
524573
func (e *evmServer) CalculateTransactionFee(ctx context.Context, request *evmpb.CalculateTransactionFeeRequest) (*evmpb.CalculateTransactionFeeReply, error) {
525574
txFee, err := e.impl.CalculateTransactionFee(ctx, evmtypes.ReceiptGasInfo{
526575
GasUsed: request.GasInfo.GasUsed,

pkg/loop/internal/relayerset/evm.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,10 @@ func (e evmClient) GetForwarderForEOA(ctx context.Context, in *evmpb.GetForwarde
9191
return e.client.GetForwarderForEOA(appendRelayID(ctx, e.relayID), in, opts...)
9292
}
9393

94+
func (e evmClient) GetLatestLPBlock(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*evmpb.GetLatestLPBlockReply, error) {
95+
return e.client.GetLatestLPBlock(appendRelayID(ctx, e.relayID), in, opts...)
96+
}
97+
9498
func (s *Server) GetTransactionFee(ctx context.Context, request *evmpb.GetTransactionFeeRequest) (*evmpb.GetTransactionFeeReply, error) {
9599
evmService, err := s.getEVMService(ctx)
96100
if err != nil {
@@ -456,6 +460,28 @@ func (s *Server) CalculateTransactionFee(ctx context.Context, request *evmpb.Cal
456460
}, nil
457461
}
458462

463+
func (s *Server) GetLatestLPBlock(ctx context.Context, in *emptypb.Empty) (*evmpb.GetLatestLPBlockReply, error) {
464+
evmService, err := s.getEVMService(ctx)
465+
if err != nil {
466+
return nil, err
467+
}
468+
469+
b, err := evmService.GetLatestLPBlock(ctx)
470+
if err != nil {
471+
return nil, err
472+
}
473+
474+
return &evmpb.GetLatestLPBlockReply{
475+
LpBlock: &evmpb.LPBlock{
476+
Hash: b.BlockHash[:],
477+
LatestBlockNumber: b.LatestBlockNumber,
478+
FinalizedBlockNumber: b.FinalizedBlockNumber,
479+
SafeBlockNumber: b.SafeBlockNumber,
480+
BlockTimestamp: b.BlockTimestamp,
481+
},
482+
}, nil
483+
}
484+
459485
func (s *Server) GetForwarderForEOA(ctx context.Context, request *evmpb.GetForwarderForEOARequest) (*evmpb.GetForwarderForEOAReply, error) {
460486
evmService, err := s.getEVMService(ctx)
461487
if err != nil {

pkg/types/chains/evm/evm.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,16 @@ type LPFilterQuery struct {
6969
LogsPerBlock uint64 // rate limit ( maximum # of logs per block, 0 = unlimited )
7070
}
7171

72+
// matches LP Block
73+
// ths block shows the Latest,Finalized,Safe blocks from LogPoller's perspective
74+
type LPBlock struct {
75+
BlockHash Hash
76+
LatestBlockNumber int64
77+
BlockTimestamp uint64
78+
FinalizedBlockNumber int64
79+
SafeBlockNumber int64
80+
}
81+
7282
// matches simplifie evm-style callMsg for reads/EstimateGas
7383
type CallMsg struct {
7484
To Address

pkg/types/mocks/evm_service.go

Lines changed: 58 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/types/relayer.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,9 @@ type EVMService interface {
190190
QueryTrackedLogs(ctx context.Context, filterQuery []query.Expression,
191191
limitAndSort query.LimitAndSort, confidenceLevel primitives.ConfidenceLevel) ([]*evm.Log, error)
192192

193+
// GetLatestLPBlock retrieves current LatestBlock from cache perspective
194+
GetLatestLPBlock(ctx context.Context) (*evm.LPBlock, error)
195+
193196
// GetFiltersNames returns all registered filters' names for later pruning
194197
// TODO PLEX-1465: once code is moved away, remove this GetFiltersNames method
195198
GetFiltersNames(ctx context.Context) ([]string, error)

0 commit comments

Comments
 (0)