Open protolambda opened 3 years ago
@protolambda Thanks for starting this list. BTW what is the order chosen for the list? It does not seem be sorted against languages, or alphabetical ... or license. And what is the difference between archived/deprecated/discontinued?
There is a formal specification and implementations of the SSZ functions in Dafny here.
The functional style of the implementations does not prescribe any particular language, but rather identifies the pre/post-condutions of each function.
The Dafny implementations are executable, can be translated into C#, Go, Java.
More importantly the code is proved correct against some desirable properties, e.g., deserialise(serialise(x)) == x
(proof here) and injectiveness
of serialise
(proof here).
There is also an SSZ wiki. (WIP)
Entry proposal: Language: Dafny Project: Specification and Verification of Eth2.0 in Dafny Maintainer: ConsenSys Software And Ethereum Foundation (grant) License: Apache-2.0 Status: Active Features: Formal specification of each function with pre-post-conditions, correctness proofs Link: link to repo
@franck44 no particular order, but roughly ordered by "status" (active being the highest ranking), then grouped by "language" (alphabetical), and then any order how I happened to build the list. The deprecated/discontinued etc. libraries are at the bottom so they are not as noisy. Happy to re-order if you've a suggestion.
My interpretation here: archived: not maintained, only there to keep the code public. Not recommended to use. May be replaced with something else. GitHub has a nice archive function, which makes a repo read-only. deprecated: code that mostly works, but is considered legacy and not recommended for production. discontinued: code that mostly works, but end-of-life without replacement, nor any archival guaranteed.
In the end most users should just pick an active implementation, of which there are plenty options.
Dafny entry proposal sounds good, will add it. Will need to summarize the "Features" to fit in the table though. Hope I don't butcher it.
@protolambda could you please add gballet/ssz.zig, the ziglang implementation that I am maintaining? No project in particular (or "geth" if you must have one) and the license is "The Unlicense".
Proposing SszSharp be added to this list, as the other C# implementations are quite incomplete compared to mine. Currently, serialization and deserialization is supported well enough that it can roundtrip a BeaconState, and merkleization support is planned. Licensed under MIT.
Thanks for the cooperation
Hi @protolambda I stumbled across this and noticed the JS/TS repos have been updated since this was posted. You can find the new location at Chainsafe/ssz
. Thanks!
micro-eth-signer (https://github.com/paulmillr/micro-eth-signer) implements ssz in 900 lines of typescript code. Nearest competition is like 7 times larger.
Sepolia ether testnet briage minutes
A non-exhaustive list of SSZ implementations. Not officially endorsed, but maintained by client teams and other members of the ethereum community. Comment in this issue if you like to add/update an entry.
Maintained here to avoid continuous changes to the spec (and not delay table updates till spec release).
OffchainLabs/sszpp
ConsenSys/eth2.0-dafny
protolambda/ztyp
ferranbt/fastssz
karalabe/ssz
pk910/dynamic-ssz
PegaSysEng/teku/ssz
status-im/nim-ssz-serialization
ethereum/py-ssz
protolambda/remerkleable
ralexstokes/ssz-rs
sigp/ethereum_ssz
ChainSafe/ssz
paulmillr/micro-eth-signer/src/ssz.ts
gballet/ssz.zig
hexafluoride/SszSharp
NethermindEth/ssz-codegen
potuz/mammon
prysmaticlabs/go-ssz
protolambda/zssz
rjl493456442/sszgen
harmony-dev/beacon-chain-java/ssz
ChainSafe/ssz-js
sgryphon/cortex-ssz
paritytech/shasper/ssz
yeeth/SimpleSerialize.swift
ConsenSys/cava/ssz