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 (tested through M2) |
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 | @18aaddy | |
Rust | Grandine | open | |
TypeScript | ChainSafe | @wemeetagain | |
TypeScript | micro-eth-signer | open | |
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-spec-tests contains random tests in 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 ssz_generic: Look for
basic_progressive_list
, and forProgressiveTestStruct
in thecontainers
category.
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 ssz_generic: Look for
progressive_bitlist
, and forProgressiveBitsStruct
in thecontainers
category.
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 ssz_generic: Look for
progressive_containers
.
M4 - CompatibleUnion
EIP-8016 introduces CompatibleUnion
, the final piece to implement all EIP-7919 Pureth components.
Tests
-
Implementations and tests are not yet available.
-
In test_impl.py and test_typing.py: Look for
CompatibleUnion
. - In ssz_generic: Look for
compatible_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.