THIS IS UNOFFICIAL!
For the official prize documentation, see https://jam.web3.foundation/
For news on the protocol, see https://graypaper.com/
For an unofficial list of JAM implementation teams, see https://jamcha.in/clients
Judges: The Polkadot Fellowship, excluding members involved in the implementation being voted on.
Third-party libraries for low-level primitives not specific to the JAM protocol are acceptable, such as:
Gas, trie/DB, signature-verification and availability (EC/DB) performance tests are requirements and will be run on a standard hardware.
Following the accepted completion of each milestone, one developer may be promoted to the rank commensurate with their code and protocol contributions regardless of regular time requirements. The promotion should be in line with regular interpretation of the Manifesto except for the time requirements (which are disregarded). The maximum rank to be attained in this way shall be III Dan (Fellow).
Following completion of (1), evidence for Polkadot Fellowship rank-retentions (and, where applicable, promotions) may include regular, meaningful contributions to the project.
Following completion of (2), teams receive a login to their own instance of the standard hardware on which to make unit benchmarks of their performance.
Following completion of (3), teams receive time/slots on the JAM TOASTER to trial and debug overall emergent activity.
Following completion of (4), implementations may apply for a professional external audit at no cost.
Five milestones (each implies the ones before):
Prizes are paid to the earliest Polkadot/Kusama account IDs stated in the repository's README. In the case of a tie, payment is split equally. Local (Swiss) law requires that Web 3 Foundation take KYC/AML information on the recipient together with proof of account control.
Unless otherwise stated, major language dialects are acceptable.
The language set of an implementation is determined as the language in which its business logic is written. Peripheral, performance-bottleneck components of an implementation may be written in a higher-performance language without any impact on the consideration of language set. A non-exhaustive list of such components include:
(Maximum) Prize per milestone: 100,000 DOT + 1,000 KSM
(Maximum) Prize per milestone: 100,000 DOT + 1,000 KSM
(Maximum) Prize per milestone: 100,000 DOT + 1,000 KSM
(Maximum) Prize per milestone: 100,000 DOT + 1,000 KSM
(Maximum) Prize per milestone: 5,000 KSM
Begin in order:
Q: Clean room?
A: Cooperation between teams is essential but anything which goes beyond trivial misunderstandings of the graypaper should be documented, either as issues in the GP repo or as side notes of the implementation to be submitted at the time of milestone review. To stay safe, teams should stay away from the implementation specifics of other implementations and definitely not be sharing code.
It's ok to ruminate on high level approaches to solve problems or optimize, it's not so ok to be looking at some other implementation's specific solution.
What the Fellowship will be looking out for is for undeclared collusion between teams. Code which appears to be a little too similar for it to have been independently written. A big red flag would be the same bug popping up in two implementations.
But this is not to detract from the fun of getting two cleanroom impls talking to each other. Of course this is a big part of it and you mustn't feel like it's not allowed.
Just be sure to document anything which you discover when working alongside another team so everyone can benefit.
Q: This all sounds too risky for me. Can we not have something closer to a regular service agreement?
A: No.
Q: Roughly how long will it take my developer/team to implement Milestone X?
A: How long is a piece of string? Seriously, read the Graypaper and decide yourself. Every developer is different.
Q: Does my implementation need to exploit JAM's asynchrony?
A: We don't explicitly state what code paths need be asynchronous. It is up to implementations to decide this for themselves.
To clarify, for M2, nodes are expected to provide (and use) information in a timely fashion; this goes for all aspects of block authoring and production. Needless not providing an assurance or guarantee, or not using one which was provided is incorrect behaviour.