Releases: ethereum/consensus-specs
Cosmic Egg
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
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
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
toget_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
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
Pisanello
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
andDEPOSIT_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
andBitvector
types (#1912) - [non-substantive] Clarify wording of
pack
,pack_bits
andmerkleize
(#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
toaggregate_na_signatures
(#1976) - Upgrade
remerkleable
to0.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
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
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
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
toSigningData
(#1740) - Remove
PERSISTENT_ COMMITTEE_PERIOD
in favor ofSHARD_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)
- Fix some
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
Progress without progress
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
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
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
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
, andGetMetaData
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
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 toHash
.- 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.