Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WIP mega eof #29518

Draft
wants to merge 69 commits into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from 57 commits
Commits
Show all changes
69 commits
Select commit Hold shift + click to select a range
cc3e859
all: implement eip-7002 EL triggered withdrawal requests
lightclient Sep 4, 2024
9d87ac7
all: implement eip-7251 consolidation requests
marioevz Jun 21, 2024
9db178c
all: impl eip-7702
lightclient Jun 26, 2024
75a43ae
add delegation designator to witness
lightclient Sep 7, 2024
183e7b7
core: force add new delegation to accesslist
lightclient Sep 7, 2024
9354ef0
core/vm: add eof container
lightclient Dec 6, 2022
1dccd90
core/vm: add optional containerSections
MariusVanDerWijden Apr 12, 2024
07db5b8
core/types: implement mega-eof spec
MariusVanDerWijden Apr 12, 2024
d1317f2
core/vm: fixed bugs, made basic blockchain tests pass
MariusVanDerWijden Jun 24, 2024
b5af91a
core/vm: fix opExchange
MariusVanDerWijden Jun 25, 2024
19e2965
core/vm: fix opSwapN
MariusVanDerWijden Jun 25, 2024
fa6b1b9
core/vm: fix opRJumpV
MariusVanDerWijden Jun 25, 2024
a1b359f
core/vm: fix opReturnDataLoad
MariusVanDerWijden Jun 25, 2024
aa8e431
core/vm: fix opExtStaticCall
MariusVanDerWijden Jun 26, 2024
e1b9f4a
core/vm: only allow eof calls from opExtCall
MariusVanDerWijden Jun 26, 2024
3d8ca3c
core/vm: check for returnStack overflow in opCallf
MariusVanDerWijden Jun 26, 2024
b2ae978
core/vm: check for returnStack overflow in opCallf
MariusVanDerWijden Jun 26, 2024
6c97819
core/vm: fix opExtCode{Size,Hash,Copy}
MariusVanDerWijden Jun 26, 2024
dff0809
core/vm: added comments
MariusVanDerWijden Jun 26, 2024
dc4d53b
core/vm: turn return values around
MariusVanDerWijden Jun 28, 2024
e0c3db0
core/vm: mark the correct address as touched
MariusVanDerWijden Jun 28, 2024
03b7514
core/vm: fix opExt{*}Call return values
MariusVanDerWijden Jun 28, 2024
218c887
core/vm: fix opExt{*}Call address space extension
MariusVanDerWijden Jun 28, 2024
80da4fd
core/vm: fix opDataCopy
MariusVanDerWijden Jun 28, 2024
fbec4dc
core/vm: fix opEOFCreate hashing charge
MariusVanDerWijden Jun 28, 2024
abe9f28
core/vm: fix opReturnContract, don't pay for mem copy
MariusVanDerWijden Jul 1, 2024
e9ad878
core/vm: fix opEOFCreate, correct initcode stuff
MariusVanDerWijden Jul 2, 2024
f6d4997
core/vm: fix opEOFCreate, forward calldata
MariusVanDerWijden Jul 2, 2024
3f03877
core/vm: fix opCreate, reject eof contracts
MariusVanDerWijden Jul 2, 2024
1a98554
core/vm: fix create, reject EOF deployment from legacy contracts
MariusVanDerWijden Jul 2, 2024
e61f11a
Fix EXTCALL Order
shemnon Jul 16, 2024
a484bfa
core/vm: updated to v1.0.6, fix bugs
MariusVanDerWijden Jul 18, 2024
71528b3
Remove TXCREATE
shemnon Aug 2, 2024
28db438
CALLF Stack validation height
shemnon Aug 2, 2024
9edd35c
Apply new container mode validations
shemnon Aug 2, 2024
24c56f2
Fix std.out issues with eofparse
shemnon Aug 2, 2024
a17f843
core: fix rebasing issues
MariusVanDerWijden Aug 29, 2024
ec62e60
cmd/eofdump: clear up error handling
MariusVanDerWijden Aug 30, 2024
2537d43
core: fix rebasing issues
MariusVanDerWijden Aug 30, 2024
a795369
core/vm: fix fuzzing found error, where RJUMP overwrites stack bounds
MariusVanDerWijden Aug 30, 2024
f314ec0
core/vm: fix RJUMPV jump analysis overflow
MariusVanDerWijden Aug 30, 2024
ee8d477
core/vm: fix backward jump validation
MariusVanDerWijden Aug 30, 2024
5475bc9
cmd/eofdump: correctly read container type
MariusVanDerWijden Aug 30, 2024
e4af62e
core/vm: correctly validate container types
MariusVanDerWijden Aug 30, 2024
34d2744
core/vm: typo
MariusVanDerWijden Sep 2, 2024
5d8df7b
core/vm: add comments
MariusVanDerWijden Sep 2, 2024
6549a87
core/vm: rebase
MariusVanDerWijden Sep 4, 2024
ddb9907
core/vm: apply suggestions, make ReturnStack an object
MariusVanDerWijden Sep 4, 2024
cdae48c
cmd/eofdump: regular- and fuzz-testing of eof parsing
holiman Sep 6, 2024
5a1acc4
core/vm: no more recursive errors
MariusVanDerWijden Sep 6, 2024
61d8f53
cmd/eofdump: regenerate testdata
holiman Sep 6, 2024
71ffe6e
cmd/eofdump: simplify tests
holiman Sep 6, 2024
658e4e5
Fix EOF Validation issues
shemnon Sep 5, 2024
cd7f772
core/vm: move fix for JUMPF
MariusVanDerWijden Sep 6, 2024
6a6d049
core: fix rebase
MariusVanDerWijden Sep 8, 2024
190d8b4
cmd/eofdump: update tests
holiman Sep 8, 2024
cb57738
cmd/eofdump: more test vectors from fuzzing
holiman Sep 8, 2024
8d68a86
remove println on bad opcode
shemnon Sep 11, 2024
4a4d3b0
EXTCALL test fixes
shemnon Sep 13, 2024
389edbd
EOFCREATE validation
shemnon Sep 14, 2024
4a93fe9
Create Transaction
shemnon Sep 14, 2024
810397f
formatting
shemnon Sep 14, 2024
c7efbf4
create transaction
shemnon Sep 14, 2024
12bcb49
cleanup from review comments
shemnon Sep 16, 2024
4392a1c
Fix dangling data in container for initcode
shemnon Sep 17, 2024
995310c
Update core/state_transition.go
shemnon Sep 17, 2024
740ad8c
don't do beacon chain updates in state tests
shemnon Sep 17, 2024
2413e46
Merge pull request #56 from shemnon/eof/extcall-fixes
MariusVanDerWijden Sep 25, 2024
aee85e3
cmd/eofdump: new testvectors from execution-spec-tests [email protected]
holiman Sep 26, 2024
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
88 changes: 50 additions & 38 deletions beacon/engine/gen_ed.go

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

78 changes: 51 additions & 27 deletions beacon/engine/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -60,25 +60,27 @@ type payloadAttributesMarshaling struct {

// ExecutableData is the data necessary to execute an EL payload.
type ExecutableData struct {
ParentHash common.Hash `json:"parentHash" gencodec:"required"`
FeeRecipient common.Address `json:"feeRecipient" gencodec:"required"`
StateRoot common.Hash `json:"stateRoot" gencodec:"required"`
ReceiptsRoot common.Hash `json:"receiptsRoot" gencodec:"required"`
LogsBloom []byte `json:"logsBloom" gencodec:"required"`
Random common.Hash `json:"prevRandao" gencodec:"required"`
Number uint64 `json:"blockNumber" gencodec:"required"`
GasLimit uint64 `json:"gasLimit" gencodec:"required"`
GasUsed uint64 `json:"gasUsed" gencodec:"required"`
Timestamp uint64 `json:"timestamp" gencodec:"required"`
ExtraData []byte `json:"extraData" gencodec:"required"`
BaseFeePerGas *big.Int `json:"baseFeePerGas" gencodec:"required"`
BlockHash common.Hash `json:"blockHash" gencodec:"required"`
Transactions [][]byte `json:"transactions" gencodec:"required"`
Withdrawals []*types.Withdrawal `json:"withdrawals"`
BlobGasUsed *uint64 `json:"blobGasUsed"`
ExcessBlobGas *uint64 `json:"excessBlobGas"`
Deposits types.Deposits `json:"depositRequests"`
ExecutionWitness *types.ExecutionWitness `json:"executionWitness,omitempty"`
ParentHash common.Hash `json:"parentHash" gencodec:"required"`
FeeRecipient common.Address `json:"feeRecipient" gencodec:"required"`
StateRoot common.Hash `json:"stateRoot" gencodec:"required"`
ReceiptsRoot common.Hash `json:"receiptsRoot" gencodec:"required"`
LogsBloom []byte `json:"logsBloom" gencodec:"required"`
Random common.Hash `json:"prevRandao" gencodec:"required"`
Number uint64 `json:"blockNumber" gencodec:"required"`
GasLimit uint64 `json:"gasLimit" gencodec:"required"`
GasUsed uint64 `json:"gasUsed" gencodec:"required"`
Timestamp uint64 `json:"timestamp" gencodec:"required"`
ExtraData []byte `json:"extraData" gencodec:"required"`
BaseFeePerGas *big.Int `json:"baseFeePerGas" gencodec:"required"`
BlockHash common.Hash `json:"blockHash" gencodec:"required"`
Transactions [][]byte `json:"transactions" gencodec:"required"`
Withdrawals []*types.Withdrawal `json:"withdrawals"`
BlobGasUsed *uint64 `json:"blobGasUsed"`
ExcessBlobGas *uint64 `json:"excessBlobGas"`
Deposits types.Deposits `json:"depositRequests"`
WithdrawalRequests types.WithdrawalRequests `json:"withdrawalRequests"`
ConsolidationRequests types.ConsolidationRequests `json:"consolidationRequests"`
ExecutionWitness *types.ExecutionWitness `json:"executionWitness,omitempty"`
}

// JSON type overrides for executableData.
Expand Down Expand Up @@ -233,7 +235,9 @@ func ExecutableDataToBlock(data ExecutableData, versionedHashes []common.Hash, b
h := types.DeriveSha(types.Withdrawals(data.Withdrawals), trie.NewStackTrie(nil))
withdrawalsRoot = &h
}
// Compute requestsHash if any requests are non-nil.
// Only set requestsHash if there exists requests in the ExecutableData. This
// allows CLs to continue using the data structure before requests are
// enabled.
var (
requestsHash *common.Hash
requests types.Requests
Expand All @@ -243,9 +247,20 @@ func ExecutableDataToBlock(data ExecutableData, versionedHashes []common.Hash, b
for _, d := range data.Deposits {
requests = append(requests, types.NewRequest(d))
}
}
if data.WithdrawalRequests != nil {
for _, w := range data.WithdrawalRequests {
requests = append(requests, types.NewRequest(w))
}
}
if data.ConsolidationRequests != nil {
requests = append(requests, data.ConsolidationRequests.Requests()...)
}
if requests != nil {
h := types.DeriveSha(requests, trie.NewStackTrie(nil))
requestsHash = &h
}

header := &types.Header{
ParentHash: data.ParentHash,
UncleHash: types.EmptyUncleHash,
Expand Down Expand Up @@ -320,22 +335,31 @@ func BlockToExecutableData(block *types.Block, fees *big.Int, sidecars []*types.
// assigns them to the associated fields in ExecutableData.
func setRequests(requests types.Requests, data *ExecutableData) {
if requests != nil {
// If requests is non-nil, it means deposits are available in block and we
// should return an empty slice instead of nil if there are no deposits.
// If requests is non-nil, it means the requests are available in block and
// we should return an empty slice instead of nil.
data.Deposits = make(types.Deposits, 0)
data.WithdrawalRequests = make(types.WithdrawalRequests, 0)
data.ConsolidationRequests = make(types.ConsolidationRequests, 0)
}
for _, r := range requests {
if d, ok := r.Inner().(*types.Deposit); ok {
data.Deposits = append(data.Deposits, d)
switch v := r.Inner().(type) {
case *types.Deposit:
data.Deposits = append(data.Deposits, v)
case *types.WithdrawalRequest:
data.WithdrawalRequests = append(data.WithdrawalRequests, v)
case *types.ConsolidationRequest:
data.ConsolidationRequests = append(data.ConsolidationRequests, v)
}
}
}

// ExecutionPayloadBody is used in the response to GetPayloadBodiesByHash and GetPayloadBodiesByRange
type ExecutionPayloadBody struct {
TransactionData []hexutil.Bytes `json:"transactions"`
Withdrawals []*types.Withdrawal `json:"withdrawals"`
Deposits types.Deposits `json:"depositRequests"`
TransactionData []hexutil.Bytes `json:"transactions"`
Withdrawals []*types.Withdrawal `json:"withdrawals"`
Deposits types.Deposits `json:"depositRequests"`
WithdrawalRequests types.WithdrawalRequests `json:"withdrawalRequests"`
ConsolidationRequests types.ConsolidationRequests `json:"consolidationRequests"`
}

// Client identifiers to support ClientVersionV1.
Expand Down
Loading