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

Use correct pre state to call new payload #10416

Merged
merged 301 commits into from
Mar 25, 2022
Merged
Show file tree
Hide file tree
Changes from 250 commits
Commits
Show all changes
301 commits
Select commit Hold shift + click to select a range
bfe570b
Merge branch 'merge-oct-net' of github.com:prysmaticlabs/prysm into m…
terencechain Oct 5, 2021
4d0c0f7
Update todo strings
terencechain Oct 5, 2021
d494845
Merge branch 'develop' of github.com:prysmaticlabs/prysm into merge-oct
terencechain Oct 6, 2021
09c3896
Go fmt
terencechain Oct 6, 2021
1dbd0b9
add merge specific checks when receiving a block from gossip
Oct 6, 2021
54449c7
Merge branch 'merge-oct' of https://github.com/prysmaticlabs/prysm in…
Oct 6, 2021
990ebd3
Merge branch 'develop' of github.com:prysmaticlabs/prysm into merge-oct
terencechain Oct 6, 2021
370b0b9
Fix beacon chain build
terencechain Oct 6, 2021
76ee51a
Interop merge beacon state
terencechain Oct 7, 2021
fcbc48f
fix finding Transactions size
jmozah Oct 7, 2021
0146c53
Merge branch 'develop' of github.com:prysmaticlabs/prysm into merge-oct
terencechain Oct 7, 2021
85b3061
Update go commit
terencechain Oct 7, 2021
c50d540
Merge union debugging (#9751)
kasey Oct 7, 2021
17196e0
changes test cases per ssz changes
jmozah Oct 7, 2021
5e9583e
noisy commit, restoring pb field order codegen
kasey Oct 7, 2021
2963237
get rid of codegen garbage
kasey Oct 7, 2021
2128208
M2 works with Geth 🎉
terencechain Oct 7, 2021
5290ad9
Merge conflict. Sync with upstream
terencechain Oct 7, 2021
8a79d06
Fix bazel build //...
terencechain Oct 7, 2021
9de1f69
restoring generated pb field ordering
kasey Oct 8, 2021
63c4d2e
defensive nil check
kasey Oct 8, 2021
d7c7d15
separate ExecutionPayload/Header from codegen
kasey Oct 8, 2021
eeb7d5b
tell bazel about this new file
kasey Oct 8, 2021
1caa6c9
Merge branch 'develop' of github.com:prysmaticlabs/prysm into merge-oct
terencechain Oct 12, 2021
fa7d7ce
Merge: support terminal difficulty override (#9769)
terencechain Oct 13, 2021
b03441f
Fix finding terminal block hash calculation
terencechain Oct 13, 2021
05412c1
Update mainnet_config.go
terencechain Oct 13, 2021
bb8cad5
Update beacon_block.pb.go
terencechain Oct 13, 2021
1a14f23
Merge branch 'develop' of github.com:prysmaticlabs/prysm into merge-oct
terencechain Oct 14, 2021
50f4951
Various fixes to pass all spec tests for Merge (#9777)
terencechain Oct 14, 2021
70b55a0
Proper upgrade altair to merge state
terencechain Oct 15, 2021
6cb69d8
Merge branch 'develop' of github.com:prysmaticlabs/prysm into merge-oct
terencechain Oct 18, 2021
e82d7b4
Use uint64 for ttd
terencechain Oct 18, 2021
56542e1
Correctly upgrade to merge state + object mapping fixes
terencechain Oct 19, 2021
33dd6dd
Use proper receive block path for initial syncing
terencechain Oct 19, 2021
9a03946
Disable contract lookback
terencechain Oct 19, 2021
7fc4180
Disable deposit contract lookback
terencechain Oct 19, 2021
3b41968
Merge branch 'merge-oct' of github.com:prysmaticlabs/prysm into merge…
terencechain Oct 19, 2021
544248f
Go fmt
terencechain Oct 19, 2021
5f93ff1
Merge: switch from go bindings to raw rpc calls (#9803)
terencechain Oct 20, 2021
f4a0e98
Disable genesis ETH1.0 chain header logging
terencechain Oct 20, 2021
985ac2e
Update htrutils.go
terencechain Oct 24, 2021
c7fcd80
all gossip tests passing
jmozah Oct 27, 2021
0052070
Sync with develop
terencechain Nov 3, 2021
bde3152
Merge branch 'develop' of github.com:prysmaticlabs/prysm into merge-oct
terencechain Nov 3, 2021
c286ac8
Remove gas validations
terencechain Nov 3, 2021
e7e1ecd
Update penalty params for Merge
terencechain Nov 3, 2021
493e950
Fix gossip and tx size limits for the merge part 1
terencechain Nov 4, 2021
72f3b9e
Remove extraneous p2p condition
terencechain Nov 4, 2021
8a864b6
Add and use
terencechain Nov 4, 2021
ca47824
Add and use TBH_ACTIVATION_EPOCH
terencechain Nov 4, 2021
80ce160
Merge branch 'kintsugi' of github.com:prysmaticlabs/prysm into kintsugi
terencechain Nov 4, 2021
abea0a1
Update WORKSPACE
terencechain Nov 5, 2021
5d8879a
Update Kintsugi engine API (#9865)
terencechain Nov 8, 2021
f3c2d1a
Kintsugi ssz (#9867)
kasey Nov 9, 2021
9863fb3
All spec tests pass
terencechain Nov 9, 2021
471c940
Update spec test shas
terencechain Nov 9, 2021
ff1416c
Update Kintsugi consensus implementations (#9872)
terencechain Nov 9, 2021
ee1c567
Remove secp256k1
terencechain Nov 9, 2021
5b5065b
Remove unused merge genesis state gen tool
terencechain Nov 9, 2021
87bc6aa
Manually override nil transaction field. M2 works
terencechain Nov 10, 2021
183d40d
Merge branch 'develop' of github.com:prysmaticlabs/prysm into kintsugi
terencechain Nov 11, 2021
445f178
Fix bad hex conversion
terencechain Nov 12, 2021
56407dd
Change Gossip message size and Chunk SIze from 1 MB t0 10MB (#9860)
jmozah Nov 15, 2021
ec772be
Merge branch 'develop' of github.com:prysmaticlabs/prysm into kintsugi
terencechain Nov 15, 2021
1bed9ef
Sync with develop
terencechain Nov 15, 2021
3bc0c2b
Merge branch 'develop' into kintsugi
terencechain Nov 15, 2021
db67d5b
Merge branch 'develop' of github.com:prysmaticlabs/prysm into kintsugi
terencechain Nov 15, 2021
bc565d9
Merge branch 'develop' of github.com:prysmaticlabs/prysm into kintsugi
terencechain Nov 17, 2021
12c36cf
Update state_trie.go
terencechain Nov 17, 2021
f90dec2
Merge branch 'develop' of github.com:prysmaticlabs/prysm into kintsugi
terencechain Nov 23, 2021
49c9ab9
Clean up conflicts
terencechain Nov 23, 2021
e599f6a
Fix build
terencechain Nov 23, 2021
33e675e
Update config to devnet1
terencechain Nov 23, 2021
4c0b262
Fix state merge
terencechain Nov 23, 2021
cf0e78c
Handle merge test case for update balance
terencechain Nov 23, 2021
8ddb2c2
Merge commit '4858de787558c792b01aae44bc3902859b98fcac' of github.com…
terencechain Nov 23, 2021
938c28c
Fix build
terencechain Nov 23, 2021
3c54aef
Merge branch 'develop' of github.com:prysmaticlabs/prysm into kintsugi
terencechain Nov 23, 2021
67d7f8b
State pkg cleanup
terencechain Nov 24, 2021
33f4d5c
Fix a bug with loading mainnet state
terencechain Nov 29, 2021
ac5a227
Fix transactions root
terencechain Nov 29, 2021
dd3d65f
Add v2 endpoint for merge blocks (#9802)
potuz Dec 1, 2021
81c7b90
Sync
terencechain Dec 4, 2021
2f4e8be
Sync
terencechain Dec 4, 2021
e4e9f12
Merge branch 'develop' of github.com:prysmaticlabs/prysm into kintsugi
terencechain Dec 6, 2021
9af0817
Go mod tidy
terencechain Dec 6, 2021
f84c956
change EP field names
Dec 8, 2021
9fecd76
latest kintusgi execution api
terencechain Dec 8, 2021
64533a4
Merge branch 'kintsugi' of github.com:prysmaticlabs/prysm into kintsugi
terencechain Dec 8, 2021
719109c
Merge branch 'develop' of github.com:prysmaticlabs/prysm into kintsugi
terencechain Dec 9, 2021
5ae564f
fix conflicts
terencechain Dec 9, 2021
e7f0fcf
converting base fee to big endian format (#10018)
jmozah Dec 15, 2021
42a5f96
ReverseByteOrder function does not mess the input
Dec 15, 2021
6fe430d
Merge branch 'develop' of github.com:prysmaticlabs/prysm into kintsugi
terencechain Dec 16, 2021
8600f70
sync with develop
terencechain Dec 16, 2021
f5db847
use merge gossip sizes
terencechain Dec 16, 2021
09744ba
correct gossip sizes this time
terencechain Dec 16, 2021
41f5fa7
visibility
terencechain Dec 16, 2021
762863c
Merge branch 'develop' of github.com:prysmaticlabs/prysm into kintsugi
terencechain Dec 20, 2021
8d89182
Merge branch 'develop' of github.com:prysmaticlabs/prysm into kintsugi
terencechain Dec 23, 2021
51ef502
clean ups
terencechain Dec 23, 2021
9149178
Merge branch 'develop' of github.com:prysmaticlabs/prysm into kintsugi
terencechain Jan 3, 2022
7b59eca
Sync with develop, fix payload nil check bug
terencechain Jan 3, 2022
b45826e
Speed up syncing, hide cosmetic errors
terencechain Jan 4, 2022
53b78a3
Merge branch 'develop' of github.com:prysmaticlabs/prysm into kintsugi
terencechain Jan 10, 2022
dc42ff3
Sync with develop
terencechain Jan 10, 2022
a870bf7
Clean up after sync
terencechain Jan 11, 2022
99878d1
Merge branch 'develop' of github.com:prysmaticlabs/prysm into kintsugi
terencechain Jan 12, 2022
9e220f9
Merge branch 'develop' of github.com:prysmaticlabs/prysm into kintsugi
terencechain Jan 13, 2022
263c189
Update generate_keys.go
terencechain Jan 13, 2022
80dc725
sync with develop
terencechain Jan 15, 2022
77f815a
Merge branch 'develop' of github.com:prysmaticlabs/prysm into kintsugi
terencechain Jan 24, 2022
327903b
Merge branch 'develop' of github.com:prysmaticlabs/prysm into kintsugi
terencechain Jan 27, 2022
2b55368
sync with develop
terencechain Jan 27, 2022
5effb92
Update mainnet_config.go
terencechain Jan 27, 2022
aba628b
Merge branch 'develop' of github.com:prysmaticlabs/prysm into kintsugi
terencechain Jan 28, 2022
3450923
Sync with develop
terencechain Feb 4, 2022
26876d6
Clean ups
terencechain Feb 4, 2022
4ad31f9
Sync with develop
terencechain Feb 7, 2022
f99a041
Sync optimistically candidate blocks (#10193)
potuz Feb 7, 2022
08a5155
Revert "Sync optimistically candidate blocks (#10193)"
potuz Feb 7, 2022
12754ad
Sync optimistically candidate blocks (#10193)
potuz Feb 7, 2022
cbdb3c9
Merge branch 'develop' of github.com:prysmaticlabs/prysm into kintsugi
terencechain Feb 7, 2022
8eaf391
allow optimistic sync
potuz Feb 7, 2022
4b75b99
Fix merge transition block validation
terencechain Feb 7, 2022
ea6ca45
Merge branch 'develop' of github.com:prysmaticlabs/prysm into kintsugi
terencechain Feb 8, 2022
30e796a
Update proposer.go
terencechain Feb 8, 2022
eedcb52
Merge commit '8eaf3919189cd6d5f51904d8e9d74995ab70d4ac' into kintsugi
terencechain Feb 8, 2022
924758a
Merge branch 'develop' of github.com:prysmaticlabs/prysm into kintsugi
terencechain Feb 9, 2022
5693752
Merge branch 'develop' of github.com:prysmaticlabs/prysm into kintsugi
terencechain Feb 9, 2022
4c34e5d
Sync with develop
terencechain Feb 9, 2022
29eceba
delete deprecated client, update testnet flag
terencechain Feb 10, 2022
a67b861
Change optimistic logic (#10194)
potuz Feb 10, 2022
695389b
Merge branch 'develop' of github.com:prysmaticlabs/prysm into kintsugi
terencechain Feb 10, 2022
a1d8833
Logs and err handling
terencechain Feb 10, 2022
42d5416
Merge branch 'develop' of github.com:prysmaticlabs/prysm into kintsugi
terencechain Feb 10, 2022
481d884
Merge branch 'kintsugi' of github.com:prysmaticlabs/prysm into kiln
terencechain Feb 10, 2022
b56bd9e
Fix build
terencechain Feb 10, 2022
eae0db3
Clean ups
terencechain Feb 10, 2022
1b5a6d4
Add back get payload
terencechain Feb 10, 2022
4f77ad2
Merge branch 'develop' of github.com:prysmaticlabs/prysm into kiln
terencechain Feb 10, 2022
7d60462
Merge branch 'develop' of github.com:prysmaticlabs/prysm into kiln
terencechain Feb 12, 2022
94fe388
Merge branch 'develop' of github.com:prysmaticlabs/prysm into kiln
terencechain Feb 14, 2022
443df77
c
terencechain Feb 15, 2022
f47b6af
Done
terencechain Feb 15, 2022
80cd539
Rm uncommented
terencechain Feb 15, 2022
1d36ecb
Merge branch 'develop' of github.com:prysmaticlabs/prysm into kiln
terencechain Feb 15, 2022
41b8b1a
Merge branch 'kiln2' into kiln
terencechain Feb 15, 2022
5f414b3
Optimistic sync: prysm validator rpcs (#10200)
terencechain Feb 15, 2022
fa656a8
Logs to reproduce
terencechain Feb 15, 2022
032cf43
Use pointers
terencechain Feb 15, 2022
19782d2
Use pointers
terencechain Feb 15, 2022
f6883f2
Use pointers
terencechain Feb 15, 2022
8e78eae
Update json_marshal_unmarshal.go
terencechain Feb 15, 2022
b15cd76
Merge branch 'develop' of github.com:prysmaticlabs/prysm into kiln
terencechain Feb 15, 2022
176ea13
Merge branch 'payload-pointers' into kiln
terencechain Feb 15, 2022
68e75d5
Fix marshal
terencechain Feb 15, 2022
a424f52
Update json_marshal_unmarshal.go
terencechain Feb 16, 2022
9636fde
Sync
terencechain Feb 16, 2022
4c23401
Log
terencechain Feb 16, 2022
99deee5
string total diff
rauljordan Feb 19, 2022
bb126a9
str
rauljordan Feb 19, 2022
70a6fc4
marshal un
rauljordan Feb 19, 2022
4ce3da7
set string
rauljordan Feb 19, 2022
1cedf4b
json
rauljordan Feb 19, 2022
c4454ca
gaz
rauljordan Feb 19, 2022
4c7daf7
Comment out optimistic status
terencechain Feb 19, 2022
5e8c49c
Merge branch 'develop' into kiln
rauljordan Feb 19, 2022
9a56a5d
Merge branch 'develop' of github.com:prysmaticlabs/prysm into kiln
terencechain Feb 20, 2022
f9fbda8
Merge branch 'develop' of github.com:prysmaticlabs/prysm into kiln
terencechain Feb 21, 2022
fa1509c
remove kiln flag here (#10269)
nisdas Feb 22, 2022
b6fd9e5
Merge branch 'develop' of github.com:prysmaticlabs/prysm into kiln
terencechain Feb 22, 2022
72c1720
Merge branch 'kiln' of github.com:prysmaticlabs/prysm into kiln
terencechain Feb 22, 2022
1e32cd5
Sync with devleop
terencechain Feb 22, 2022
b280e79
Merge branch 'develop' of github.com:prysmaticlabs/prysm into kiln
terencechain Feb 22, 2022
78a90af
Merge branch 'develop' of github.com:prysmaticlabs/prysm into kiln
terencechain Feb 23, 2022
a5240cf
Merge branch 'develop' of github.com:prysmaticlabs/prysm into kiln
terencechain Feb 24, 2022
e396309
Sync with develop
terencechain Feb 25, 2022
66418ec
Merge branch 'develop' into kiln
rauljordan Feb 25, 2022
d3756ea
clean ups
terencechain Feb 26, 2022
9da43e4
refactor engine calls
terencechain Feb 27, 2022
d8f9ecb
Update process_block.go
terencechain Feb 27, 2022
d41947c
Fix deadlock, uncomment duty opt sync
terencechain Mar 1, 2022
8baf217
Merge branch 'develop' of github.com:prysmaticlabs/prysm into kiln
terencechain Mar 1, 2022
1583c77
Merge branch 'develop' of github.com:prysmaticlabs/prysm into kiln
terencechain Mar 1, 2022
1daae0f
Update proposer_execution_payload.go
terencechain Mar 1, 2022
aecd34a
Merge branch 'develop' of github.com:prysmaticlabs/prysm into kiln
terencechain Mar 3, 2022
72d2bc7
Sync with develop
terencechain Mar 3, 2022
a69901b
Rm post state check
terencechain Mar 3, 2022
8739514
Bypass eth1 data checks
terencechain Mar 3, 2022
acc528f
Merge branch 'develop' of github.com:prysmaticlabs/prysm into kiln
terencechain Mar 3, 2022
4acc40f
Update proposer_execution_payload.go
terencechain Mar 3, 2022
e2e5a0d
Return early if ttd is not reached
terencechain Mar 4, 2022
7f8d66c
Merge branch 'develop' into kiln
rauljordan Mar 7, 2022
55c8922
Merge branch 'develop' of github.com:prysmaticlabs/prysm into kiln
terencechain Mar 7, 2022
4724b84
Sync with devleop
terencechain Mar 7, 2022
c4093f8
Merge branch 'develop' of github.com:prysmaticlabs/prysm into kiln
terencechain Mar 10, 2022
5d7704e
Update process_block.go
terencechain Mar 10, 2022
5b4a87c
Update receive_block.go
terencechain Mar 10, 2022
6f15d2b
Update bzl
terencechain Mar 10, 2022
ef04354
Revert "Update receive_block.go"
terencechain Mar 10, 2022
a08c809
Merge branch 'develop' of github.com:prysmaticlabs/prysm into kiln
terencechain Mar 10, 2022
f6eb6cd
Fix run time
terencechain Mar 10, 2022
546939d
Update go.mod
terencechain Mar 12, 2022
e62cdce
Fix AltairCompatible to account for future state version
terencechain Mar 12, 2022
ee1ee62
Update proposer_execution_payload.go
terencechain Mar 12, 2022
a37e0f1
Merge branch 'develop' of github.com:prysmaticlabs/prysm into kiln
terencechain Mar 13, 2022
c489687
Handle pre state Altair with valid payload
terencechain Mar 14, 2022
3ae6dc9
Handle pre state Altair with valid payload
terencechain Mar 14, 2022
9fe7d58
Merge branch 'handle-pre-state-altair' of github.com:prysmaticlabs/pr…
terencechain Mar 14, 2022
ce0bd74
Merge branch 'develop' of github.com:prysmaticlabs/prysm into kiln
terencechain Mar 14, 2022
8029648
Log bellatrix fields
terencechain Mar 14, 2022
7423c61
Merge branch 'log-bellatrix-blk' into kiln
terencechain Mar 14, 2022
ce86bfa
Update log.go
terencechain Mar 14, 2022
8d13ed1
Merge branch 'develop' into log-bellatrix-blk
terencechain Mar 14, 2022
649a345
Merge branch 'develop' into log-bellatrix-blk
terencechain Mar 15, 2022
1d4477c
Merge refs/heads/develop into log-bellatrix-blk
prylabs-bulldozer[bot] Mar 15, 2022
29296de
Merge branch 'develop' of github.com:prysmaticlabs/prysm into kiln
terencechain Mar 15, 2022
ab9ece5
Friendly fee recipient log
terencechain Mar 15, 2022
52171da
Remove extra SetOptimisticToValid
terencechain Mar 15, 2022
5566b2b
Fix base fee per gas
terencechain Mar 15, 2022
3ea8b79
Fix notifypayload headroot
terencechain Mar 15, 2022
d056b21
Merge branch 'develop' of github.com:prysmaticlabs/prysm into kiln
terencechain Mar 16, 2022
2716184
Merge branch 'log-bellatrix-blk' into kiln
terencechain Mar 16, 2022
49e8b9f
Merge branch 'develop' of github.com:prysmaticlabs/prysm into kiln
terencechain Mar 17, 2022
4d278de
clean up with develop branch
terencechain Mar 17, 2022
37baf27
Merge branch 'develop' of github.com:prysmaticlabs/prysm into kiln
terencechain Mar 18, 2022
7529ced
Sync with devleop
terencechain Mar 18, 2022
876fd5b
Merge branch 'develop' of github.com:prysmaticlabs/prysm into kiln
terencechain Mar 21, 2022
0a1e93a
Merge branch 'develop' of github.com:prysmaticlabs/prysm into kiln
terencechain Mar 22, 2022
293b976
Fix
terencechain Mar 24, 2022
0d85422
Fix
terencechain Mar 24, 2022
9c96f80
fix
terencechain Mar 24, 2022
dd3d421
Fix
terencechain Mar 24, 2022
43e6496
fix tests
terencechain Mar 24, 2022
5aa8009
Merge branch 'kiln-fx' into use-correct-pre-state
terencechain Mar 24, 2022
ee31675
revert some changes
terencechain Mar 24, 2022
aad1ea3
Merge branch 'develop' into use-correct-pre-state
terencechain Mar 24, 2022
21227e3
fix tests
terencechain Mar 24, 2022
f1a2d93
Merge branch 'use-correct-pre-state' of github.com:prysmaticlabs/prys…
terencechain Mar 24, 2022
7e83bc0
Merge refs/heads/develop into use-correct-pre-state
prylabs-bulldozer[bot] Mar 24, 2022
fc2e4e7
Merge refs/heads/develop into use-correct-pre-state
prylabs-bulldozer[bot] Mar 24, 2022
0538766
Update optimistic_sync_test.go
terencechain Mar 24, 2022
66774b5
Merge refs/heads/develop into use-correct-pre-state
prylabs-bulldozer[bot] Mar 24, 2022
fea3376
Merge refs/heads/develop into use-correct-pre-state
prylabs-bulldozer[bot] Mar 24, 2022
2f8bdb4
Merge refs/heads/develop into use-correct-pre-state
prylabs-bulldozer[bot] Mar 24, 2022
b5cf982
Simplify IsExecutionEnabledUsingHeader
potuz Mar 25, 2022
c00e69d
Merge refs/heads/develop into use-correct-pre-state
prylabs-bulldozer[bot] Mar 25, 2022
59700c6
Merge refs/heads/develop into use-correct-pre-state
prylabs-bulldozer[bot] Mar 25, 2022
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: 6 additions & 9 deletions beacon-chain/blockchain/optimistic_sync.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import (
"github.com/prysmaticlabs/prysm/beacon-chain/core/blocks"
"github.com/prysmaticlabs/prysm/beacon-chain/core/helpers"
v1 "github.com/prysmaticlabs/prysm/beacon-chain/powchain/engine-api-client/v1"
"github.com/prysmaticlabs/prysm/beacon-chain/state"
"github.com/prysmaticlabs/prysm/config/params"
"github.com/prysmaticlabs/prysm/encoding/bytesutil"
enginev1 "github.com/prysmaticlabs/prysm/proto/engine/v1"
Expand Down Expand Up @@ -87,23 +86,21 @@ func (s *Service) notifyForkchoiceUpdate(ctx context.Context, headBlk block.Beac
}

// notifyForkchoiceUpdate signals execution engine on a new payload
func (s *Service) notifyNewPayload(ctx context.Context, preStateVersion int, header *ethpb.ExecutionPayloadHeader, postState state.BeaconState, blk block.SignedBeaconBlock, root [32]byte) error {
func (s *Service) notifyNewPayload(ctx context.Context, preStateVersion, postStateVersion int,
preStateHeader, postStateHeader *ethpb.ExecutionPayloadHeader, blk block.SignedBeaconBlock, root [32]byte) error {
ctx, span := trace.StartSpan(ctx, "blockChain.notifyNewPayload")
defer span.End()

if postState == nil {
return errors.New("pre and post states must not be nil")
}
// Execution payload is only supported in Bellatrix and beyond. Pre
// merge blocks are never optimistic
if isPreBellatrix(postState.Version()) {
if isPreBellatrix(postStateVersion) {
return s.cfg.ForkChoiceStore.SetOptimisticToValid(ctx, root)
}
if err := helpers.BeaconBlockIsNil(blk); err != nil {
return err
}
body := blk.Block().Body()
enabled, err := blocks.ExecutionEnabled(postState, blk.Block().Body())
enabled, err := blocks.IsExecutionEnabledUsingHeader(postStateHeader, body)
if err != nil {
return errors.Wrap(err, "could not determine if execution is enabled")
}
Expand All @@ -119,7 +116,7 @@ func (s *Service) notifyNewPayload(ctx context.Context, preStateVersion int, hea
switch err {
case v1.ErrAcceptedSyncingPayloadStatus:
log.WithFields(logrus.Fields{
"slot": postState.Slot(),
"slot": blk.Block().Slot(),
"blockHash": fmt.Sprintf("%#x", bytesutil.Trunc(payload.BlockHash)),
}).Info("Called new payload with optimistic block")
return nil
Expand All @@ -138,7 +135,7 @@ func (s *Service) notifyNewPayload(ctx context.Context, preStateVersion int, hea
// To reach here, the block must have contained a valid payload.
return s.validateMergeBlock(ctx, blk)
}
atTransition, err := blocks.IsMergeTransitionBlockUsingPayloadHeader(header, body)
atTransition, err := blocks.IsMergeTransitionBlockUsingPayloadHeader(preStateHeader, body)
if err != nil {
return errors.Wrap(err, "could not check if merge block is terminal")
}
Expand Down
13 changes: 6 additions & 7 deletions beacon-chain/blockchain/optimistic_sync_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -218,11 +218,6 @@ func Test_NotifyNewPayload(t *testing.T) {
postState: altairState,
preState: altairState,
},
{
name: "nil post state",
preState: phase0State,
errString: "pre and post states must not be nil",
},
{
name: "nil beacon block",
postState: bellatrixState,
Expand Down Expand Up @@ -348,7 +343,9 @@ func Test_NotifyNewPayload(t *testing.T) {
}
root := [32]byte{'a'}
require.NoError(t, service.cfg.ForkChoiceStore.InsertOptimisticBlock(ctx, 0, root, root, params.BeaconConfig().ZeroHash, 0, 0))
err = service.notifyNewPayload(ctx, tt.preState.Version(), payload, tt.postState, tt.blk, root)
postVersion, postHeader, err := getStateVersionAndPayload(tt.postState)
require.NoError(t, err)
err = service.notifyNewPayload(ctx, tt.preState.Version(), postVersion, payload, postHeader, tt.blk, root)
if tt.errString != "" {
require.ErrorContains(t, tt.errString, err)
} else {
Expand Down Expand Up @@ -398,7 +395,9 @@ func Test_NotifyNewPayload_SetOptimisticToValid(t *testing.T) {
require.NoError(t, err)
root := [32]byte{'c'}
require.NoError(t, service.cfg.ForkChoiceStore.InsertOptimisticBlock(ctx, 1, root, [32]byte{'a'}, params.BeaconConfig().ZeroHash, 0, 0))
err = service.notifyNewPayload(ctx, bellatrixState.Version(), payload, bellatrixState, bellatrixBlk, root)
postVersion, postHeader, err := getStateVersionAndPayload(bellatrixState)
require.NoError(t, err)
err = service.notifyNewPayload(ctx, bellatrixState.Version(), postVersion, payload, postHeader, bellatrixBlk, root)
require.NoError(t, err)
optimistic, err := service.IsOptimisticForRoot(ctx, root)
require.NoError(t, err)
Expand Down
52 changes: 42 additions & 10 deletions beacon-chain/blockchain/process_block.go
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,11 @@ func (s *Service) onBlock(ctx context.Context, signed block.SignedBeaconBlock, b
if err := s.savePostStateInfo(ctx, blockRoot, signed, postState, false /* reg sync */); err != nil {
return err
}
if err := s.notifyNewPayload(ctx, preStateVersion, preStateHeader, postState, signed, blockRoot); err != nil {
postStateVersion, postStateHeader, err := getStateVersionAndPayload(postState)
if err != nil {
return err
}
if err := s.notifyNewPayload(ctx, preStateVersion, postStateVersion, preStateHeader, postStateHeader, signed, blockRoot); err != nil {
return errors.Wrap(err, "could not verify new payload")
}

Expand Down Expand Up @@ -256,14 +260,17 @@ func (s *Service) onBlock(ctx context.Context, signed block.SignedBeaconBlock, b
return s.handleEpochBoundary(ctx, postState)
}

func getStateVersionAndPayload(preState state.BeaconState) (int, *ethpb.ExecutionPayloadHeader, error) {
func getStateVersionAndPayload(st state.BeaconState) (int, *ethpb.ExecutionPayloadHeader, error) {
if st == nil {
return 0, nil, errors.New("nil state")
}
var preStateHeader *ethpb.ExecutionPayloadHeader
var err error
preStateVersion := preState.Version()
preStateVersion := st.Version()
switch preStateVersion {
case version.Phase0, version.Altair:
default:
preStateHeader, err = preState.LatestExecutionPayloadHeader()
preStateHeader, err = st.LatestExecutionPayloadHeader()
if err != nil {
return 0, nil, err
}
Expand Down Expand Up @@ -308,9 +315,24 @@ func (s *Service) onBlockBatch(ctx context.Context, blks []block.SignedBeaconBlo
PublicKeys: []bls.PublicKey{},
Messages: [][32]byte{},
}
type versionAndHeader struct {
version int
header *ethpb.ExecutionPayloadHeader
}
preVersionAndHeaders := make([]*versionAndHeader, len(blks))
postVersionAndHeaders := make([]*versionAndHeader, len(blks))
var set *bls.SignatureBatch
boundaries := make(map[[32]byte]state.BeaconState)
for i, b := range blks {
v, h, err := getStateVersionAndPayload(preState)
if err != nil {
return nil, nil, err
}
preVersionAndHeaders[i] = &versionAndHeader{
version: v,
header: h,
}

set, preState, err = transition.ExecuteStateTransitionNoVerifyAnySig(ctx, preState, b)
if err != nil {
return nil, nil, err
Expand All @@ -321,6 +343,15 @@ func (s *Service) onBlockBatch(ctx context.Context, blks []block.SignedBeaconBlo
}
jCheckpoints[i] = preState.CurrentJustifiedCheckpoint()
fCheckpoints[i] = preState.FinalizedCheckpoint()

v, h, err = getStateVersionAndPayload(preState)
if err != nil {
return nil, nil, err
}
postVersionAndHeaders[i] = &versionAndHeader{
version: v,
header: h,
}
sigSet.Join(set)
}
verify, err := sigSet.Verify()
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What happens if the signature does not verify, don't we end up with a bad block in forkchoice anyway?

Expand All @@ -333,22 +364,23 @@ func (s *Service) onBlockBatch(ctx context.Context, blks []block.SignedBeaconBlo

// blocks have been verified, add them to forkchoice and call the engine
for i, b := range blks {
preStateVersion, preStateHeader, err := getStateVersionAndPayload(preState)
if err != nil {
return nil, nil, err
}

s.saveInitSyncBlock(blockRoots[i], b)
if err := s.insertBlockToForkChoiceStore(ctx, b.Block(), blockRoots[i], fCheckpoints[i], jCheckpoints[i]); err != nil {
return nil, nil, err
}
if err := s.notifyNewPayload(ctx, preStateVersion, preStateHeader, preState, b, blockRoots[i]); err != nil {
if err := s.notifyNewPayload(ctx,
preVersionAndHeaders[i].version,
postVersionAndHeaders[i].version,
preVersionAndHeaders[i].header,
postVersionAndHeaders[i].header, b, blockRoots[i]); err != nil {
return nil, nil, err
}

if _, err := s.notifyForkchoiceUpdate(ctx, b.Block(), blockRoots[i], bytesutil.ToBytes32(fCheckpoints[i].Root)); err != nil {
return nil, nil, err
}
}

for r, st := range boundaries {
if err := s.cfg.StateGen.SaveState(ctx, r, st); err != nil {
return nil, nil, err
Expand Down
17 changes: 14 additions & 3 deletions beacon-chain/core/blocks/payload.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import (
enginev1 "github.com/prysmaticlabs/prysm/proto/engine/v1"
ethpb "github.com/prysmaticlabs/prysm/proto/prysm/v1alpha1"
"github.com/prysmaticlabs/prysm/proto/prysm/v1alpha1/block"
"github.com/prysmaticlabs/prysm/runtime/version"
"github.com/prysmaticlabs/prysm/time/slots"
)

Expand Down Expand Up @@ -85,15 +86,25 @@ func ExecutionBlock(body block.BeaconBlockBody) (bool, error) {
// Spec code:
// def is_execution_enabled(state: BeaconState, body: BeaconBlockBody) -> bool:
// return is_merge_block(state, body) or is_merge_complete(state)
// Deprecated: Use `IsExecutionEnabledUsingHeader` instead.
func ExecutionEnabled(st state.BeaconState, body block.BeaconBlockBody) (bool, error) {
mergeBlock, err := MergeTransitionBlock(st, body)
if st.Version() == version.Phase0 || st.Version() == version.Altair {
return false, nil
}
header, err := st.LatestExecutionPayloadHeader()
if err != nil {
return false, err
}
if mergeBlock {
return IsExecutionEnabledUsingHeader(header, body)
}

// IsExecutionEnabledUsingHeader returns true if the execution is enabled using post processed payload header and block body.
// This is an optimized version of ExecutionEnabled where beacon state is not required as an argument.
func IsExecutionEnabledUsingHeader(header *ethpb.ExecutionPayloadHeader, body block.BeaconBlockBody) (bool, error) {
if !isEmptyHeader(header) {
return true, nil
}
return MergeTransitionComplete(st)
return ExecutionBlock(body)
}

// ValidatePayloadWhenMergeCompletes validates if payload is valid versus input beacon state.
Expand Down
80 changes: 77 additions & 3 deletions beacon-chain/core/blocks/payload_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -564,6 +564,82 @@ func Test_IsExecutionBlock(t *testing.T) {
}

func Test_ExecutionEnabled(t *testing.T) {
tests := []struct {
name string
payload *enginev1.ExecutionPayload
header *ethpb.ExecutionPayloadHeader
useAltairSt bool
want bool
}{
{
name: "use older than bellatrix state",
payload: emptyPayload(),
header: emptyPayloadHeader(),
useAltairSt: true,
want: false,
},
{
name: "empty header, empty payload",
payload: emptyPayload(),
header: emptyPayloadHeader(),
want: false,
},
{
name: "non-empty header, empty payload",
payload: emptyPayload(),
header: func() *ethpb.ExecutionPayloadHeader {
h := emptyPayloadHeader()
h.ParentHash = bytesutil.PadTo([]byte{'a'}, fieldparams.RootLength)
return h
}(),
want: true,
},
{
name: "empty header, non-empty payload",
header: emptyPayloadHeader(),
payload: func() *enginev1.ExecutionPayload {
p := emptyPayload()
p.Timestamp = 1
return p
}(),
want: true,
},
{
name: "non-empty header, non-empty payload",
header: func() *ethpb.ExecutionPayloadHeader {
h := emptyPayloadHeader()
h.ParentHash = bytesutil.PadTo([]byte{'a'}, fieldparams.RootLength)
return h
}(),
payload: func() *enginev1.ExecutionPayload {
p := emptyPayload()
p.Timestamp = 1
return p
}(),
want: true,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
st, _ := util.DeterministicGenesisStateBellatrix(t, 1)
require.NoError(t, st.SetLatestExecutionPayloadHeader(tt.header))
blk := util.NewBeaconBlockBellatrix()
blk.Block.Body.ExecutionPayload = tt.payload
body, err := wrapper.WrappedBellatrixBeaconBlockBody(blk.Block.Body)
require.NoError(t, err)
if tt.useAltairSt {
st, _ = util.DeterministicGenesisStateAltair(t, 1)
}
got, err := blocks.ExecutionEnabled(st, body)
require.NoError(t, err)
if got != tt.want {
t.Errorf("ExecutionEnabled() got = %v, want %v", got, tt.want)
}
})
}
}

func Test_IsExecutionEnabledUsingHeader(t *testing.T) {
tests := []struct {
name string
payload *enginev1.ExecutionPayload
Expand Down Expand Up @@ -613,13 +689,11 @@ func Test_ExecutionEnabled(t *testing.T) {
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
st, _ := util.DeterministicGenesisStateBellatrix(t, 1)
require.NoError(t, st.SetLatestExecutionPayloadHeader(tt.header))
blk := util.NewBeaconBlockBellatrix()
blk.Block.Body.ExecutionPayload = tt.payload
body, err := wrapper.WrappedBellatrixBeaconBlockBody(blk.Block.Body)
require.NoError(t, err)
got, err := blocks.ExecutionEnabled(st, body)
got, err := blocks.IsExecutionEnabledUsingHeader(tt.header, body)
require.NoError(t, err)
if got != tt.want {
t.Errorf("ExecutionEnabled() got = %v, want %v", got, tt.want)
Expand Down