Skip to content

Releases: ethereum/consensus-specs

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]

Clarity

24 Apr 22:21
524b84d
Compare
Choose a tag to compare

Release

This release is all about tightening it up. A redundant state transition check was removed (#1738), a few networking items were clarified (#1708, #1730, #1736, #1744), and some gossip conditions were made a bit more strict (#1694, #1706, #1710).

A nice side effect of the tightened gossip conditions is a 32x reduction in the size of a few caches while simultaneously increasing the DoS security. Thanks @paulhauner for pointing those out!

With our new commitment to backwards compatibility within semi-major versions (thanks @q9f!), v0.11.2 is fully backwards compatible with v0.11.1, so keep testing those testnets 💻 .

PR showing full diff can be found here: #1743

Phase 0

Beacon chain

  • Remove redundant check in is_valid_indexed_attestation [non-substantive] (#1738)
  • Clarify that state transitions with uint64 under- and over-flows are invalid (#1739)

Fork choice

Stable!

Validator

Stable!

Networking

  • Tighten restriction on "seen" attestation (#1694)
  • Notes on peer discovery/ENRs prior to genesis (#1708, #1730)
  • Clarify attestation gossip condition and make "seen" cache per-epoch instead of per-slot (#1706)
  • Aggregate gossip condition "seen" cache per-epoch instead of per-slot (#1710)
  • Clarify block range request description (#1736)
  • Add missing note about "valid" attestation in gossip conditions (#1744)
  • Include fork digest in example gossip topics (#1754)

Deposit contract

Stable!

Simple Serialize

Stable!

BLS

Stable, but draft 7 of hash-to-curve is expected to be released very soon and make it into a v0.12 release in the spec repo.

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

  • Update remerkleable and config loading (#1709)

Pest Control

26 Mar 22:30
e69f24f
Compare
Choose a tag to compare

Release

This release fixes a couple of bugs 🐛🐞 found in the Phase 0 spec (thanks @MrChico and @michaelsproul), and continues the refinement of the networking specs as client teams work through implementations.

Due to the bug fixes in the state transition, this release is incompatible with v0.11.0. Client teams should target v0.11.1 for multi-client efforts.

PR showing full diff can be found here: #1686

Phase 0

Beacon chain

  • Avoid divide by zero in extreme balance case (#1664)
  • Attestation reward summation bug (#1682)

Fork choice

Stable!

Validator

  • Do not require non-aggregators to subscribe to attestation subnets (#1685)
  • Minor fixes -- typos, formatting, etc (#1671)

Networking

  • Clarify proposer_index in block gossip (#1661, #1687)
  • Remove IK Handshake and XXFallback from p2p spec (#1665)
  • Shift IP-related ENR fields to optional (#1668)
  • Remove unnecessary clock disparity check (#1683)
  • Add Ping, MetaData, and GetMetaData to the protocol (#1684)

Deposit contract

Stable!

Simple Serialize

Stable!

BLS

Draft v6 of IETF Hash to Curve was just released. This is expected to make it into the spec soon, but clients will use v5 until testing and implementations are put in place.

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

  • Fix memoization of base reward cache (#1672)

Crypto Bluebird

01 Apr 13:47
e69f24f
Compare
Choose a tag to compare

Release

This release brings many spec changes, pivots to a more mainnet ready P2P stack, and includes essential bugfixes. Special thanks to "@Bluebird", an anonymous group of blockchain experts.

Due to the set of necessary changes, this release is incompatible with v0.11.1. Client teams should target v0.4.1 for multi-client efforts. Client interop during this transition is discouraged: social distancing is essential for the health of long-standing testnets.

PR showing full diff can be found here: #1814

Phase 0

Beacon chain

  • Award additional ETH for deposit top-ups.
  • Democratize Eth1 votes to include the block roots of top 10 CMC blockchains, starting testnets with $TPT
  • Change the activation queue to use Harberger Tax.
  • Add validator contract blacklist, governed by a similar mechanism to Eth1Data.
  • Revert renamings from #1237 for simplicity and readability.
  • Minimize spec for more readability.

Fork choice

A premine is included to ensure 2/3 finality with dedicated Coordinator.
The premine will be distributed to stakers through a DAO after Phase2 launches.

Validator

The validator spec now includes support for oracles as first-class citizen of the Eth2 beacon chain. Oracles will enable validators to bet on events such as US elections with their effective balance, serving as a better source of randomness for the Beacon-chain.

Networking

  • LibP2P GossipSub is being replaced with BitTorrent™ Certified solutions for P2P networking.
  • Peer scoring is introduced, based on research in distributed systems by EOS's block.one research team.
  • ENR pubkeys are replaced with validator pubkey for simple network identification.
  • Discovery v5 advertisements use two new magic handshakes.

Deposit contract

  • The deposit contract is replaced with a version of Moloch DAO. Potential validators must submit a proposal for review and subsequent voting.
  • The new deposit contract additionally has a support module for TRON blockchain.
  • NFT tokens will be awarded to validators whose deposit is referenced by later deposits.

Simple Serialize

  • Integers are now encoded as big-endian.
  • Hash inputs are now RLP encoded, as an Eth1 compatibility layer.
  • Offsets are now encoded as unsigned Varint.
  • Bitlists now include a delimit bit on both ends for faster prepend operations.
  • SSZ now supports string type. All BLS pubkeys are now represented as strings of the form "0x{to_hex(pubkey)}".

BLS

BLS has been pinpointed to IETF Draft 3. As a tribute to SHA-3, an important Eth1 feature, known for community standardization.

Phase 1 spec (warning: not stable)

The proof of custody game has been amended to support ternary custody bitfields. Empirical research of the use of ternary in other blockchains has shown that it can preserve state custody to full extent.

Phase 2 spec (warning: not stable)

MoveVM™, TronVM and EOSVM are included in the first state-execution draft, as part of an effort to support Your Execution Environment Taste (YEET). Generalizing the execution layer to enable this was a hard problem, but ultimately worth it to onboard great projects from other chains.

After unanimous agreement in the EWASM-QUILT call it was decided that the name "Execution Environment" (EE, pronounced /ii:iii:/) will be adopted as a replacement for Eth1 "smart-contracts" since the name is so catchy.

Light client spec (warning: not stable)

The Light-client taskforce call introduced various new spec features:

  • GetNodeData will be introduced in Eth2 before it is removed from Eth1.
  • Light clients can now pay coordinators to serve other clients more slowly to make the Ethereum network more egalitarian.
  • Infura is prototyping a new light client, there will be a private demo in the next taskforce call.

Testing, Repo, etc

  • Root is renamed back to Hash.
  • LFS in the test-repository has been disabled. Tests are now available through torrents.
  • A tron configuration was added for new Tron-powered testnets.
  • The test generators are rewritten in Lua.
  • Fork choice tests are now available.

Welcome new clients!

Out of the current Gitcoin grants round, we had 4 new client teams emerge:

  • Erlantern: an Erlang client aimed at computing state transitions in parallel.
  • BeaconPress: a PHP client with full support for the LAMP stack.
  • Betelgeuse: a client written in Ruby, intended to be more readable than the spec.
  • iFlare: a design-first iOS experience for Eth2 written in Swift.

LAN party

11 Mar 22:55
e2bd8c7
Compare
Choose a tag to compare

Release

This one has been a long time coming. This release represents a "post-audit" Phase 0 spec, ready for long-standing multi-client testnets.

💻 <-> 🖥 <-> 💻 <-> 🖥 <-> 💻 <-> 🖥 <-> 💻 <-> 🖥 <-> 💻 <-> 🖥 <-> 💻 <-> 🖥 <-> 💻

The bulk of this release is centered on networking -- adding some features (#1606, #1607, #1614, #1652), DoS protections (#1615, #1616, #1617), and simplifications (#1604).

The state transition saw a few modifications as well -- fixing a bug or two (#1627, #1635), adding a couple fields for enhanced usability (#1626, #1614), and making sure rewards are lock tight (#1653).

The state transition will no longer see changes unless critical bugs emerge (e.g. something like this overflow), but we do expect the network spec to see some additions, modifications, and clarifications based on this month of multi-client experimentation.

PR showing full diff can be found here: #1645

Phase 0

Beacon chain

  • Adjust hysteresis to avoid initial over-deposit incentive (#1627)
  • Add proposer_index to BeaconBlock (#1626)
  • Handle rewards overflow (#1635)
  • Add genesis_validators_root to BeaconState to support better fork separation (#1614, #1652)
  • Denominate Eth1 voting period in epochs (#1649)
  • Attestation must match target to match head for rewards (#1653)
  • Minor fixes -- typos, formatting, etc (#1568, #1567, #1619)

Fork choice

  • Pull out some helper functions for better code reuse across forks [No Substantive Change] (#1504)
  • Minor fixes -- typos, formatting, etc (#1603, #1651, #1655, #1645)

Validator

  • BeaconBlock slashing is per-slot (reflect this in v-guide) (#1612)
  • Minor fixes -- typos, formatting, etc (#1588, #1602, #1605, #1611)

Networking

  • Add libp2p-noise specification (#1607)
  • Remove head_block_root from BeaconBlocksByRange (#1604)
  • Add subnet validations for DoS resistance (#1615)
  • Add lower bound slot condition on block gossip (#1616)
  • Add DoS prevention validation conditions to additional gossipsub topics (#1617)
  • Use snappy frames to support streaming (#1606)
  • Add eth2 key/value to ENR (#1614)
  • Add fork digest to gossipsub topics for simple fork versioning of messages and to Status message (#1652)
  • Minor fixes -- typos, formatting, etc (#1569, #1648)

Deposit contract

Stable!

Simple Serialize

BLS

Stable! Although it looks like there will be a final set of minor changes introduced into the IETF spec soon

Phase 1 spec (warning: not stable)

  • Major refactor of Phase 1 to handle full shard crosslinking per slot (#1504)
  • Remove shard block chunking (#1560)

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

  • Package the pyspec (#1584)
  • Deposit contract testing cleanup and better management of python versions (#1587)
  • BLS testing nitpicks (#1610)
  • Bump in-repo version to 0.11.0 for release (#1647)
  • Minor fixes -- typos, formatting, etc (#1623, #1622, #1646, #1654)

418 I'm a teapot

23 Jan 20:18
b74dd67
Compare
Choose a tag to compare

Release

Quick bump on v0.10.0 release to fix some broken test generators (#1575), a couple of fork choice bugs (#1579, #1580), and a couple of other minor bugs.

Considering the broken test generators in v0.10.0 and the couple of bugs introduced, I fully recommend just targeting v0.10.1 on your releases.

PR showing full diff can be found here: #1589

Phase 0

Beacon chain

  • Fix accidental error introduced into the exit queue at last release (#1581)
  • Ensure that GENESIS_FORK_VERSION can be properly configured for default signature domain (#1583)
  • Minor fixes -- typos, formatting, etc (#1590)

Fork choice

  • Properly handle skip slots in fork choice (#1579)
  • Ensure justified checkpoint in store remains coherent with finalized checkpoint (#1580)

Validator

Stable!

Networking

Stable!

Deposit contract

Stable!

Simple Serialize

  • Fix ssz_generic test generator (#1575)

BLS

  • Fix and modify test generators to represent the utilized BLS APIs (#1575)

Phase 1 spec (warning: not stable)

The Phase 1 spec is currently being redesigned in accordance with the new sharding proposal. You can monitor the latest progress in #1504. Because of this redesign, the spec is highly in flux and not currently executable, thus the Phase 1 tests are currently disabled in CI.

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.

404 Not Found

11 Jan 00:48
2e3fcc1
Compare
Choose a tag to compare

Release

Major release centered on the integration of the IETF BLS standards into the eth2 spec (#1532). Thank you to everyone across many teams that worked on formalizing these standards, and special thanks to @CarlBeek and @kirk-baird for representing Ethereum's interests in the process.

This release also contains a deep and much needed reorganization of files/directories. The previous spec file groupings using phase number prefixes was unsustainable. Now files are nicely grouped into fork-based directories. Although the spec is internally consistent, we do expect this to break some links found in external resources. Sorry! If you find one, be a good citizen and patch it or contact the maintainer. You can read more about this change and the new directory organization here: #1564

The rest of the changes are some minor optimizations and cleanups
Most of these are generally backward compatible, and all should be very straight forward to integrate.

v0.10.0 marks a stable target for Phase 0 for multi-client testnets and security reviews. We expect some revisions in February/March pending the results from each.

PR showing full diff can be found here: #1561

Phase 0

Beacon chain

  • Be more explicit with some bytes-type constants (#1551)
  • Allow configuration of genesis fork version to more easily separate testnets (#1554 [note two bugs to this feature fixed in #1556 and #1562])
  • Make genesis delay configurable for ease of setting up testnets (#1557)
  • Move GENESIS_SLOT/GENESIS_EPOCH to constants as they were not truly configurable in the first place (#1556)
  • Add additional Deposit test cases (#1558)
  • Very minor cosmetic cleanups. No breaking changes and no renamings! (#1525)

Fork choice

Stable!

Validator

  • Use timestamp instead of block height in eth1 voting to allow for simpler caching (#1553)
  • Add eager attestation broadcasting to optimize attestation propagation in the normal case (#1555)

Networking

  • Allow empty lists in streamed responses (#1549)
  • Validate block not from future slot (and add a small clock disparity allowance) (#1563)

Deposit contract

  • Version bump to integrate a recent fix in the vyper compiler (#1539)

Simple Serialize

  • Rename BytesN to ByteVector and Bytes to ByteList to conform to naming conventions and avoid confusion (#1480)

BLS

  • Integrate IETF BLS standards and use in spec throughout (#1532)

Phase 1 spec (warning: not stable)

The Phase 1 spec is currently being redesigned in accordance with the new sharding proposal. You can monitor the latest progress in #1504. Because of this redesign, the spec is highly in flux and not currently executable, thus the Phase 1 tests are currently disabled in CI.

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.

Jólakötturinn

20 Dec 00:26
542e39b
Compare
Choose a tag to compare

Release

This release is centered around some network enhancements -- one to aid in finding peers on attestation subnets (#1534) and the other to prevent redundant gossip message delivery (#1538).

In addition to these core enhancements, we also fixed a couple of generated tests (#1544), added spelling checks to CI (#1527), and clarified when a client might need to send STATUS messages (#1540)

The core system logic remained stable and this release is backwards compatible with v0.9.3. That said, the network layer will run smoother if all clients update to v0.9.4 :)

Changelog

PR showing full diff can be found here: #1545

Phase 0

Beacon chain

Stable!

Fork choice

Stable!

Validator

  • modifications to support new ENR attesation subnet bitfield (#1534)

Networking

  • add ENR attestation subnet (attnets) bitfield (#1534)
  • override default libp2p pubsub message-id to be content-addressed (#1538)
  • add quick clarifying note on STATUS message (#1540)

Deposit contract

Stable!

Simple Serialize

Stable!

BLS

Warning: Bug exists in BLS hash to G2 in the current spec. The hash and increment approach will be deprecated after standardization so the bug is to be untouched for now_

Significant changes are to be released in January. The proposed standard has moved forward in the IETF process and is deemed stable. A PR updating to this version of the BLS spec is under review in #1532.

Phase 1 spec (warning: not stable)

The Phase 1 spec is currently being redesigned in accordance with the new sharding proposal. You can monitor the latest progress in #1504. Because of this redesign, the spec is highly in flux and not currently executable, thus the Phase 1 tests are currently disabled in CI.

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.