Commit Graph

142 Commits

Author SHA1 Message Date
Etan Kissling e67ca3d309
Compute epoch only once for better readability 2022-12-12 13:09:18 +01:00
Etan Kissling 5028a806ad
Implicit init during fork transition 2022-12-12 12:45:43 +01:00
Etan Kissling 11d2a59948
Flip `is_valid_light_client_header` logic for extensibility 2022-12-12 12:33:58 +01:00
Etan Kissling 2e97af2627
Add `ExecutionPayloadHeader` to LC data
While the light client sync protocol currently provides access to the
latest `BeaconBlockHeader`, obtaining the matching execution data needs
workarounds such as downloading the full block.

Having ready access to the EL state root simplifies use cases that need
a way to cross-check `eth_getProof` responses against LC data.

Access to `block_hash` unlocks scenarios where a CL light client drives
an EL without `engine_newPayload`. As of Altair, only the CL beacon
block root is available, but the EL block hash is needed for engine API.

Other fields in the `ExecutionPayloadHeader` such as `logs_bloom` may
allow light client applications to monitor blocks for local interest,
e.g. for transfers affecting a certain wallet. This enables to download
only the few relevant blocks instead of every single one.

A new `LightClientStore` is proposed into the Capella spec that may be
used to sync LC data that includes execution data. Existing pre-Capella
LC data will remain as is, but can be locally upgraded before feeding it
into the new `LightClientStore` so that light clients do not need to run
a potentially expensive fork transition at a specific time. This enables
the `LightClientStore` to be upgraded at a use case dependent timing at
any time before Capella hits. Smart contract and embedded deployments
benefit from reduced code size and do not need synchronization with the
beacon chain clock to perform the Capella fork.
2022-12-12 00:48:40 +01:00
Alex Stokes 37e504e784
bound the maximum number of validators considered for withdrawals per sweep 2022-12-09 10:51:25 -07:00
Tim Beiko aae00a0bf6
Clarify that full withdrawals only apply to exited validators 2022-11-30 16:21:06 -08:00
Danny Ryan d4a9b97cd0
Merge pull request #3084 from ethereum/validator-note-for-bls-change
Add note to Capella validator guide about BLS to execution change
2022-11-10 11:32:04 -07:00
Danny Ryan 0e7d3555ea
minor copy edits 2022-11-10 11:12:33 -07:00
Danny Ryan 37996fc36c
Merge pull request #3068 from potuz/withdrawals_without_queues
Withdrawals without queues
2022-11-10 10:49:25 -07:00
Alex Stokes be85e9356a
Update specs/capella/validator.md
Co-authored-by: Hsiao-Wei Wang <hsiaowei.eth@gmail.com>
2022-11-10 09:12:35 -05:00
Alex Stokes 0f93e9aad8
Update specs/capella/validator.md
Co-authored-by: Hsiao-Wei Wang <hsiaowei.eth@gmail.com>
2022-11-10 09:12:10 -05:00
Potuz 7f266bcb0f Use next_validator_withdrawal_index 2022-11-10 08:33:11 -03:00
Potuz 710b124cdc fix last commit 2022-11-08 21:51:54 -03:00
Potuz 8f42e485c7 Add extra % 2022-11-08 19:53:58 -03:00
Alex Stokes 8bb1751f46
Add note to Capella validator guide about BLS to execution change 2022-11-07 15:22:26 -07:00
Potuz 99e2704c2c make tests pass 2022-11-07 17:56:01 -03:00
Potuz ac670e2c47 add phase0 sentence regarding process slots 2022-11-07 17:34:19 -03:00
Potuz 2f89f5096d Danny's review 1st pass 2022-11-07 17:29:56 -03:00
Hsiao-Wei Wang dac756efee
Minor clean up 2022-11-07 09:09:09 -05:00
Alex Stokes b5ecf44c91
add note about packing BLS to execution changes into a block 2022-11-04 16:41:07 -06:00
Alex Stokes c8d1614e7e
Apply suggestions from code review 2022-11-04 16:19:26 -06:00
ethDreamer 355ca296b8
Update specs/capella/p2p-interface.md
Co-authored-by: Alex Stokes <r.alex.stokes@gmail.com>
2022-11-04 17:13:23 -05:00
ethDreamer 6c1fa0a485
Update specs/capella/p2p-interface.md
Co-authored-by: Alex Stokes <r.alex.stokes@gmail.com>
2022-11-04 17:13:15 -05:00
ethDreamer 1f68c57a7b
Update specs/capella/p2p-interface.md
Co-authored-by: Alex Stokes <r.alex.stokes@gmail.com>
2022-11-04 17:13:07 -05:00
Potuz 8488fb79d9 Alex Stokes' review 2022-11-04 18:47:56 -03:00
Potuz e15b02d16f lint 2022-11-04 09:13:21 -03:00
Potuz 22f803a038 name change and increment operator 2022-11-04 07:20:26 -03:00
Potuz 6e913ecbd2 rename to latest_withdrawal_validator_index 2022-11-03 20:23:35 -03:00
Hsiao-Wei Wang 0b1f32ec25
Fix capella/block_processing tests 2022-11-03 16:08:05 -05:00
Potuz a09d617737 right ret 2022-11-03 15:07:03 -03:00
Potuz 329bafa6e2 dapplion's suggestions 2022-11-03 14:58:55 -03:00
Potuz 12404d0250 fix for loop 2022-11-03 14:56:38 -03:00
Potuz 39e6ec5d14
lint 2022-11-03 11:43:56 -05:00
Potuz a14479a70f
g11tech review 2022-11-03 11:43:56 -05:00
Potuz ff1dd90012
fix toc 2022-11-03 11:43:24 -05:00
Potuz 5b92eae08f
type annotation 2022-11-03 11:43:24 -05:00
Potuz 0f74ab5686
type annotation 2022-11-03 11:43:24 -05:00
Potuz c156ea6adc
linting and typo 2022-11-03 11:43:24 -05:00
Potuz 49a2519da2
lint 2022-11-03 11:43:24 -05:00
Potuz 7dbd50e958
Reviewers' comments
- Implemented many of Alex's comments including reinsertion of the
  withdrawal index in the BeaconState
- Implemented Sean's suggestion of separating the logic for block
  production so that one matches the list in the payload with what
`get_expected_withdrawals` returns
- Changed `get_expected_wihdrawals` to match the current behavior and
  moved it to `beacon-chain.md`
2022-11-03 11:42:31 -05:00
Potuz d958ed70b4
Implement withdrawals without queues 2022-11-03 11:40:54 -05:00
Mark Mackey 826c20ffc2 Capella: Add Gossip Topic bls_to_execution_change 2022-11-01 12:54:33 -05:00
Jacek Sieka 4d1b487b21
move field last
avoids changing "header" fields in state
2022-10-27 10:38:09 +02:00
Jacek Sieka 1c8d57eeb7
Historical batches
This PR, a continuation of
replaces `historical_roots` with
`historical_block_roots`.

By keeping an accumulator of historical block roots in the state, it
becomes possible to validate the entire block history that led up to
that particular state without executing the transitions, and without
checking them one by one in backwards order using a parent chain.

This is interesting for archival purposes as well as when implementing
sync protocols that can verify chunks of blocks quickly, meaning they
can be downloaded in any order.

It's also useful as it provides a canonical hash by which such chunks of
blocks can be named, with a direct reference in the state.

In this PR, `historical_roots` is frozen at its current value and
`historical_batches` are computed from the merge epoch onwards.

After this PR, `block_batch_root` in the state can be used to verify an
era of blocks against the state with a simple root check.

The `historical_roots` values on the other hand can be used to verify
that a constant distributed with clients is valid for a particular
state, and therefore extends the block validation all the way back to
genesis without backfilling `block_batch_root` and without introducing
any new security assumptions in the client.

As far as naming goes, it's convenient to talk about an "era" being 8192
slots ~= 1.14 days. The 8192 number comes from the
SLOTS_PER_HISTORICAL_ROOT constant.

With multiple easily verifable blocks in a file, it becomes trivial to
offload block history to out-of-protocol transfer methods (bittorrent /
ftp / whatever) - including execution payloads, paving the way for a
future in which clients purge block history in p2p.

This PR can be applied along with the merge which simplifies payload
distribution from the get-go. Both execution and consensus clients
benefit because from the merge onwards, they both need to be able to
supply ranges of blocks in the sync protocol from what effectively is
"cold storage".

Another possibility is to include it in a future cleanup PR - this
complicates the "cold storage" mode above by not covering exection
payloads from start.
2022-10-27 10:33:38 +02:00
Hsiao-Wei Wang 9844ea1f30
Merge pull request #3040 from ethereum/capella-test-vectors
Capella test vectors
2022-10-23 06:44:03 +08:00
Hsiao-Wei Wang 53b63cedc5
Merge branch 'dev' into pr3050 2022-10-19 10:21:32 -05:00
Jim McDonald 0345b2284a
Add validator_index to Withdrawal. 2022-10-18 15:35:06 +01:00
Hsiao-Wei Wang b90436c988
Fix capella random & fork 2022-10-14 23:42:42 -05:00
Alex Stokes 092617ec1e
Remove duplicated definition of `Validator` 2022-10-09 17:02:50 -05:00
Danny Ryan eeebd42a95
Merge pull request #2998 from ethereum/remove-withdrawn-epoch
remove withdrawn_epoch
2022-09-26 14:30:25 -06:00
Justin Traglia 5517729859 Fix TOC with check_toc 2022-09-21 16:41:33 -05:00
Justin Traglia 7066307a0f Fix section name for withdraw_balance 2022-09-21 16:36:27 -05:00
Justin Traglia 603e27f459 Fix state list lengths table 2022-09-20 15:24:14 -05:00
Justin Traglia 3bc7ff9f80 Fix a few things in Capella specs 2022-09-20 14:43:38 -05:00
Danny Ryan 70f90c5296
rmove withdrawn_epoch 2022-09-19 11:39:46 -06:00
Potuz 2c32fa6473 Do not overload index with WithdrawalIndex and ValidatorIndex 2022-07-26 17:34:02 -03:00
Hsiao-Wei Wang 647e9d0ec0
PR feedback from @ralexstokes 2022-07-18 14:45:00 +08:00
Hsiao-Wei Wang 9c79880635
Fix genesis testing tool and add Capella version `initialize_beacon_state_from_eth1` helper 2022-07-15 22:22:19 +08:00
Etan Kissling 840733ffd2
Move `compute_fork_version` to `fork.md` 2022-06-23 21:03:24 +02:00
Etan Kissling 0b8ab23bd4
Remove `fork_version` from `LightClientUpdate`
The `fork_version` field in `LightClientUpdate` can be derived from the
`update.signature_slot` value by consulting the locally configured fork
schedule. The light client already needs access to the fork schedule to
determine the `GeneralizedIndex` values used for merkle proofs, and the
memory layouts of the structures (including `LightClientUpdate`). The
`fork_version` itself is network dependent and doesn't reveal that info.
2022-06-16 17:17:24 +02:00
Danny Ryan 74489d5523
Partial withdrawals (#2862)
* t push base design for partial withdrawals

* moor tests

* clean up withdrawals naming

* make partial withdrawal randomized tests better

* Apply suggestions from code review

Co-authored-by: Alex Stokes <r.alex.stokes@gmail.com>
Co-authored-by: Hsiao-Wei Wang <hsiaowei.eth@gmail.com>

* fix mainnet brokn test

* name swap

* lint

Co-authored-by: Alex Stokes <r.alex.stokes@gmail.com>
Co-authored-by: Hsiao-Wei Wang <hsiaowei.eth@gmail.com>
2022-06-08 13:16:12 -06:00
Danny Ryan c0a8178fff
minor patch to bytes formatting in capella 2022-05-10 09:37:01 -06:00
Danny Ryan c1d0836936
Merge pull request #2855 from ethereum/00-to-01
00 to 01 cred change
2022-05-05 07:31:49 -06:00
Hsiao-Wei Wang 6576cab612 Fix Capella `prepare_execution_payload` 2022-04-06 18:13:39 +08:00
Danny Ryan 4ac4158b42
move bls chang operation to end of block body 2022-03-23 10:54:40 -06:00
Hsiao-Wei Wang 8a388f2226 toc 2022-03-23 15:38:17 +08:00
Danny Ryan 2017b61265
test address_change 2022-03-22 13:37:17 -06:00
Danny Ryan 38496ba021
toc 2022-03-22 08:23:59 -06:00
Danny Ryan 702ed9f39a
Merge branch 'withdrawals-push' into 00-to-01 2022-03-22 08:23:34 -06:00
Danny Ryan b469593219
toc 2022-03-22 08:22:35 -06:00
Danny Ryan 0da78ebc4b
Merge branch 'withdrawals-push' into 00-to-01 2022-03-22 08:19:31 -06:00
Danny Ryan a2db44693b
build 2022-03-22 08:14:38 -06:00
Danny Ryan 43ce98b541
Merge branch 'withdrawals-push' of github.com:ethereum/eth2.0-specs into withdrawals-push 2022-03-22 08:10:53 -06:00
Danny Ryan 03f9503de0
Apply suggestions from code review
Co-authored-by: Alex Stokes <r.alex.stokes@gmail.com>
2022-03-22 08:03:55 -06:00
Danny Ryan 9a8ff4f3ab
topo sort 2022-03-22 08:00:53 -06:00
Danny Ryan 493b169022
refine naming for withdrawals 2022-03-22 07:55:45 -06:00
Danny Ryan 79cdb88e66
wip 00 to 01 cred change 2022-03-16 15:41:37 -06:00
Danny Ryan 36aae1d848
add tests for process_withdrawals 2022-03-16 13:35:29 -06:00
Danny Ryan 255e942f64
add validator and fork-choice mods for withdrawals in capella 2022-03-16 12:01:42 -06:00
Danny Ryan 3dd83cf4ee
minor withdrawals renamings 2022-03-10 12:30:51 -07:00
Danny Ryan e1b9cf97e2
add withdrawal index to wihdrawal transaction 2022-03-03 14:02:52 -07:00
Danny Ryan 0a55f062d7
fix execution paylaod tests 2022-02-24 15:38:23 -07:00
Danny Ryan f5dab5b666
fix fully withdrawal tests 2022-02-24 15:06:31 -07:00
Danny Ryan d513f5cf17
fix lint 2022-02-24 14:26:15 -07:00
Alex Stokes 0b89c7fb18
Update specs/capella/beacon-chain.md 2022-02-24 12:43:57 -07:00
Danny Ryan e49f73c9a4
fix tx type 2022-02-23 15:15:24 -07:00
Danny Ryan e80a142d83
modified withdrawals for push 2022-02-23 15:05:55 -07:00
Hsiao-Wei Wang 171a9ccc81
Resolve conflicts 2021-12-27 18:30:12 +08:00
Danny Ryan 180abb90ec
clean up some withdrawal logic and add tests 2021-12-02 11:56:33 -07:00
Danny Ryan 3024dc8ba8
add withdrawn_epoch to capella validators 2021-12-02 10:52:56 -07:00
Danny Ryan ca74094605
Apply suggestions from code review
Co-authored-by: Mikhail Kalinin <noblesse.knight@gmail.com>
2021-12-02 10:31:56 -07:00
Danny Ryan 4f24fe455b
basic capella withdrawal in place 2021-12-01 11:37:30 -07:00