Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
630 changes: 382 additions & 248 deletions pkg/chains/evm/evm.pb.go

Large diffs are not rendered by default.

16 changes: 15 additions & 1 deletion pkg/chains/evm/evm.proto
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ service EVM{
rpc SubmitTransaction(SubmitTransactionRequest) returns (SubmitTransactionReply);
rpc CalculateTransactionFee(CalculateTransactionFeeRequest) returns (CalculateTransactionFeeReply);
rpc GetForwarderForEOA(GetForwarderForEOARequest) returns (GetForwarderForEOAReply);
rpc GetLatestLPBlock(google.protobuf.Empty) returns (GetLatestLPBlockReply);
}

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

// represents LogPoller's latest/finalized/safe blocks view
message LPBlock {
bytes hash = 1;
int64 latest_block_number = 2;
uint64 block_timestamp = 3; // unix timestamp
int64 finalized_block_number = 4;
int64 safe_block_number = 5;
}

message Expression {
oneof evaluator {
Primitive primitive = 1;
Expand Down Expand Up @@ -288,6 +298,10 @@ message QueryTrackedLogsReply {
repeated Log logs = 1;
}

message GetLatestLPBlockReply {
LPBlock lp_block = 1;
}

enum TxStatus {
TX_FATAL = 0;
TX_REVERTED = 1;
Expand Down Expand Up @@ -356,4 +370,4 @@ message GetForwarderForEOAReply {

message GetFiltersNamesReply {
repeated string items = 1;
}
}
38 changes: 38 additions & 0 deletions pkg/chains/evm/evm_grpc.pb.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

55 changes: 52 additions & 3 deletions pkg/loop/internal/relayer/evm.go
Original file line number Diff line number Diff line change
Expand Up @@ -55,9 +55,14 @@ func (e *EVMClient) SubmitTransaction(ctx context.Context, txRequest evmtypes.Su
return nil, net.WrapRPCErr(err)
}

h, err := evmpb.ConvertHashFromProto(reply.TxHash)
if err != nil {
return nil, net.WrapRPCErr(err)
}

return &evmtypes.TransactionResult{
TxStatus: evmpb.ConvertTxStatusFromProto(reply.TxStatus),
TxHash: evmtypes.Hash(reply.TxHash),
TxHash: h,
TxIdempotencyKey: reply.TxIdempotencyKey,
}, nil
}
Expand Down Expand Up @@ -279,6 +284,25 @@ func (e *EVMClient) GetForwarderForEOA(ctx context.Context, eoa, ocr2AggregatorI
return evmtypes.Address(reply.GetAddr()), nil
}

func (e *EVMClient) GetLatestLPBlock(ctx context.Context) (*evmtypes.LPBlock, error) {
reply, err := e.grpcClient.GetLatestLPBlock(ctx, &emptypb.Empty{})
if err != nil {
return nil, net.WrapRPCErr(err)
}
h, err := evmpb.ConvertHashFromProto(reply.GetLpBlock().GetHash())
if err != nil {
return nil, net.WrapRPCErr(err)
}

return &evmtypes.LPBlock{
BlockTimestamp: reply.GetLpBlock().GetBlockTimestamp(),
LatestBlockNumber: reply.GetLpBlock().GetLatestBlockNumber(),
FinalizedBlockNumber: reply.GetLpBlock().GetFinalizedBlockNumber(),
SafeBlockNumber: reply.GetLpBlock().GetSafeBlockNumber(),
BlockHash: h,
}, nil
}

type evmServer struct {
evmpb.UnimplementedEVMServer

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

func (e *evmServer) GetTransactionByHash(ctx context.Context, request *evmpb.GetTransactionByHashRequest) (*evmpb.GetTransactionByHashReply, error) {
h, err := evmpb.ConvertHashFromProto(request.GetHash())
if err != nil {
return nil, err
}
tx, err := e.impl.GetTransactionByHash(ctx, evmtypes.GetTransactionByHashRequest{
Hash: evmtypes.Hash(request.GetHash()),
Hash: h,
IsExternal: request.IsExternal,
})
if err != nil {
Expand All @@ -414,8 +442,12 @@ func (e *evmServer) GetTransactionByHash(ctx context.Context, request *evmpb.Get
}

func (e *evmServer) GetTransactionReceipt(ctx context.Context, request *evmpb.GetTransactionReceiptRequest) (*evmpb.GetTransactionReceiptReply, error) {
h, err := evmpb.ConvertHashFromProto(request.GetHash())
if err != nil {
return nil, err
}
receipt, err := e.impl.GetTransactionReceipt(ctx, evmtypes.GeTransactionReceiptRequest{
Hash: evmtypes.Hash(request.GetHash()),
Hash: h,
IsExternal: request.IsExternal,
})
if err != nil {
Expand Down Expand Up @@ -521,6 +553,23 @@ func (e *evmServer) SubmitTransaction(ctx context.Context, request *evmpb.Submit
}, nil
}

func (e *evmServer) GetLatestLPBlock(ctx context.Context, _ *emptypb.Empty) (*evmpb.GetLatestLPBlockReply, error) {
b, err := e.impl.GetLatestLPBlock(ctx)
if err != nil {
return nil, err
}

return &evmpb.GetLatestLPBlockReply{
LpBlock: &evmpb.LPBlock{
Hash: b.BlockHash[:],
LatestBlockNumber: b.LatestBlockNumber,
FinalizedBlockNumber: b.FinalizedBlockNumber,
SafeBlockNumber: b.SafeBlockNumber,
BlockTimestamp: b.BlockTimestamp,
},
}, nil
}

func (e *evmServer) CalculateTransactionFee(ctx context.Context, request *evmpb.CalculateTransactionFeeRequest) (*evmpb.CalculateTransactionFeeReply, error) {
txFee, err := e.impl.CalculateTransactionFee(ctx, evmtypes.ReceiptGasInfo{
GasUsed: request.GasInfo.GasUsed,
Expand Down
26 changes: 26 additions & 0 deletions pkg/loop/internal/relayerset/evm.go
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,10 @@ func (e evmClient) GetForwarderForEOA(ctx context.Context, in *evmpb.GetForwarde
return e.client.GetForwarderForEOA(appendRelayID(ctx, e.relayID), in, opts...)
}

func (e evmClient) GetLatestLPBlock(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*evmpb.GetLatestLPBlockReply, error) {
return e.client.GetLatestLPBlock(appendRelayID(ctx, e.relayID), in, opts...)
}

func (s *Server) GetTransactionFee(ctx context.Context, request *evmpb.GetTransactionFeeRequest) (*evmpb.GetTransactionFeeReply, error) {
evmService, err := s.getEVMService(ctx)
if err != nil {
Expand Down Expand Up @@ -456,6 +460,28 @@ func (s *Server) CalculateTransactionFee(ctx context.Context, request *evmpb.Cal
}, nil
}

func (s *Server) GetLatestLPBlock(ctx context.Context, in *emptypb.Empty) (*evmpb.GetLatestLPBlockReply, error) {
evmService, err := s.getEVMService(ctx)
if err != nil {
return nil, err
}

b, err := evmService.GetLatestLPBlock(ctx)
if err != nil {
return nil, err
}

return &evmpb.GetLatestLPBlockReply{
LpBlock: &evmpb.LPBlock{
Hash: b.BlockHash[:],
LatestBlockNumber: b.LatestBlockNumber,
FinalizedBlockNumber: b.FinalizedBlockNumber,
SafeBlockNumber: b.SafeBlockNumber,
BlockTimestamp: b.BlockTimestamp,
},
}, nil
}

func (s *Server) GetForwarderForEOA(ctx context.Context, request *evmpb.GetForwarderForEOARequest) (*evmpb.GetForwarderForEOAReply, error) {
evmService, err := s.getEVMService(ctx)
if err != nil {
Expand Down
10 changes: 10 additions & 0 deletions pkg/types/chains/evm/evm.go
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,16 @@ type LPFilterQuery struct {
LogsPerBlock uint64 // rate limit ( maximum # of logs per block, 0 = unlimited )
}

// matches LP Block
// ths block shows the Latest,Finalized,Safe blocks from LogPoller's perspective
type LPBlock struct {
BlockHash Hash
LatestBlockNumber int64
BlockTimestamp uint64
FinalizedBlockNumber int64
SafeBlockNumber int64
}

// matches simplifie evm-style callMsg for reads/EstimateGas
type CallMsg struct {
To Address
Expand Down
58 changes: 58 additions & 0 deletions pkg/types/mocks/evm_service.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions pkg/types/relayer.go
Original file line number Diff line number Diff line change
Expand Up @@ -190,6 +190,9 @@ type EVMService interface {
QueryTrackedLogs(ctx context.Context, filterQuery []query.Expression,
limitAndSort query.LimitAndSort, confidenceLevel primitives.ConfidenceLevel) ([]*evm.Log, error)

// GetLatestLPBlock retrieves current LatestBlock from cache perspective
GetLatestLPBlock(ctx context.Context) (*evm.LPBlock, error)

// GetFiltersNames returns all registered filters' names for later pruning
// TODO PLEX-1465: once code is moved away, remove this GetFiltersNames method
GetFiltersNames(ctx context.Context) ([]string, error)
Expand Down
Loading