Commit Graph

4947 Commits

Author SHA1 Message Date
Etan Kissling 8ad6810a44
EIP4844 support (`excess_data_gas`), fork tests nyi 2022-12-12 13:11:49 +01:00
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
Etan Kissling 9ab22b3ef3
Merge branch 'lc-accessors' into lc-eph 2022-12-12 00:41:31 +01:00
Etan Kissling 14fd937046
Fix 2022-12-06 23:21:06 +01:00
Etan Kissling 0fb0b26742
Add accessors for LC header
Introduce `get_lc_beacon_slot` and `get_lc_beacon_root` accessors
similar to `get_current_slot(state)` to account for future extensions
to the light client header structure that may override how those fields
are accessed. Idea is to extend with execution accessors in the future.
2022-12-06 22:05:19 +01:00
Etan Kissling 8bf801ecc6
Add `block_to_light_client_header` helper
Introduce `block_to_light_client_header` helper function to enable
future forks to override it with additional info (e.g., execution),
without having to change the general light client logic.

Likewise, update existing light client data creation flow to use
`block_to_light_client_header` and default-initialize empty fields.

Furthermore, generalize `create_update` helper to streamline test code
using `block_to_light_client_header`.

Note: In Altair spec, LC header is the same as `BeaconBlockHeader`.
however; future forks will extend it with more information.
2022-12-06 17:44:41 +01:00
Etan Kissling f4dafcfebc
Merge branch 'dev' into lc-blockfuncs 2022-12-05 18:38:40 +01:00
George Kadianakis 23d3aeebba
EIP4844 precompile: Be strict when parsing field elements from network (#3138)
* EIP4844: bytes_to_bls_field() must not accept values >= BLS_MODULUS

bytes_to_bls_field() will be used in the precompile and hence it should error out when provided with malicious inputs.

* EIP4844: Add hash_to_bls_field() for use in compute_challenges()

The previous commit made bytes_to_bls_field() be strict about its inputs. However in compute_challenges() we are
dealing with Fiat-Shamir and hash outputs that could be innocuously higher than the modulus. For this reason we add the
hash_to_bls_field() helper for use in compute_challenges().

* EIP4844: Further use of bytes_to_bls_field() // Fix executable spec

Co-authored-by: Hsiao-Wei Wang <hsiaowei.eth@gmail.com>
2022-12-01 14:59:00 +02:00
Hsiao-Wei Wang 602f846dc7
Merge pull request #3134 from ethereum/eip4844-lint
Add EIP4844 pylint and Mypy checks
2022-12-01 20:01:48 +08:00
Tim Beiko aae00a0bf6
Clarify that full withdrawals only apply to exited validators 2022-11-30 16:21:06 -08:00
Hsiao-Wei Wang b62c9e8779
Merge pull request #3014 from tersec/deprecate-phase0-beacon-blocks-req-resp
deprecate phase 0-only versions of beacon_blocks_by_{range,root}
2022-11-29 22:09:13 +08:00
Hsiao-Wei Wang b3a176689d
WIP. Fixing mypy errors 2022-11-28 21:01:41 +08:00
Hsiao-Wei Wang 4f32fd95d6
Enable EIP4844 lint and fix Pylint 2022-11-28 20:01:50 +08:00
Roberto Bayardo a1e46d1ae4
EIP4844: Fix return value of compute_challenges (#3129)
Co-authored-by: George Kadianakis <desnacked@riseup.net>
2022-11-24 15:26:02 +02:00
kevaundray 3ec25a8755
Fix docstring for compute_powers and compute_challenges methods (#3130) 2022-11-24 15:11:46 +02:00
kevaundray f0ff15c14d
EIP4844: Refactor Fiat-Shamir logic to handle empty sidecars (#3093)
Additionally, it makes the Fiat-Shamir hashing logic more robust by making the challenges independent of each other. It also makes it more efficient to implement by moving both challenge computations to a single function needing a single transcript hash.

Co-authored-by: George Kadianakis <desnacked@riseup.net>
Co-authored-by: Dankrad Feist <mail@dankradfeist.de>
2022-11-23 16:52:47 +02:00
Dmitrii Shmatko 4e3b700b86 Fix initialization of VERSIONED_HASH_VERSION_KZG 2022-11-22 11:51:10 +04:00
Etan Kissling 0fb2447a95
Merge branch 'dev' into lc-blockfuncs 2022-11-19 12:20:18 +01:00
Ramana Kumar 19c8f21b63
Fix type annotation in verify_aggregate_kzg_proof 2022-11-19 09:17:11 +00:00
George Kadianakis a45627164d
Merge pull request #3097 from asn-d6/verify_kzg_proof_bytes_api
EIP4844: Refactor `verify_kzg_proof()` to receive bytes (used in precompile)
2022-11-18 20:01:18 +02:00
Hsiao-Wei Wang 46c0447662
Merge pull request #3110 from ethereum/eip4844-test-vectors
Add EIP4844 to testgen and add more Capella+EIP4844 random fork tests
2022-11-18 17:18:02 +08:00
Danny Ryan 30e975806f
Merge pull request #3108 from realbigsean/validate-blobs-sidecar-in-gossip
Make `validate_blobs_sidecar` a gossip condition
2022-11-17 16:31:14 -07:00
Hsiao-Wei Wang dd8b67075e
Add note comment 2022-11-18 04:51:19 +08:00
Hsiao-Wei Wang 438a7e55ea
Conver `roots_of_unity_brp` to integers 2022-11-18 03:20:25 +08:00
Hsiao-Wei Wang 78f0e0301e
Merge pull request #3052 from Inphi/inphi/eip4844-rebase
Rebase EIP-4844 on Capella
2022-11-18 03:16:58 +08:00
Danny Ryan de789e2d5b
Merge pull request #3090 from ethereum/4844-topic-dep
clarify deprecation of `beacon_block` gossip topic in 4844
2022-11-17 12:16:24 -07:00
Hsiao-Wei Wang ee0e2a03d2
Merge branch 'dev' into pr3052 2022-11-18 02:44:46 +08:00
Hsiao-Wei Wang 30dce7f232
Apply suggestions from code review
Co-authored-by: Alex Stokes <r.alex.stokes@gmail.com>
2022-11-18 02:25:56 +08:00
Hsiao-Wei Wang f1d4c9047a
Merge branch 'dev' into pr3052 2022-11-18 02:12:07 +08:00
Enrico Del Fante 620943b275
Update specs/eip4844/fork.md
Co-authored-by: Alex Stokes <r.alex.stokes@gmail.com>
2022-11-16 19:19:39 +01:00
realbigsean e8e860e1f3
make a gossip condition 2022-11-16 10:46:04 -05:00
Enrico Del Fante b737e5370f
fix state upgrade 2022-11-16 12:12:18 +01:00
Alex Stokes a5f8a15819
Clarify how to transition gossip 2022-11-15 10:29:03 -07:00
Hsiao-Wei Wang 11a037fd92
Merge pull request #3089 from terencechain/beacon-block-and-blobs-sidecar-by-root
EIP4844: Add block and sidecar retrival by root
2022-11-16 00:41:58 +08:00
terence tsao bbc3ec02ff Fix typos 2022-11-12 23:36:34 -08:00
George Kadianakis fcac0b5c69 Clarify which functions are public and provided by the KZG library 2022-11-12 01:47:39 +02:00
George Kadianakis ff34006807 Refactor `verify_kzg_proof()` to receive bytes (used in precompile)
This way, client devs don't need to convert to field elements themselves, and the KZG library takes care fo it.
2022-11-12 01:47:39 +02:00
inphi 3df1371897
Merge remote-tracking branch 'origin/dev' into inphi/eip4844-rebase 2022-11-11 17:32:06 -05:00
inphi cd1e1133a5
excess_data_gas uint256 2022-11-11 17:25:06 -05:00
inphi 6327ffa687
rename excess_blobs 2022-11-11 17:24:05 -05:00
Alex Stokes 38669d4b7a
Update specs/eip4844/p2p-interface.md
Co-authored-by: Danny Ryan <dannyjryan@gmail.com>
2022-11-11 11:26:48 -07:00
Alex Stokes 078bba2e3c
clarify deprecation of `beacon_block` gossip topic in 4844 2022-11-11 11:26:45 -07:00
Alex Stokes faf308349e
Merge pull request #3086 from michaelsproul/light-client-p2p-fix
Fix slot checks in light client p2p spec
2022-11-11 11:03:33 -07:00
terence tsao e2a2d68cae Added a comment to support pre-fork-epoch 2022-11-11 09:50:06 -08:00
Michael Sproul 897b97990f
Further clarify light client slot checks 2022-11-11 22:09:33 +11:00
inphi 104cba06a6
replace get_blobs_and_kzg_commitments 2022-11-11 00:21:56 -05:00
inphi bed1df00a2
Remove withdrawal_queue from BeaconState upgrade 2022-11-10 13:57:30 -05:00