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
15 changes: 12 additions & 3 deletions cmd/lightclient/lightclient/execution.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,9 @@ import (
"github.com/ledgerwatch/erigon-lib/gointerfaces"
"github.com/ledgerwatch/erigon-lib/gointerfaces/remote"
"github.com/ledgerwatch/erigon-lib/gointerfaces/types"

"github.com/ledgerwatch/erigon/cl/cltypes"
"github.com/ledgerwatch/erigon/ethdb/privateapi"
)

func convertLightrpcExecutionPayloadToEthbacked(e *cltypes.Eth1Block) *types.ExecutionPayload {
Expand All @@ -25,7 +27,8 @@ func convertLightrpcExecutionPayloadToEthbacked(e *cltypes.Eth1Block) *types.Exe
}
}

return &types.ExecutionPayload{
res := &types.ExecutionPayload{
Version: 1,
ParentHash: gointerfaces.ConvertHashToH256(header.ParentHash),
Coinbase: gointerfaces.ConvertAddressToH160(header.Coinbase),
StateRoot: gointerfaces.ConvertHashToH256(header.Root),
Expand All @@ -41,6 +44,12 @@ func convertLightrpcExecutionPayloadToEthbacked(e *cltypes.Eth1Block) *types.Exe
BlockHash: gointerfaces.ConvertHashToH256(header.BlockHashCL),
Transactions: body.Transactions,
}
if body.Withdrawals != nil {
res.Version = 2
res.Withdrawals = privateapi.ConvertWithdrawalsToRpc(body.Withdrawals)
}

return res
}

func (l *LightClient) processBeaconBlock(beaconBlock *cltypes.BeaconBlock) error {
Expand All @@ -62,14 +71,14 @@ func (l *LightClient) processBeaconBlock(beaconBlock *cltypes.BeaconBlock) error

payload := convertLightrpcExecutionPayloadToEthbacked(beaconBlock.Body.ExecutionPayload)

_, err = l.execution.EngineNewPayloadV1(l.ctx, payload)
_, err = l.execution.EngineNewPayload(l.ctx, payload)
if err != nil {
return err
}

// Wait a bit
time.Sleep(500 * time.Millisecond)
_, err = l.execution.EngineForkChoiceUpdatedV1(l.ctx, &remote.EngineForkChoiceUpdatedRequest{
_, err = l.execution.EngineForkChoiceUpdated(l.ctx, &remote.EngineForkChoiceUpdatedRequest{
ForkchoiceState: &remote.EngineForkChoiceState{
HeadBlockHash: payloadHash,
SafeBlockHash: payloadHash,
Expand Down
294 changes: 75 additions & 219 deletions cmd/rpcdaemon/commands/engine_api.go

Large diffs are not rendered by default.

26 changes: 6 additions & 20 deletions cmd/rpcdaemon/rpcservices/eth_backend.go
Original file line number Diff line number Diff line change
Expand Up @@ -198,30 +198,16 @@ func (back *RemoteBackend) TxnByIdxInBlock(ctx context.Context, tx kv.Getter, bl
return back.blockReader.TxnByIdxInBlock(ctx, tx, blockNum, i)
}

func (back *RemoteBackend) EngineNewPayloadV1(ctx context.Context, payload *types2.ExecutionPayload) (res *remote.EnginePayloadStatus, err error) {
return back.remoteEthBackend.EngineNewPayloadV1(ctx, payload)
func (back *RemoteBackend) EngineNewPayload(ctx context.Context, payload *types2.ExecutionPayload) (res *remote.EnginePayloadStatus, err error) {
return back.remoteEthBackend.EngineNewPayload(ctx, payload)
}

func (back *RemoteBackend) EngineNewPayloadV2(ctx context.Context, payload *types2.ExecutionPayloadV2) (res *remote.EnginePayloadStatus, err error) {
return back.remoteEthBackend.EngineNewPayloadV2(ctx, payload)
func (back *RemoteBackend) EngineForkchoiceUpdated(ctx context.Context, request *remote.EngineForkChoiceUpdatedRequest) (*remote.EngineForkChoiceUpdatedResponse, error) {
return back.remoteEthBackend.EngineForkChoiceUpdated(ctx, request)
}

func (back *RemoteBackend) EngineForkchoiceUpdatedV1(ctx context.Context, request *remote.EngineForkChoiceUpdatedRequest) (*remote.EngineForkChoiceUpdatedReply, error) {
return back.remoteEthBackend.EngineForkChoiceUpdatedV1(ctx, request)
}

func (back *RemoteBackend) EngineForkchoiceUpdatedV2(ctx context.Context, request *remote.EngineForkChoiceUpdatedRequestV2) (*remote.EngineForkChoiceUpdatedReply, error) {
return back.remoteEthBackend.EngineForkChoiceUpdatedV2(ctx, request)
}

func (back *RemoteBackend) EngineGetPayloadV1(ctx context.Context, payloadId uint64) (res *types2.ExecutionPayload, err error) {
return back.remoteEthBackend.EngineGetPayloadV1(ctx, &remote.EngineGetPayloadRequest{
PayloadId: payloadId,
})
}

func (back *RemoteBackend) EngineGetPayloadV2(ctx context.Context, payloadId uint64) (res *types2.ExecutionPayloadV2, err error) {
return back.remoteEthBackend.EngineGetPayloadV2(ctx, &remote.EngineGetPayloadRequest{
func (back *RemoteBackend) EngineGetPayload(ctx context.Context, payloadId uint64) (res *remote.EngineGetPayloadResponse, err error) {
return back.remoteEthBackend.EngineGetPayload(ctx, &remote.EngineGetPayloadRequest{
PayloadId: payloadId,
})
}
Expand Down
12 changes: 6 additions & 6 deletions ethdb/privateapi/engine_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ func TestMockDownloadRequest(t *testing.T) {
done := make(chan bool)

go func() {
reply, err = backend.EngineNewPayloadV1(ctx, mockPayload1)
reply, err = backend.EngineNewPayload(ctx, mockPayload1)
done <- true
}()

Expand All @@ -116,7 +116,7 @@ func TestMockDownloadRequest(t *testing.T) {

// If we get another request we don't need to process it with processDownloadCh and ignore it and return Syncing status
go func() {
reply, err = backend.EngineNewPayloadV1(ctx, mockPayload2)
reply, err = backend.EngineNewPayload(ctx, mockPayload2)
done <- true
}()

Expand All @@ -133,7 +133,7 @@ func TestMockDownloadRequest(t *testing.T) {
_ = tx.Commit()
// Now we try to sync the next payload again
go func() {
reply, err = backend.EngineNewPayloadV1(ctx, mockPayload2)
reply, err = backend.EngineNewPayload(ctx, mockPayload2)
done <- true
}()

Expand Down Expand Up @@ -162,7 +162,7 @@ func TestMockValidExecution(t *testing.T) {
done := make(chan bool)

go func() {
reply, err = backend.EngineNewPayloadV1(ctx, mockPayload3)
reply, err = backend.EngineNewPayload(ctx, mockPayload3)
done <- true
}()

Expand Down Expand Up @@ -198,7 +198,7 @@ func TestMockInvalidExecution(t *testing.T) {
done := make(chan bool)

go func() {
reply, err = backend.EngineNewPayloadV1(ctx, mockPayload3)
reply, err = backend.EngineNewPayload(ctx, mockPayload3)
done <- true
}()

Expand Down Expand Up @@ -233,7 +233,7 @@ func TestNoTTD(t *testing.T) {
done := make(chan bool)

go func() {
_, err = backend.EngineNewPayloadV1(ctx, &types2.ExecutionPayload{
_, err = backend.EngineNewPayload(ctx, &types2.ExecutionPayload{
ParentHash: gointerfaces.ConvertHashToH256(libcommon.HexToHash("0x2")),
BlockHash: gointerfaces.ConvertHashToH256(libcommon.HexToHash("0xe6a580606b065e08034dcd6eea026cfdcbd3b41918d98b41cb9bf797d0c27033")),
ReceiptRoot: gointerfaces.ConvertHashToH256(libcommon.HexToHash("0x4")),
Expand Down
124 changes: 60 additions & 64 deletions ethdb/privateapi/ethbackend.go
Original file line number Diff line number Diff line change
Expand Up @@ -282,16 +282,8 @@ func (s *EthBackendServer) stageLoopIsBusy() bool {
return !s.hd.BeaconRequestList.IsWaiting()
}

func (s *EthBackendServer) EngineNewPayloadV1(ctx context.Context, req *types2.ExecutionPayload) (*remote.EnginePayloadStatus, error) {
return s.engineNewPayload(req, nil)
}

func (s *EthBackendServer) EngineNewPayloadV2(ctx context.Context, req *types2.ExecutionPayloadV2) (*remote.EnginePayloadStatus, error) {
return s.engineNewPayload(req.Payload, ConvertWithdrawalsFromRpc(req.Withdrawals))
}

// engineNewPayload validates and possibly executes payload
func (s *EthBackendServer) engineNewPayload(req *types2.ExecutionPayload, withdrawals []*types.Withdrawal) (*remote.EnginePayloadStatus, error) {
// EngineNewPayload validates and possibly executes payload
func (s *EthBackendServer) EngineNewPayload(ctx context.Context, req *types2.ExecutionPayload) (*remote.EnginePayloadStatus, error) {
header := types.Header{
ParentHash: gointerfaces.ConvertH256ToHash(req.ParentHash),
Coinbase: gointerfaces.ConvertH160toAddress(req.Coinbase),
Expand All @@ -310,6 +302,11 @@ func (s *EthBackendServer) engineNewPayload(req *types2.ExecutionPayload, withdr
ReceiptHash: gointerfaces.ConvertH256ToHash(req.ReceiptRoot),
TxHash: types.DeriveSha(types.BinaryTransactions(req.Transactions)),
}
var withdrawals []*types.Withdrawal
if req.Version >= 2 {
withdrawals = ConvertWithdrawalsFromRpc(req.Withdrawals)
}

if withdrawals != nil {
wh := types.DeriveSha(types.Withdrawals(withdrawals))
header.WithdrawalsHash = &wh
Expand Down Expand Up @@ -503,28 +500,26 @@ func (s *EthBackendServer) getQuickPayloadStatusIfPossible(blockHash libcommon.H
return nil, nil
}

func (s *EthBackendServer) EngineGetPayloadV1(ctx context.Context, req *remote.EngineGetPayloadRequest) (*types2.ExecutionPayload, error) {
_, payload, err := s.engineGetPayload(req)
return payload, err
}

func (s *EthBackendServer) EngineGetPayloadV2(ctx context.Context, req *remote.EngineGetPayloadRequest) (*types2.ExecutionPayloadV2, error) {
block, payload, err := s.engineGetPayload(req)
if err != nil {
return nil, err
// The expected value to be received by the feeRecipient in wei
func blockValue(block *types.Block, baseFee *uint256.Int) *uint256.Int {
blockValue := uint256.NewInt(0)
for _, tx := range block.Transactions() {
gas := new(uint256.Int).SetUint64(tx.GetGas())
effectiveTip := tx.GetEffectiveGasTip(baseFee)
txValue := new(uint256.Int).Mul(gas, effectiveTip)
blockValue.Add(blockValue, txValue)
}
withdrawals := ConvertWithdrawalsToRpc(block.Withdrawals())
return &types2.ExecutionPayloadV2{Payload: payload, Withdrawals: withdrawals}, nil
return blockValue
}

// engineGetPayload retrieves previously assembled payload (Validators only)
func (s *EthBackendServer) engineGetPayload(req *remote.EngineGetPayloadRequest) (*types.Block, *types2.ExecutionPayload, error) {
// EngineGetPayload retrieves previously assembled payload (Validators only)
func (s *EthBackendServer) EngineGetPayload(ctx context.Context, req *remote.EngineGetPayloadRequest) (*remote.EngineGetPayloadResponse, error) {
if !s.proposing {
return nil, nil, fmt.Errorf("execution layer not running as a proposer. enable proposer by taking out the --proposer.disable flag on startup")
return nil, fmt.Errorf("execution layer not running as a proposer. enable proposer by taking out the --proposer.disable flag on startup")
}

if s.config.TerminalTotalDifficulty == nil {
return nil, nil, fmt.Errorf("not a proof-of-stake chain")
return nil, fmt.Errorf("not a proof-of-stake chain")
}

log.Debug("[GetPayload] acquiring lock")
Expand All @@ -535,28 +530,25 @@ func (s *EthBackendServer) engineGetPayload(req *remote.EngineGetPayloadRequest)
builder, ok := s.builders[req.PayloadId]
if !ok {
log.Warn("Payload not stored", "payloadId", req.PayloadId)
return nil, nil, &UnknownPayloadErr
return nil, &UnknownPayloadErr
}

block, err := builder.Stop()
if err != nil {
log.Error("Failed to build PoS block", "err", err)
return nil, nil, err
return nil, err
}

var baseFeeReply *types2.H256
if block.Header().BaseFee != nil {
var baseFee uint256.Int
baseFee.SetFromBig(block.Header().BaseFee)
baseFeeReply = gointerfaces.ConvertUint256IntToH256(&baseFee)
}
baseFee := new(uint256.Int)
baseFee.SetFromBig(block.Header().BaseFee)

encodedTransactions, err := types.MarshalTransactionsBinary(block.Transactions())
if err != nil {
return nil, nil, err
return nil, err
}

return block, &types2.ExecutionPayload{
payload := &types2.ExecutionPayload{
Version: 1,
ParentHash: gointerfaces.ConvertHashToH256(block.Header().ParentHash),
Coinbase: gointerfaces.ConvertAddressToH160(block.Header().Coinbase),
Timestamp: block.Header().Time,
Expand All @@ -568,28 +560,29 @@ func (s *EthBackendServer) engineGetPayload(req *remote.EngineGetPayloadRequest)
GasUsed: block.GasUsed(),
BlockNumber: block.NumberU64(),
ExtraData: block.Extra(),
BaseFeePerGas: baseFeeReply,
BaseFeePerGas: gointerfaces.ConvertUint256IntToH256(baseFee),
BlockHash: gointerfaces.ConvertHashToH256(block.Header().Hash()),
Transactions: encodedTransactions,
}, nil
}

func (s *EthBackendServer) EngineForkChoiceUpdatedV1(ctx context.Context, req *remote.EngineForkChoiceUpdatedRequest) (*remote.EngineForkChoiceUpdatedReply, error) {
return s.engineForkChoiceUpdated(ctx, req.ForkchoiceState, req.PayloadAttributes, nil)
}
}
if block.Withdrawals() != nil {
payload.Version = 2
payload.Withdrawals = ConvertWithdrawalsToRpc(block.Withdrawals())
}

func (s *EthBackendServer) EngineForkChoiceUpdatedV2(ctx context.Context, req *remote.EngineForkChoiceUpdatedRequestV2) (*remote.EngineForkChoiceUpdatedReply, error) {
return s.engineForkChoiceUpdated(ctx, req.ForkchoiceState, req.PayloadAttributes.GetAttributes(), req.PayloadAttributes.GetWithdrawals())
blockValue := blockValue(block, baseFee)
return &remote.EngineGetPayloadResponse{
ExecutionPayload: payload,
BlockValue: gointerfaces.ConvertUint256IntToH256(blockValue),
}, nil
}

// engineForkChoiceUpdated either states new block head or request the assembling of a new block
func (s *EthBackendServer) engineForkChoiceUpdated(ctx context.Context, reqForkchoice *remote.EngineForkChoiceState,
payloadAttributes *remote.EnginePayloadAttributes, reqWithdrawals []*types2.Withdrawal,
) (*remote.EngineForkChoiceUpdatedReply, error) {
func (s *EthBackendServer) EngineForkChoiceUpdated(ctx context.Context, req *remote.EngineForkChoiceUpdatedRequest,
) (*remote.EngineForkChoiceUpdatedResponse, error) {
forkChoice := engineapi.ForkChoiceMessage{
HeadBlockHash: gointerfaces.ConvertH256ToHash(reqForkchoice.HeadBlockHash),
SafeBlockHash: gointerfaces.ConvertH256ToHash(reqForkchoice.SafeBlockHash),
FinalizedBlockHash: gointerfaces.ConvertH256ToHash(reqForkchoice.FinalizedBlockHash),
HeadBlockHash: gointerfaces.ConvertH256ToHash(req.ForkchoiceState.HeadBlockHash),
SafeBlockHash: gointerfaces.ConvertH256ToHash(req.ForkchoiceState.SafeBlockHash),
FinalizedBlockHash: gointerfaces.ConvertH256ToHash(req.ForkchoiceState.FinalizedBlockHash),
}

status, err := s.getQuickPayloadStatusIfPossible(forkChoice.HeadBlockHash, 0, libcommon.Hash{}, &forkChoice, false)
Expand All @@ -614,8 +607,9 @@ func (s *EthBackendServer) engineForkChoiceUpdated(ctx context.Context, reqForkc
}

// No need for payload building
payloadAttributes := req.PayloadAttributes
if payloadAttributes == nil || status.Status != remote.EngineStatus_VALID {
return &remote.EngineForkChoiceUpdatedReply{PayloadStatus: convertPayloadStatus(status)}, nil
return &remote.EngineForkChoiceUpdatedResponse{PayloadStatus: convertPayloadStatus(status)}, nil
}

if !s.proposing {
Expand All @@ -642,15 +636,26 @@ func (s *EthBackendServer) engineForkChoiceUpdated(ctx context.Context, reqForkc

log.Warn("Skipping payload building because forkchoiceState.headBlockHash is not the head of the canonical chain",
"forkChoice.HeadBlockHash", forkChoice.HeadBlockHash, "headHeader.Hash", headHeader.Hash())
return &remote.EngineForkChoiceUpdatedReply{PayloadStatus: convertPayloadStatus(status)}, nil
return &remote.EngineForkChoiceUpdatedResponse{PayloadStatus: convertPayloadStatus(status)}, nil
}

if headHeader.Time >= payloadAttributes.Timestamp {
return nil, &InvalidPayloadAttributesErr
}

// If pre-Shanghai and there are withdrawals, we should error
if !s.config.IsShanghai(headHeader.Time) && reqWithdrawals != nil {
param := core.BlockBuilderParameters{
ParentHash: forkChoice.HeadBlockHash,
Timestamp: payloadAttributes.Timestamp,
PrevRandao: gointerfaces.ConvertH256ToHash(payloadAttributes.PrevRandao),
SuggestedFeeRecipient: gointerfaces.ConvertH160toAddress(payloadAttributes.SuggestedFeeRecipient),
PayloadId: s.payloadId,
}
if payloadAttributes.Version >= 2 {
param.Withdrawals = ConvertWithdrawalsFromRpc(payloadAttributes.Withdrawals)
}

if (!s.config.IsShanghai(payloadAttributes.Timestamp) && param.Withdrawals != nil) ||
(s.config.IsShanghai(payloadAttributes.Timestamp) && param.Withdrawals == nil) {
return nil, &InvalidParamsErr
}

Expand All @@ -661,19 +666,10 @@ func (s *EthBackendServer) engineForkChoiceUpdated(ctx context.Context, reqForkc
// payload IDs start from 1 (0 signifies null)
s.payloadId++

param := core.BlockBuilderParameters{
ParentHash: forkChoice.HeadBlockHash,
Timestamp: payloadAttributes.Timestamp,
PrevRandao: gointerfaces.ConvertH256ToHash(payloadAttributes.PrevRandao),
SuggestedFeeRecipient: gointerfaces.ConvertH160toAddress(payloadAttributes.SuggestedFeeRecipient),
Withdrawals: ConvertWithdrawalsFromRpc(reqWithdrawals),
PayloadId: s.payloadId,
}

s.builders[s.payloadId] = builder.NewBlockBuilder(s.builderFunc, &param)
log.Debug("BlockBuilder added", "payload", s.payloadId)

return &remote.EngineForkChoiceUpdatedReply{
return &remote.EngineForkChoiceUpdatedResponse{
PayloadStatus: &remote.EnginePayloadStatus{
Status: remote.EngineStatus_VALID,
LatestValidHash: gointerfaces.ConvertHashToH256(headHash),
Expand Down
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ module github.com/ledgerwatch/erigon
go 1.18

require (
github.com/ledgerwatch/erigon-lib v0.0.0-20230120091748-2ea0cb82e919
github.com/ledgerwatch/erigon-lib v0.0.0-20230120150133-840f3ae632dc
github.com/ledgerwatch/erigon-snapshot v1.1.1-0.20230120022649-cd9409a200da
github.com/ledgerwatch/log/v3 v3.7.0
github.com/ledgerwatch/secp256k1 v1.0.0
Expand Down
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -565,8 +565,8 @@ github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/kylelemons/godebug v0.0.0-20170224010052-a616ab194758 h1:0D5M2HQSGD3PYPwICLl+/9oulQauOuETfgFvhBDffs0=
github.com/leanovate/gopter v0.2.9 h1:fQjYxZaynp97ozCzfOyOuAGOU4aU/z37zf/tOujFk7c=
github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8=
github.com/ledgerwatch/erigon-lib v0.0.0-20230120091748-2ea0cb82e919 h1:w9D+tV8V29cOk6v9iKNREb06cUtkqHB893wkoDw/GJo=
github.com/ledgerwatch/erigon-lib v0.0.0-20230120091748-2ea0cb82e919/go.mod h1:GAsj4lIZdXUGf0oSy6jSoG6nFZ+B0FK1KlcfR6JUuDY=
github.com/ledgerwatch/erigon-lib v0.0.0-20230120150133-840f3ae632dc h1:/omu+iTyFTEt36w8PIOOkqz7EN/820EVUHjAZHtii74=
github.com/ledgerwatch/erigon-lib v0.0.0-20230120150133-840f3ae632dc/go.mod h1:hItoXGcvka8hN2gi8JO7YPAQ+jIyFzrXqCPuzo6k140=
github.com/ledgerwatch/erigon-snapshot v1.1.1-0.20230120022649-cd9409a200da h1:lQQBOHzAUThkymfXJj/m07vAjyMx9XoMMy3OomaeOrA=
github.com/ledgerwatch/erigon-snapshot v1.1.1-0.20230120022649-cd9409a200da/go.mod h1:3AuPxZc85jkehh/HA9h8gabv5MSi3kb/ddtzBsTVJFo=
github.com/ledgerwatch/log/v3 v3.7.0 h1:aFPEZdwZx4jzA3+/Pf8wNDN5tCI0cIolq/kfvgcM+og=
Expand Down
9 changes: 3 additions & 6 deletions turbo/rpchelper/interface.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,9 @@ type ApiBackend interface {
Subscribe(ctx context.Context, cb func(*remote.SubscribeReply)) error
SubscribeLogs(ctx context.Context, cb func(*remote.SubscribeLogsReply), requestor *atomic.Value) error
BlockWithSenders(ctx context.Context, tx kv.Getter, hash libcommon.Hash, blockHeight uint64) (block *types.Block, senders []libcommon.Address, err error)
EngineNewPayloadV1(ctx context.Context, payload *types2.ExecutionPayload) (*remote.EnginePayloadStatus, error)
EngineNewPayloadV2(ctx context.Context, payload *types2.ExecutionPayloadV2) (*remote.EnginePayloadStatus, error)
EngineForkchoiceUpdatedV1(ctx context.Context, request *remote.EngineForkChoiceUpdatedRequest) (*remote.EngineForkChoiceUpdatedReply, error)
EngineForkchoiceUpdatedV2(ctx context.Context, request *remote.EngineForkChoiceUpdatedRequestV2) (*remote.EngineForkChoiceUpdatedReply, error)
EngineGetPayloadV1(ctx context.Context, payloadId uint64) (*types2.ExecutionPayload, error)
EngineGetPayloadV2(ctx context.Context, payloadId uint64) (*types2.ExecutionPayloadV2, error)
EngineNewPayload(ctx context.Context, payload *types2.ExecutionPayload) (*remote.EnginePayloadStatus, error)
EngineForkchoiceUpdated(ctx context.Context, request *remote.EngineForkChoiceUpdatedRequest) (*remote.EngineForkChoiceUpdatedResponse, error)
EngineGetPayload(ctx context.Context, payloadId uint64) (*remote.EngineGetPayloadResponse, error)
NodeInfo(ctx context.Context, limit uint32) ([]p2p.NodeInfo, error)
Peers(ctx context.Context) ([]*p2p.PeerInfo, error)
PendingBlock(ctx context.Context) (*types.Block, error)
Expand Down