Skip to content

Releases: ethereum/consensus-specs

Tonkatsu

28 Oct 14:21
0642ff2
Compare
Choose a tag to compare

Release

Simple, yet delicious.

This release is primarily focused on simplifications to Phase 0 (#1329, #1428, #1443) in an effort to create an unbiased slate for the coming Phase 1 specifications. Specifically this cleans up Phase 0 in a minimally invasive way to ensure that the new sharding proposal can easily be built on top.

In addition to these state transition changes, a simple attestation aggregation strategy (#1440) has been added the validator and networking spec. This strategy specifies gossipsub subnets on which singular attestations are sent, and specifies which set of validators are selected as "aggregators" to broadcast to a global channel.

There has been a lot of work done on the Phase 1 and light client specs, but these specs are considered highly unstable and will be subject to large/breaking changes in the coming weeks. Currently, the Phase 1 tests have been removed from CI as they cannot be run in their current form.

Changelog

PR showing full diff can be found here: #1453

Phase 0

Beacon chain

  • feature
    • alter beacon proposer selection logic (#1413)
    • add seed domains (#1415)
    • fix delay-based attestation inclusion reward (#1434)
    • use eth1_block_hash for initial randao_mix (#1447)
  • simplifications
    • remove active active_index_roots and compact_committees_roots from phase 0 (#1329)
    • remove shards/crosslinks from phase 0 (#1428)
    • remove transfers from phase 0 (#1443)

Fork choice

  • verify state root in fork choice tests and other minor fixes (#1454)

Validator

Networking

  • add simple attestation aggregation strategy (#1440)

Deposit contract

The Deposit Contract has undergone a number of small alterations (#1362) as well as formal verification since the latest release. It is stable and ready for production.

Simple Serialize

  • define summaries and expansions (#1360)
  • add clarifications on deserialization (#1381)

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 still expected as we standardize BLS12-381 across blockchains

Phase 1 spec (warning: not stable)

The Phase 1 spec is currently being redesigned in accordance with the new sharding proposal. 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)

While the core of the light client spec was put in place, this hinges upon components of the Phase 1 spec which is currently under 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.

Chunks

24 Oct 11:31
88b7215
Compare
Choose a tag to compare

Release

Minor release containing some enhanced test coverage and some updates to the network spec.

This release contains no substantive spec changes wrt the state transition, fork choice, validator guide, and SSZ.

Changelog

A full diff can be found in PR #1444

Networking

  • network spec update from discussions had at interop -- primarily updates to sync with some additional general clarifications (#1404)

Testing

  • add tests to enhance coverage based upon consensus errors found at interop (#1411)
  • add tests base on K-spec coverage analysis (#1442)
  • reduce BLS test name lengths (#1405)

chitchat

23 Aug 16:49
db34ee1
Compare
Choose a tag to compare

Release

Minor release prior to initial client interop efforts. As discussed on the latest eth2.0 implementers call this is the selected spec release target for client interop work going on in September.

This release contains no substantive spec changes wrt the state transition, fork choice, validator guide, and SSZ. It does contain some test-coverage fixes, spec clarifications, and a port of the updated network spec from dev.

Changelog

A full diff can be found in PR #1375

Non-substantive

  • clarify SSZ default values (#1346)

Networking

  • network spec for interop and mainnet (#1338)
  • minor network spec corrections/clarificatons (#1350)
  • clarify note on aggregation during interop (#1377)
  • doc standardization (#1334)

Testing

  • make nil-count randomization work for lists (#1347)
  • fix ssz-generic bitvector tests (#1374)

Prototypical Testing

04 Aug 18:58
3e45bf4
Compare
Choose a tag to compare

Release

Minor release to that handles a few critical bugs found by client implementers along with a handful of minor cleanups, documentation fixes, etc.

Major work (#1320) was done by @protolambda to clean up test generation and organization based on the feedback of client teams. The schema for the tests themselves stays the same, but the test inputs and outputs are segmented into separate files, in a directory per test case with both .ssz and .yaml formats available. This enables readable yaml diffs between pre and post state yaml, while ssz is there for fast and easy test loading. Tests are organized in a more hierarchical directory structure starting with <config name> and with the config.yaml copied into the test repo. There was a lot addressed in this PR, please see #1320 for detailed explanation.

Another notable fix (#1300) was a bugfix related to BLS domain format. With the freeze, the spec changed domains to be defined as bytes8 rather than uint64. Previously this uint64 had to be changed back into bytes in the BLS libraries, including the one used for the testing infrastructure (py_ecc). This conversion was still in big-endian, as opposed to the spec'd little-endian behavior.

Changelog

A full diff can be found in PR #1333

Bugs

  • correctly use bytes8 domain in bls in test generation (#1300)
  • fix start shard for compact committees root (#1319)
  • properly check attestation bitlist lengths (#1317)
  • ignore latest messages in fork choice prior to latest justified (#1306)

Non-substantive

  • test generation refactor (#1320)
  • clarify illegal SSZ types [non-substantive for core specs] (#1283)
  • clarify length bit for Bitlist merklization (#1314)
  • var mismatch in validator guide, MAX_INDICES_PER_ATTESTATION -> MAX_VALIDATORS_PER_COMMITTEE (#1308)

Phase 1

Phase 1 is in heavy development. The focus has been on cleaning up the shard chain and light client specs to provide a more stable spec for prototyping. Keep an eye on the dev branch and related issues for phase 1 conversations and PRs.

Frozen Yogurt

15 Jul 17:22
452ecf8
Compare
Choose a tag to compare

Release

Minor release to sweeten the spec freeze that handles a few critical bugs found by client implementers when working through the v0.8.0 test vectors along with a handful of minor cleanups, documentation fixes, etc.

Changelog

A full diff can be found in PR #1295

Bugs

  • fix off-by-one bug in randomness seed lookahead (#1296)
  • call pack when merkeizing bitlist/vector (#1271)
  • corrections to merkleization (#1292)

Non-substantive

  • define bitlist/vector wrt bytes, not bigints (#1267)
  • avoid overflow in slashing penalty calculation (#1286)
  • clarify zero hash representation using Bytes32 (#1297)
  • update test formats list in readme (#1265)
  • fix test generator make command in readme (#1268)
  • minor fix to typing (#1263)
  • minor fix to headers/toc (#1285)
  • minor cosmetic fixes (#1275)

SubZero

01 Jul 04:44
8d324b7
Compare
Choose a tag to compare

Release

This release marks the end-of-june phase 0 spec freeze ❄️. v0.8 is to serve as a stable target as implementers work toward multi-client testnets in addition to on-going efforts in formal verification, fuzzing, and audits.

Thank you to everyone who has put it so much incredible work to get to this point :)

Changelog

PR showing full diff can be found here: #1242

Phase 0

Beacon chain

  • features
    • minor modification to inclusion rewards and adjust reward factor (#1159)
    • increase historical vectors length and cleanups (#1196)
    • introduce Checkpoint type (#1210)
    • slashing penalty calculation change to prevent gaming (#1217)
    • add compact committee roots for light client support (#1219, #1247)
  • simplifications
    • cleanup containers (#1156)
    • remove sort from get_attesting_indices and instead return set (#1225)
    • cleanup how genesis is calculated and triggered (#1202)
    • cleanup helpers grouping, consistency in naming, comments, etc (#1237, #1241)
    • add bls domain type (#1246)
    • basket of minor cleanups (#1251)
  • bugs
    • critical Transfer bug (#1220)
    • fix genesis effective balance in corner case (#1248)
    • fix scaling for inclusion_reward (#1257)
    • minor bugs related to ordering/typos/var-mismatch/etc ()
  • misc

Fork choice

  • make fork choice executable (#1185)
  • modify fork choice to use epochs properly (#1198, #1250)

Validator

  • harden eth1.0 voting against stale block attacks (#1218)
  • make bulk of guide executable (#1236)
  • minor update to use checkpoints (#1253)

Networking

  • no changes

Deposit contract

  • make deposit_root a valid SSZ hash_tree_root by mixing in length (#1202)
  • bump Vyper version to v0.1.0b10 (#1260)

Simple Serialize

  • add note on default zero-values (#1208)
  • List type requires max length (#1180)
  • add Bitlist and Bitvector types (#1224)

BLS

  • minor fix to hash_to_g2 type-hint (#1222)
  • Warning: Bug exists in BLS hash to G2 in the current spec. The hash and increment approach will likely be deprecated after standardization so the bug is to be untouched for now

Significant changes still expected as we standardize BLS12-381 across blockchains

Phase 1 spec (warning: not stable)

  • resolve minor issue in early_secret_reveal (#1209)
  • minor formatting/types/etc PRs ()

Light client spec (warning: not stable)

  • no changes

Testing/CI

  • updates to test format docs (#1189)
  • reduce MAX_EPOCHS_PER_CROSSLINK to 4 in minimal config (#1204)
  • mypy type hinting check (#1166)
  • add lint to CI (#1207)
  • enhance phase 0 test coverage (#1206)
  • add genesis test generator and update some gen docs (#1238)
  • misc (#1190, #1201, #1216, #1258, #1259)

Fuzzy Sweater

17 Jun 03:26
2d13a3a
Compare
Choose a tag to compare
Fuzzy Sweater Pre-release
Pre-release

Release

Minor release that handles a few critical bugs found by client implementers when working through the v0.7.0 test vectors. Thank you @sorpaas and @zilm13!

This release also adds some tooling to enabling pyspec fuzzing prior to the spec ❄️freeze❄️.

Changelog

A detailed changelog can be found in PR #1176

Critical testing bugs

  • Fix for randao processing (#1169)
  • Fix for properly handling state_root in blocks in tests (#1146)
  • Fix for G2 padding in bls tests (#1179)

Additional changes

  • ssz fuzzing tooling (#1178)
  • add test code coverage reports (#1182) [be sure to run make install_test first!]

eth2 and chill

11 Jun 23:14
54c6b03
Compare
Choose a tag to compare
eth2 and chill Pre-release
Pre-release

Release

v0.7.0 marks an iterative semi-major release prior to the end-of-june phase 0 spec freeze ❄️ . The focus here is continued clean-up and simplification of phase 0 along with some testing, network, and ssz updates.

The spec implementation of SSZ had a major overhaul to support cleaner and more intuitive typing (thanks @protolambda!).

Phase 1 is now executable and a general framework exists for writing tests across phases (thanks @CarlBeek!).

Progress is being made on the phase 0 networking and RPC specs. This has been majorly a community effort. Thank you for the great work from many sources :)

Lastly, the deposit contract is now back in the specs repo to better handle PR dependencies (thanks @hwwhww!).

Changelog

PR showing full diff can be found here: #1163

Phase 0

Beacon chain

  • features
    • Crosslink explicitly in AttestationData (#1044)
    • explicitly include state_transition() and other helper functions (#1018)
    • Crosslink stores start_epoch and end_epoch to enable phase 1 calculations (#1097)
  • simplifications
    • cleanup int_to_bytes to be generic (#1060)
    • verify_indexed_attestation -> validate_indexed_attestation (#1028)
    • remove get_state_root from beacon chain doc (#1015)
    • remove index from Deposit (#1122)
  • bugs
    • fix deposit domain (#1055)
    • avoid divisions by zero (#1123)
    • minor bugs related to ordering/typos/var-mismatch/etc (#1051)
  • misc

Fork choice

  • explicit note on how to compute fork choice near genesis (#1023)
  • minor formatting/types/etc PRs (#998)

Validator

Networking

  • use ssz union-type in RPC request/response (#974)
  • add initial libp2p standardization (#935)
  • minor formatting/types/etc PRs ()

Deposit contract

  • move deposit contract back to spec repo (#1127)
  • minor formatting/types/etc PRs (#1075, #1154)

Simple Serialize

  • clarity on merklization of a single chunk (#1058)
  • Fix union type example (#1073)
  • rewrite of SSZ to support more native typing (#1077)
  • misc (#1056, #1138, #1144)

BLS

  • insert bls spec warning into doc (#1103)
  • Warning: Bug exists in BLS hash to G2 in the current spec. The hash and increment approach will likely be deprecated after standardization so the bug is to be untouched for now

Significant changes still expected as we standardize BLS12-381 across blockchains

Phase 1 spec (warning: not stable)

  • minor changes to custody game (#866)
  • RANDAO reveal slashing, custody period staggering (#880)
  • allow multiple bit challenges and recovert withdrawability (#1035)
  • get_custody_chunk_count uses start_ and end_epoch (#1099)
  • clean up process_penalties_and_exits (#1116)
  • minor formatting/types/etc PRs (#1076, #1120)

Light client spec (warning: not stable)

  • no changes

Testing/CI

  • add linter (#1065, #1081)
  • make phase 1 executable and allow for testing across multiple phases (#1061)
  • specify phase when running generators from tests (#1165)
  • misc (#1132, #1134)

order matters

03 Jun 17:11
cb9301a
Compare
Choose a tag to compare
order matters Pre-release
Pre-release

Release

Quick bump in v0.6.x release to fix a bug that emerged when running test vectors in other languages due to undefined ordering of sets. Also added back in a deposit top-up test that got dropped in the v0.6.2 release.

Thank you @michaelsproul for finding, reporting, and fixing both of these :)

Changelog

The PR showing the full changelog of the v06x branch being released into master can be found here: #1137

  • enforce sort order for attester slashings (#1126) [bugfix]
  • add back in additional deposit top-up test (#1133)

mic check

28 May 21:59
5a64b4a
Compare
Choose a tag to compare
mic check Pre-release
Pre-release

Release

The long awaited testing enhancements for v0.6.x!

This minor release focuses entirely on testing, and contains no substantive changes related to the spec. @protolambda drove the process to unify the python spec tests and the YAML test generators, and in doing so has increased YAML test coverage by an order of magnitude.

Other than test generator work and documentation, bls signatures were updated to utilize the correct (SHA-256) hash function (#1121).

Changelog

The PR showing the full changelog of the v06x branch being released into master can be found here: #1130

Tests and generators

  • Decorator for pytests to enable usage in test generation (#1052)
  • Ensure signatures are correct in test generators. default disable in pytests for speed (#1102)
  • Add epoch and sanity test generators and a number of test-format docs (#1114)
  • Update py-ecc version to use SHA-256 (#1121)
  • ssz_static test-case format is changed to facilitate more efficient parsing. The SSZ type is specified in the key now. (Commit 3781614)
  • Minor fix to shuffling generator (#1045)