Implementations
The following table lists current EIP-7916 / EIP-7495 / EIP-8016 implementation efforts. Note that implementations are not complete, and specifications may still change.
| Language | Library | Implementer | Progress |
|---|---|---|---|
| C# | Nethermind | open | |
| Go | dynssz | @pk910 | M4 |
| Go | Erigon (1 2 3) | @DarkLord017 | |
| Go | FastSSZ | open | |
| Go | karalabe/ssz | open | |
| Go | methodical-ssz | open | |
| Java | Teku | open | |
| Nim | nim-ssz-serialization | @etan-status | M4 |
| Python | remerkleable | @etan-status | M4 |
| Rust | ethereum_ssz | @SkandaBhat | |
| Rust | Grandine | open | |
| TypeScript | micro-eth-signer | open | |
| Zig | ChainSafe | @guha-rahul | |
| Zig | ssz.zig | open |
Specs
- ethereum/consensus-specs defines all SSZ specifications.
Tests
- ethereum/remerkleable contains static tests in test_impl.py and test_typing.py.
- ethereum/consensus-specs releases contain random tests in
tests/general/phase0/ssz_generic, generated according to a format.
M1 - ProgressiveList
EIP-7916 introduces ProgressiveList[type] and ProgressiveBitlist. The bitlist can be deferred, as EIP-7745 only requires ProgressiveList[type] for bytes.
Tests
- In test_impl.py and test_typing.py: Look for
ProgressiveList. - In
tests/general/phase0/ssz_generic: Look forbasic_progressive_list, and forProgressiveTestStructin thecontainerscategory.
M2 - ProgressiveBitlist
Complete implementation of EIP-7916, including ProgressiveBitlist. The bitlist follows a similar Merkle tree shape as the regular list, but uses a slightly different encoding and code path.
Tests
- In test_impl.py and test_typing.py: Look for
ProgressiveBitlist. - In
tests/general/phase0/ssz_generic: Look forprogressive_bitlist, and forProgressiveBitsStructin thecontainerscategory.
M3 - ProgressiveContainer
EIP-7495 introduces ProgressiveContainer, which is relevant for EIP-6404 transaction and receipts EIPs.
Tests
- In test_impl.py and test_typing.py: Look for
ProgressiveContainer. - In
tests/general/phase0/ssz_generic: Look forprogressive_containers.
M4 - CompatibleUnion
EIP-8016 introduces CompatibleUnion, the final piece to implement all EIP-7919 Pureth components.
Tests
- In test_impl.py and test_typing.py: Look for
CompatibleUnion. - In
tests/general/phase0/ssz_generic: Look forcompatible_unions.
M5 - Optimizations
Optimized overloads of the data structures may be necessary, e.g., with additional caches. While not strictly required for the initial implementation, they should still eventually be implemented. As optimizations are implementation specific, there are no formal completion criteria.