base on Ethereum Proof-of-Stake Consensus Specifications # Ethereum Proof-of-Stake Consensus Specifications [![Join the chat at https://discord.gg/qGpsxSA](https://img.shields.io/badge/chat-on%20discord-blue.svg)](https://discord.gg/qGpsxSA) [![nightly-tests](https://github.com/ethereum/consensus-specs/actions/workflows/nightly-tests.yml/badge.svg?branch=master&event=schedule)](https://github.com/ethereum/consensus-specs/actions/workflows/nightly-tests.yml) [![nightly-reftests](https://github.com/ethereum/consensus-specs/actions/workflows/nightly-reftests.yml/badge.svg?branch=master&event=schedule)](https://github.com/ethereum/consensus-specs/actions/workflows/nightly-reftests.yml) This repository hosts the current Ethereum [proof-of-stake](https://ethereum.org/en/developers/docs/consensus-mechanisms/pos/) specifications. Discussions about design rationale and proposed changes can be brought up and discussed as issues. Solidified, agreed-upon changes to the specifications can be made through pull requests. ## Specifications Core specifications for Ethereum proof-of-stake clients can be found in [specs](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 | Links | | ---- | ------------- | ---------- | ---------------------------------------------------------------------------- | | 0 | **Phase0** | `0` | [Specs](specs/phase0), [Tests](tests/core/pyspec/eth2spec/test/phase0) | | 1 | **Altair** | `74240` | [Specs](specs/altair), [Tests](tests/core/pyspec/eth2spec/test/altair) | | 2 | **Bellatrix** | `144896` | [Specs](specs/bellatrix), [Tests](tests/core/pyspec/eth2spec/test/bellatrix) | | 3 | **Capella** | `194048` | [Specs](specs/capella), [Tests](tests/core/pyspec/eth2spec/test/capella) | | 4 | **Deneb** | `269568` | [Specs](specs/deneb), [Tests](tests/core/pyspec/eth2spec/test/deneb) | | 5 | **Electra** | `364032` | [Specs](specs/electra), [Tests](tests/core/pyspec/eth2spec/test/electra) | | 6 | **Fulu** | `411392` | [Specs](specs/fulu), [Tests](tests/core/pyspec/eth2spec/test/fulu) | ### In-development Specifications | Seq. | Code Name | Fork Epoch | Links | | ---- | --------- | ---------- | -------------------------------------------------------------------- | | 7 | **Gloas** | TBD | [Specs](specs/gloas), [Tests](tests/core/pyspec/eth2spec/test/gloas) | ### Accompanying documents - [SimpleSerialize (SSZ) spec](ssz/simple-serialize.md) - [Merkle proof formats](ssz/merkle-proofs.md) - [General test format](tests/formats/README.md) ### External specifications Additional specifications and standards outside of requisite client functionality can be found in the following repositories: - [Beacon APIs](https://github.com/ethereum/beacon-apis) - [Engine APIs](https://github.com/ethereum/execution-apis/tree/main/src/engine) - [Beacon Metrics](https://github.com/ethereum/beacon-metrics) - [Builder Specs](https://github.com/ethereum/builder-specs) ### Reference tests Reference tests built from the executable Python specifications are available in the release assets for each release in this repository. There are also *nightly* reference tests which are built from the latest version of the specifications [here](https://github.com/ethereum/consensus-specs/actions/workflows/nightly-reftests.yml). ## Contributors ### Prerequisites This project uses `uv` ([docs.astral.sh/uv](https://docs.astral.sh/uv/)) to manage its dependencies and virtual environment. `uv` can [download Python](https://docs.astral.sh/uv/guides/install-python/#installing-a-specific-version) for your target platform if one of the required versions (3.10-3.13) is not available natively. `uv` can be installed via curl (recommended over a pip-install as it can self-update and manage Python versions): ```console curl -LsSf https://astral.sh/uv/install.sh | sh ``` ### Installation and usage Clone the repository with: ```bash git clone https://github.com/ethereum/consensus-specs.git ``` Switch to the directory: ```bash cd consensus-specs ``` View the help output: ```bash make help ``` ### Design goals The following are the broad design goals for the Ethereum proof-of-stake consensus specifications: - Minimize complexity, even at the cost of some losses in efficiency. - Remain live through major network partitions and when very large portions of nodes go offline. - Select components that are quantum secure or easily swappable for quantum-secure alternatives. - Utilize crypto and design techniques that allow for a large participation of validators. - Minimize hardware requirements such that a consumer laptop can participate. ### Useful resources - [Design Rationale](https://notes.ethereum.org/s/rkhCgQteN#) - [Phase0 Onboarding Document](https://notes.ethereum.org/s/Bkn3zpwxB) - [Combining GHOST and Casper paper](https://arxiv.org/abs/2003.03052) - [Specifications viewer (mkdocs)](https://ethereum.github.io/consensus-specs/) - [Specifications viewer (jtraglia)](https://jtraglia.github.io/eth-spec-viewer/) - [The Eth2 Book](https://eth2book.info) - [PySpec Tests](tests/core/pyspec/README.md) ", Assign "at most 3 tags" to the expected json: {"id":"9413","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"