86e15764ad
This commit changes the public API of the KZG library to the following high-level API: ``` - verify_kzg_proof() - compute_aggregate_kzg_proof() - verify_aggregate_kzg_proof() - blob_to_kzg_commitment() ``` compared to the previous much more low-level API: ``` - compute_powers() - matrix_lincomb() - lincomb() - bytes_to_bls_field() - evaluate_polynomial_in_evaluation_form() - verify_kzg_proof() - compute_kzg_proof() ``` This means that all the cryptographic logic (including Fiat-Shamir) is now isolated and hidden in the KZG library and the `validator.md` file ends up being significantly simplified, only calling high-level KZG functions. Some additional things that this commit does: - Moves all EIP4844 cryptography into polynomial-commitments.md - Improves the Fiat-Shamir stack by removing the need for SSZ and by introducing simple domain separators Co-authored-by: Kevaundray Wedderburn <kevtheappdev@gmail.com> Co-authored-by: Hsiao-Wei Wang <hsiaowei.eth@gmail.com> Co-authored-by: Dankrad Feist <mail@dankradfeist.de> |
||
---|---|---|
.circleci | ||
configs | ||
fork_choice | ||
presets | ||
solidity_deposit_contract | ||
specs | ||
ssz | ||
sync | ||
tests | ||
.codespell-whitelist | ||
.gitattributes | ||
.gitignore | ||
.gitmodules | ||
LICENSE | ||
Makefile | ||
README.md | ||
SECURITY.md | ||
linter.ini | ||
setup.py |
README.md
Ethereum Proof-of-Stake Consensus Specifications
To learn more about proof-of-stake and sharding, see the PoS documentation, sharding documentation and the research compendium.
This repository hosts the current Ethereum proof-of-stake specifications. Discussions about design rationale and proposed changes can be brought up and discussed as issues. Solidified, agreed-upon changes to the spec can be made through pull requests.
Specs
Core specifications for Ethereum proof-of-stake clients can be found in specs. These are divided into features. Features are researched and developed in parallel, and then consolidated into sequential upgrades when ready.
Stable Specifications
Seq. | Code Name | Fork Epoch | Specs |
---|---|---|---|
0 | Phase0 | 0 |
|
1 | Altair | 74240 |
|
2 | Bellatrix ("The Merge") |
144896 |
In-development Specifications
Code Name or Topic | Specs | Notes |
---|---|---|
Capella (tentative) |
|
|
EIP4844 (tentative) | ||
Sharding (outdated) |
|
|
Custody Game (outdated) |
|
Dependent on sharding |
Data Availability Sampling (outdated) |
|
Accompanying documents can be found in specs and include:
Additional specifications for client implementers
Additional specifications and standards outside of requisite client functionality can be found in the following repos:
Design goals
The following are the broad design goals for the Ethereum proof-of-stake consensus specifications:
- to minimize complexity, even at the cost of some losses in efficiency
- to remain live through major network partitions and when very large portions of nodes go offline
- to select all components such that they are either quantum secure or can be easily swapped out for quantum secure counterparts when available
- to utilize crypto and design techniques that allow for a large participation of validators in total and per unit time
- to allow for a typical consumer laptop with
O(C)
resources to process/validateO(1)
shards (including any system level validation such as the beacon chain)
Useful external resources
For spec contributors
Documentation on the different components used during spec writing can be found here:
Consensus spec tests
Conformance tests built from the executable python spec are available in the Ethereum Proof-of-Stake Consensus Spec Tests repo. Compressed tarballs are available in releases.