Skip to content

Commit 3aae627

Browse files
marioevzlightclient
andcommitted
all: implement eip-7251 consolidation requests
Co-authored-by: Mario Vega <marioevz@gmail.com> Co-authored-by: lightclient <lightclient@protonmail.com>
1 parent dbdecb5 commit 3aae627

File tree

13 files changed

+453
-142
lines changed

13 files changed

+453
-142
lines changed

beacon/engine/gen_ed.go

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

beacon/engine/types.go

Lines changed: 32 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -60,26 +60,27 @@ type payloadAttributesMarshaling struct {
6060

6161
// ExecutableData is the data necessary to execute an EL payload.
6262
type ExecutableData struct {
63-
ParentHash common.Hash `json:"parentHash" gencodec:"required"`
64-
FeeRecipient common.Address `json:"feeRecipient" gencodec:"required"`
65-
StateRoot common.Hash `json:"stateRoot" gencodec:"required"`
66-
ReceiptsRoot common.Hash `json:"receiptsRoot" gencodec:"required"`
67-
LogsBloom []byte `json:"logsBloom" gencodec:"required"`
68-
Random common.Hash `json:"prevRandao" gencodec:"required"`
69-
Number uint64 `json:"blockNumber" gencodec:"required"`
70-
GasLimit uint64 `json:"gasLimit" gencodec:"required"`
71-
GasUsed uint64 `json:"gasUsed" gencodec:"required"`
72-
Timestamp uint64 `json:"timestamp" gencodec:"required"`
73-
ExtraData []byte `json:"extraData" gencodec:"required"`
74-
BaseFeePerGas *big.Int `json:"baseFeePerGas" gencodec:"required"`
75-
BlockHash common.Hash `json:"blockHash" gencodec:"required"`
76-
Transactions [][]byte `json:"transactions" gencodec:"required"`
77-
Withdrawals []*types.Withdrawal `json:"withdrawals"`
78-
BlobGasUsed *uint64 `json:"blobGasUsed"`
79-
ExcessBlobGas *uint64 `json:"excessBlobGas"`
80-
Deposits types.Deposits `json:"depositRequests"`
81-
WithdrawalRequests types.WithdrawalRequests `json:"withdrawalRequests"`
82-
ExecutionWitness *types.ExecutionWitness `json:"executionWitness,omitempty"`
63+
ParentHash common.Hash `json:"parentHash" gencodec:"required"`
64+
FeeRecipient common.Address `json:"feeRecipient" gencodec:"required"`
65+
StateRoot common.Hash `json:"stateRoot" gencodec:"required"`
66+
ReceiptsRoot common.Hash `json:"receiptsRoot" gencodec:"required"`
67+
LogsBloom []byte `json:"logsBloom" gencodec:"required"`
68+
Random common.Hash `json:"prevRandao" gencodec:"required"`
69+
Number uint64 `json:"blockNumber" gencodec:"required"`
70+
GasLimit uint64 `json:"gasLimit" gencodec:"required"`
71+
GasUsed uint64 `json:"gasUsed" gencodec:"required"`
72+
Timestamp uint64 `json:"timestamp" gencodec:"required"`
73+
ExtraData []byte `json:"extraData" gencodec:"required"`
74+
BaseFeePerGas *big.Int `json:"baseFeePerGas" gencodec:"required"`
75+
BlockHash common.Hash `json:"blockHash" gencodec:"required"`
76+
Transactions [][]byte `json:"transactions" gencodec:"required"`
77+
Withdrawals []*types.Withdrawal `json:"withdrawals"`
78+
BlobGasUsed *uint64 `json:"blobGasUsed"`
79+
ExcessBlobGas *uint64 `json:"excessBlobGas"`
80+
Deposits types.Deposits `json:"depositRequests"`
81+
WithdrawalRequests types.WithdrawalRequests `json:"withdrawalRequests"`
82+
ConsolidationRequests types.ConsolidationRequests `json:"consolidationRequests"`
83+
ExecutionWitness *types.ExecutionWitness `json:"executionWitness,omitempty"`
8384
}
8485

8586
// JSON type overrides for executableData.
@@ -252,6 +253,9 @@ func ExecutableDataToBlock(data ExecutableData, versionedHashes []common.Hash, b
252253
requests = append(requests, types.NewRequest(w))
253254
}
254255
}
256+
if data.ConsolidationRequests != nil {
257+
requests = append(requests, data.ConsolidationRequests.Requests()...)
258+
}
255259
if requests != nil {
256260
h := types.DeriveSha(requests, trie.NewStackTrie(nil))
257261
requestsHash = &h
@@ -335,23 +339,27 @@ func setRequests(requests types.Requests, data *ExecutableData) {
335339
// we should return an empty slice instead of nil.
336340
data.Deposits = make(types.Deposits, 0)
337341
data.WithdrawalRequests = make(types.WithdrawalRequests, 0)
342+
data.ConsolidationRequests = make(types.ConsolidationRequests, 0)
338343
}
339344
for _, r := range requests {
340345
switch v := r.Inner().(type) {
341346
case *types.Deposit:
342347
data.Deposits = append(data.Deposits, v)
343348
case *types.WithdrawalRequest:
344349
data.WithdrawalRequests = append(data.WithdrawalRequests, v)
350+
case *types.ConsolidationRequest:
351+
data.ConsolidationRequests = append(data.ConsolidationRequests, v)
345352
}
346353
}
347354
}
348355

349356
// ExecutionPayloadBody is used in the response to GetPayloadBodiesByHash and GetPayloadBodiesByRange
350357
type ExecutionPayloadBody struct {
351-
TransactionData []hexutil.Bytes `json:"transactions"`
352-
Withdrawals []*types.Withdrawal `json:"withdrawals"`
353-
Deposits types.Deposits `json:"depositRequests"`
354-
WithdrawalRequests types.WithdrawalRequests `json:"withdrawalRequests"`
358+
TransactionData []hexutil.Bytes `json:"transactions"`
359+
Withdrawals []*types.Withdrawal `json:"withdrawals"`
360+
Deposits types.Deposits `json:"depositRequests"`
361+
WithdrawalRequests types.WithdrawalRequests `json:"withdrawalRequests"`
362+
ConsolidationRequests types.ConsolidationRequests `json:"consolidationRequests"`
355363
}
356364

357365
// Client identifiers to support ClientVersionV1.

0 commit comments

Comments
 (0)