Skip to content

Releases: ethereum/consensus-specs

Half of 'em just look like dots

22 Mar 22:04
c284078
Compare
Choose a tag to compare
Pre-release

Release

v1.1.0-alpha.2 is a small iteration on last week's alpha.1.

This release fixes some issues in the test generators and makes some minor, non-substantive cleanups.

PR showing full diff can be found here: #2262

Phase 0

Beacon chain

Stable!

Note: process_justification_and_finalization was refactored to utilize a weigh_justification_and_finalization helper to facilitate cleaner spec writing in subsequent phases (#2258)

Altair

Beacon chain

  • Utilize weigh_justification_and_finalization to reduce code duplication (#2258)
  • Rename in-state sync sub-committee to avoid name collision with aggregation sub-committees (#2255)

Validator

Ensure Altair validator guide is executable (#2256)

Testing, Repo, etc

  • Fix Altair test fork version generator issue (#2259)
  • Fix test generator file output mix-ups (#2261)

Stargazer

17 Mar 03:16
3ce090f
Compare
Choose a tag to compare
Stargazer Pre-release
Pre-release

Release

v1.1.0-alpha.1 is the first pre-release for the upcoming Altair upgrade.

Although all core features are in place, we expect some iteration as client teams begin to implement.

PR showing full diff can be found here: #2230

Phase 0

Beacon chain

Stable with respect to features!

Note: process_final_updates was removed and replaced with sub-functions mapping to the different components of prior functionality. This non-substantive change facilitates cleaner spec writing in subsequent phases.

Networking

Stable other than one minor gossip validation added -- require gossip blocks to have a higher slot than their parent (#2196).

Weak subjectivity

Updated with extended weak subjectivity period calculations and sample values.

Altair

Beacon chain

All features for Altair upgrade in place. Features include:

  • Sync committees to support light clients
  • Incentive accounting reform to reduce spec complexity
  • Modified attestation rewards to increase incentive compatibility
  • Per validator inactivity leak
  • Penalty parameter updates toward maximally punitive parameters

Note: No major additions nor subtractions to this feature-set are expected unless unless unexpected security or engineering issues are uncovered. That said, minor adjustments based on engineering feedback should be expected.

Fork

Provides a function for upgrading the Phase 0 BeaconState to an Altair BeaconState.

ALTAIR_FORK_SLOT TBD.

Validator

Core Altair features in place, including:

  • Including sync committee aggregates in beacon blocks
  • Handling new validator sync committee assignments

Networking

Core Altair features in place, including:

  • Upgraded beacon_block gossip topic for new Altair type
  • Added gossip topics and validations for sync committee messages
  • Upgrade path for Req/Resp domain to handle cross-fork types

Note: Some of the particulars of the sync aggregation protocol might still be refined before the main release of v1.1.0 specs.

Sync protocol

Describes a minimal version of the light client sync protocol that leverages the new Altair sync committees.

This protocol is illustrative of how to build light clients using this new feature, but this should not be considered exhaustive with respect to viable designs.

Phase 1 (sharding)

Sharding spec is considered unstable and should only be used for educational purposes. Expect deep changes.

Testing, Repo, etc

  • Add Altair test vectors along with new fork function unit tests (#2220)
  • Compress tests with snappy, remove YAML duplicates (#2097)
  • Bump py_ecc to v5.2.0 (#2223)
  • Disable phase 1 tests from CI and generators

Contractual Control

24 Feb 17:44
d5d0d75
Compare
Choose a tag to compare

Release

v1.0.1 release adds support for the 0x01 withdrawal prefix -- ETH1_ADDRESS_WITHDRAWAL_PREFIX -- enabling a new withdrawal credential type that is a 20-byte eth1 address.

Note: This is entirely non-substantive with respect to eth2 consensus and clients today. Instead (similar to the 0x00 prefix) it is a commitment to support withdrawals of a particular type in the future. A few additional deposit consensus tests were added to ensure clients can process the 0x01 prefix as well as "malformed" prefixes/credentials.

PR showing full diff can be found here: #2211

Feature original spec'd and discussed in this PR then cherry-picked to master: #2149

Cosmic Egg

04 Nov 15:43
579da6d
Compare
Choose a tag to compare

Release

v1.0.0 release containing Phase 0 mainnet configuration, BLSv4, discv5.1, iterative improvements to p2p spec, and some additional consensus tests.

A huge thank you to the countless researchers, engineers, spec contributors, and community members that put this together 🙌🙏🦾

PR showing full diff can be found here: #2082

Phase 0

Beacon chain

  • Double eth1data follow distance and voting period (#2093)
  • [non-substantive] Make state_transition not return post-state (#2104)

Fork choice

  • [non-substantive] Remove redundant slot check (#2092)

Validator

  • [non-substantive] Note about slashing and exit operation interactions (#2103)
  • [non-substantive] Add some additional best practices recommendations (#2107)

Networking

  • Introduce StrictNoSign signature policy for gossipsub (#2060)
  • Bump discovery from discv5 to discv5.1 (#2090)
  • Gossipsub message-id uses 20 bytes with a flag bit for valid/invalid snappy compression (#2089)
  • Note gossipsub v1.1 scoring params WIP (#2091)
  • Aggregate attestation slot and target must consistent in gossip validations (#2115)
  • Increase gossipsub mesh degree (#2121)

Weak subjectivity

Stable!

Deposit contract

Stable!

Simple Serialize

Stable!

BLS

  • Bump IETF BLS standard version to 04 (#2080)

Phase 1 spec (warning: not stable)

Continued work on refining Phase 1 specs. Thank you to the many contributors :)

Light client spec (warning: not stable)

Light client sync spec is under redesign in the context of the phase 1 redesign. The current light client spec can be used for general educational purposes to understand the approach we are considering, but will see heavy redesign after phase 1 stabilizes.

Testing, Repo, etc

v1.0.0 release candidate 0

08 Oct 15:55
a64ae81
Compare
Choose a tag to compare
Pre-release

Release

v1.0.0-rc.0 is a release candidate based on the v1.0-candidate branch/PR in preparation for the v1.0.0 release. Although it is intended to be compatible with the eventual v1.0.0, there is a chance that small incompatibilities are introduced in final configuration selection or if any unexpected issues arise.

The highlights: BLSv4 is used in test vectors (#2080, #2087), gossipsub message-id is made more secure (#2089), discv5 is bumped to v5.1 (#2090), and some additional consensus tests have been added (#2083).

Note: Some mainnet configuration parameters have been changed in v1.0.0-rc.0. You must use the updated config to pass consensus tests.

Please create a v1.0.0-rc.0 compliant branch as soon as possible and report back on test vector compliance. Thank you!

Known pending changes for final v1.0.0:

  • add mainnet MIN_GENESIS_TIME
  • add mainnet DEPOSIT_CONTRACT_ADDRESS

Sindhudurg

18 Sep 15:39
7748c70
Compare
Choose a tag to compare

Release

v0.12.3 release integrates a number of clarifications and enhancements to the p2p spec, provides a new chain configuration param (PROPORTIONAL_SLASHING_MULTIPLIER) for the slashing penalty factor, adds a new "weak subjectivity guide" [thanks @adiasg!], and officially integrates the Solidity final version of the deposit contract (already used on Medalla) [thanks @axic!].

Phase 1 continues to be in active development (thank you our many contributors!) with much focus recently on a rewards structural refactor in preparation for the additional rewards/penalties in phase 1 (e.g. crosslinking, custody). Phase 1 test vectors included for the first time with this release, but still expect breaking changes to the specs.

Importantly, Phase 0 of v0.12.3 is 100% backwards compatible with v0.12.x as long as PROPORTIONAL_SLASHING_MULTIPLIER is configured to 3 (which it is for existing testnets). That said, we encourage client teams to patch as much of v0.12.3 as possible prior to the launch of Spadina. At the bare minimum, please update the gossipsub message-id ASAP (#2044)!

PR showing full diff can be found here: #2057

Phase 0

Beacon chain

  • Add configuration -- PROPORTIONAL_SLASHING_MULTIPLIER -- for slashing multiplier (#2034)
  • [non-substantive] Add clarifying comment for genesis skip conditions (#1999)

Fork choice

  • [non-substantive] Pass anchor_block to get_forkchoice_store (#2061)

Validator

  • [non-substantive] Clarify what state is for block proposals in validator guide (#2022)

Networking

  • Add self-consistency checks to attestation gossip validation (#2001)
  • Add two more simple gossip validations (#2030)
  • Use raw SHA256 as message-id and reduce size to 8 bytes (#2044)

Weak subjectivity

Added minimum guide for handling weak subjectivity in eth2 (#2073). Expect this to see substantial changes and expansions in the coming months.

Deposit contract

  • Port Solidity deposit contract to spec repo (#2019)
  • Add instructions for verifying bytecode (#2056)

Simple Serialize

  • [non-substantive] Clarify offsets serialization (#2043)

BLS

  • [non-substantive] Bump IETF BLS standard version to -03 (#2051)

Phase 1 spec (warning: not stable)

Continued work on refining Phase 1 specs. Thank you to the many contributors :)

Light client spec (warning: not stable)

Light client sync spec is under redesign in the context of the phase 1 redesign. The current light client spec can be used for general educational purposes to understand the approach we are considering, but will see heavy redesign after phase 1 stabilizes.

Testing, Repo, etc

  • Enable Milagro BLS in CI (#1989)
  • Add a few more proposer slashing tests (#2047)
  • Enable test generation for phase1 (#1957)

Pisanello

24 Jul 19:09
447b74d
Compare
Choose a tag to compare

Release

In preparation for Medalla, v0.12.2 release integrates a number of clarifications and enhancements to the p2p spec, provides new chain configuration params for the source chain for deposits, and cleans up a few things in the fork choice.

Phase 1 continues to be in active development (thank you our many contributors!) but is not quite ready for the release of test vectors. We anticipate these to be released in the next couple of weeks.

Importantly, Phase 0 of v0.12.2 is 100% backwards compatible with v0.12.1. That said, we encourage client teams to patch as much of v0.12.2 as possible prior to the launch of Medalla. If anything, please update the gossipsub params in a minor release!

Note: Finality test generators have been added (#1991). These have mistakenly been left out of test generator releases until now and should be added to client code bases.

PR showing full diff can be found here: #1955

Phase 0

Beacon chain

  • Add DEPOSIT_CHAIN_ID and DEPOSIT_NETWORK_ID to configuration (#1988)
  • [non-substantive] Compute committee count per slot is epoch based and rewrite gossip condition to be less stateful (#1904)
  • [non-substantive] Apply strict uint64 casting (#1746, #1935)
  • [non-substantive] Separate config files by phases (#1882)
  • [non-substantive] Reorder conditions to validator target_epoch before its use (#1996)

Fork choice

  • [bug-fix] Fix edgecase in updating target checkpoint state (#1886)
  • [non-substantive] Use parent_root in ancestor check to add mutations after assertions (#1884)
  • [non-substantive] Avoid redundant call to get_ancestor (#1880)

Validator

  • [non-substantive] Fix param in epoch_boundary_block_root calculation (#1962)

Networking

  • Add queuing possibility to p2p messages in gossip (#1956)
  • Update gossipsub config params and add FAQ for explanation of choices (#1958)
  • Remove ssz encoding from req/resp (#1982)
  • Add gossip conditions that block must have finalized checkpoint as ancestor (#1985)
  • [non-substantive] p2p formatting RP (#1953)

Deposit contract

For testnets and mainnet, we are using a new solidity version of the deposit contract written by @axic. This is being integrated into the spec's repo here, and will be released in an official release soon.

Simple Serialize

  • [non-substantive] Clarify SSZ Bitlist and Bitvector types (#1912)
  • [non-substantive] Clarify wording of pack, pack_bits and merkleize (#1934)

BLS

Stable!

Phase 1 spec (warning: not stable)

Continued work on refining Phase 1 specs. Thank you to the many contributors :)

Light client spec (warning: not stable)

Light client sync spec is under redesign in the context of the phase 1 redesign. The current light client spec can be used for general educational purposes to understand the approach we are considering, but will see heavy redesign after phase 1 stabilizes.

Testing, Repo, etc

  • Add AttesterSlashing high index out of bounds test cases (#1926)
  • Add unit testing for validator guide, not for test generators (#1896)
  • Rename aggregate_na_pubkeys to aggregate_na_signatures (#1976)
  • Upgrade remerkleable to 0.1.17 (#1940)
  • Enable Milagro-bls as default for most test generators (other than bls tests) (#1993)
  • Add finality tests to generators (#1991)
  • Add proposer self-slashing test case (#1997)

v0.12 testnet any time now

02 Jun 23:45
5258266
Compare
Choose a tag to compare

Release

Quick bump to v0.12 before any testnets are released containing a few clarifying comments (#1859, #1864, #1867) and a breaking change to the way genesis time is calculated (#1866). Also fixes a couple of invalid, unbound SSZ lists in the p2p spec (#1837).

Warning: This is ever so slightly breaking wrt v0.12.0 but we kept the same semi-major version because no public nets are yet released. v0.12.1 is mandatory for v0.12 conformance.

PR showing full diff can be found here: #1868

Phase 0

Beacon chain

  • Modify genesis time to be more tunable (#1866)

Fork choice

  • [non-substantive] Update fork choice comments for clarity (#1859, #1864)

Validator

Stable!

Networking

  • Fix invalid unbound SSZ list types (#1837)
  • [non-substantive] Clarify genesis finalized checkpoint root (#1867)

Deposit contract

Stable!

Simple Serialize

Stable!

BLS

Stable!

Phase 1 spec (warning: not stable)

Continued work on refining Phase 1 specs

Warning The Custody Game challenge-response is currently missing, but will be reintroduced soon when the core Phase 1 shard chain design stabilizes. Client teams looking to prototype Phase 1 should first focus on shard data mechanics, while stubbing out custody game logic.

Light client spec (warning: not stable)

Light client sync spec is under redesign in the context of the phase 1 redesign. The current light client spec can be used for general educational purposes to understand the approach we are considering, but will see heavy redesign after phase 1 stabilizes.

Testing, Repo, etc

Stable!

Quarantine Haircut

20 May 21:36
077577a
Compare
Choose a tag to compare

Release

This release introduces breaking changes following the release of IETF hash-to-curve draft 7 and incorporation of v0.11 testnet learnings.

Other than the new BLS spec, much of the substance is handling edge cases in the network spec and refactoring rewards/penalties for enhanced testing. Although some of these are breaking changes, the scope of changes continues to narrow with the expectation of only introducing security critical breaking changes from here on out.

PR showing full diff can be found here: #1829

Phase 0

Beacon chain

  • Adjust INACTIVITY_PENALTY_QUOTIENT to accurately reflect intention (#1712)
  • Rename SigningRoot to SigningData (#1740)
  • Remove PERSISTENT_ COMMITTEE_PERIOD in favor of SHARD_COMMITTEE_PERIOD (#1783)
  • Disallow empty aggregation bits in attestations (#1780)
  • Change MAX_ATTESTER_SLASHINGS from 1 to 2 (#1794)
  • Ensure balances remain unchanged for optimal validators during inactivity leak (#1830)
  • Non-substantive:
    • Fix some ValidatorIndex type casting (#1714)
    • Minor typing fixes (#1731)
    • Clarify eth1 timestamp can be less than genesis time (#1756)
    • Clarify that eth1 blocks must be deep enough in chain for consideration for genesis (#1834)
    • Structure rewards/penalties to allow for more granular testing (#1747, #1826)

Fork choice

  • Add FFG-LMD vote consistency checks (#1742)
  • [Non-substantive] Remove redundant check in validate_on_attestation (#1755)

Validator

  • Use all attestation subnets in Phase 0 (#1804)
  • Ensure eth1data voting can't move to past eth1data states (#1836)
  • [Non-substantive] Minor cleanups and validator sanity tests (#1745)

Networking

  • Require "seen" aggregates to be valid to bound cache (#1749)
  • Clarify beacon committee assignments are not added to attnets ENR entry (#1775)
  • Remove interop from p2p spec (#1767)
  • Bump gossipsub to v1.1 and note extended validator enums for gossip conditions (#1796, #1828)
  • Clarify blocks in BlocksByRange must be from a single chain (#1795)
  • Req/Resp sizes constrained by SSZ bounds (#1800)
  • Loosen restrictions for aggregate propagation to not require aggregator in bitfield (#1801)
  • Use all attestation subnets in Phase 0 (#1804)
  • Restrict and clarify BlocksByRange request (#1835)

Deposit contract

Stable!

Simple Serialize

  • Fix bitfield_bytes type error (#1806)

BLS

  • Update BLS to use IETF bls draft 2 with hash-to-curve draft 7 (#1799)

Phase 1 spec (warning: not stable)

Continued work on refining Phase 1 specs

Warning The Custody Game challenge-response is currently missing, but will be reintroduced soon when the core Phase 1 shard chain design stabilizes. Client teams looking to prototype Phase 1 should first focus on shard data mechanics, while stubbing out custody game logic.

Light client spec (warning: not stable)

Light client sync spec is under redesign in the context of the phase 1 redesign. The current light client spec can be used for general educational purposes to understand the approach we are considering, but will see heavy redesign after phase 1 stabilizes.

Testing, Repo, etc

  • Move sanity dir under phase_0 (#1769)
  • Add new rewards test format (#1747, #1826)
  • Test double proposer slashings and exits (#1781)
  • Update to remerkleable v0.1.16 (#1833)

Progress without progress

18 May 18:25
feb910e
Compare
Choose a tag to compare

Release

Patch to critical state transition bug found by @daejunpark during formal verification work under @runtimeverification. Thank you!

There was an untested path that allowed for the proposal of multiple (unbounded!) blocks on the same slot in the same chain. This was not the intention and, because it was untested and unclear, was implemented differently across clients. This has been patched in all affected clients currently on public testnets.

PR showing full diff can be found here: #1818

Phase 0

Beacon chain

  • Disallow multiple block proposals for same slot within a single chain [#1818]

Fork choice

Stable!

Validator

Stable!

Networking

Stable!

Deposit contract

Stable!

Simple Serialize

Stable!

BLS

Stable!

Phase 1 spec (warning: not stable)

Stable!

Light client spec (warning: not stable)

Stable!

Testing, Repo, etc

  • Refactor some testing to be tighter about the application of blocks upon states at the block.slot [#1818]