/ ethereum_research_records.json
ethereum_research_records.json
  1  {
  2    "sharding": {
  3      "summary": "",
  4      "description": "",
  5      "improves": ["throughput", "transaction cost"],
  6      "worsen": ["complexity"],
  7      "layer": 1,
  8      "tags": ["sharding", "architecture"],
  9      "comments": [
 10        "Validator - a participant in the Casper/sharding consensus system. You can become one by depositing 32 ETH into the Casper mechanism.",
 11        "Active validator set - those validators who are currently participating, and which the Casper mechanism looks to produce and attest to blocks, cross-links and other consensus objects.",
 12        "Committee - a (pseudo-) randomly sampled subset of the active validator set. When a committee is referred to collectively, as in \"this committee attests to X\", this is assumed to mean \"some subset of that committee that contains enough validators that the protocol recognizes it as representing the committee\".",
 13        "Proposer - the validator that creates a block",
 14        "Attester - a validator that is part of a committee that needs to sign off on a block.",
 15        "Beacon chain - the central PoS chain that is the base of the sharding system.",
 16        "Shard chain - one of the chains on which transactions take place and account data is stored.",
 17        "Cross-link - a set of signatures from a committee attesting to a block in a shard chain, which can be included into the beacon chain. Cross-links are the main means by which the beacon chain “learns about” the updated state of shard chains.",
 18        "Epoch - a period of 64 blocks.",
 19        "Finalized, justified - see Casper FFG finalization here: https://arxiv.org/abs/1710.09437"
 20        ],
 21      "resources": [
 22        {"https://docs.google.com/presentation/d/1mdmmgQlRFUvznq1jdmRwkwEyQB0YON5yAg4ArxtanE4": "Sharding introduction by EF"},
 23        {"https://notes.ethereum.org/9MMuzWeFTTSg-3Tz_YeiBA?view": "Ethereum 2.0 Devs Handbook and FAQs"},
 24        {"https://github.com/ethereum/wiki/wiki/Sharding-FAQs": "Official FAQ"},
 25        {"https://vitalik.ca/files/Ithaca201807_Sharding.pdf": "Sharding presentation slides by Vitalik"},
 26        {"https://medium.com/prysmatic-labs/how-to-scale-ethereum-sharding-explained-ba2e283b7fce": "Sharding high level overview by Prysmatic labs"},
 27        {"https://notes.ethereum.org/s/B1-7aivmX": "ECDC Berlin, July 1st Sharding Meeting"},
 28        {"https://www.youtube.com/playlist?list=PLaM7G4Llrb7zEHK2UzQo3kxadPyeUy2sZ": "ECDC Berlin videos"},
 29        {"https://notes.ethereum.org/SCIg8AH5SA-O4C1G1LYZHQ": "WIP Specification of Casper + Sharding chain"},
 30        {"https://ethresear.ch/t/convenience-link-to-full-casper-chain-v2-spec/2332/12": "Ongoing discussion on the Casper + Sharding spec"},
 31        {"https://ethresear.ch/t/offchain-collation-headers/1679/6": "Offchain collation headers proposal"},
 32        {"https://docs.google.com/presentation/d/1aqU1gK8B_sozm6orNVqqyvBTC2u2_13Re0Fi99rFhjg/edit#slide=id.g413fdd60fc_1_233": "oblique hashes explanation"}
 33      ],
 34      "status": "research",
 35      "last_update": "",
 36      "implementations": [""],
 37      "dependencies": ["beacon chain", "shard chain", "Casper FFG", "Proof of Stake"],
 38      "required_by": [""]
 39    },
 40    "beacon chain": {
 41      "summary": "The central PoS chain that is the base of the sharding system.",
 42      "description": "",
 43      "improves": [""],
 44      "layer": 1,
 45      "tags": ["sharding"],
 46      "comments": [
 47        "In charge a generating a heartbeat: a strong random number generated at regular intervals",
 48        "In charge of cross-links, slashing conditions, accounting, Casper FFG"
 49        ],
 50      "resources": [
 51        {"https://notes.ethereum.org/SCIg8AH5SA-O4C1G1LYZHQ#Beacon-chain": "Beacon chain specification (WIP)"},
 52        {"https://www.mindomo.com/mindmap/beacon-chain-state-fcf0e883590443328356ad19bb83103e": "Mind map of the beacon chain"}
 53      ],
 54      "status": "proof-of-concept",
 55      "last_update": "2018-07-18",
 56      "implementations": [
 57        "https://github.com/ethereum/beacon_chain",
 58        "https://github.com/prysmaticlabs/beacon-chain",
 59        "https://github.com/sigp/rust_beacon_chain",
 60        "https://github.com/ChainSafeSystems/lodestar_chain",
 61        "https://github.com/ethereum/research/tree/1830ae20915ea9bfb0363793ff3eec06ffbd9889/beacon_chain_impl",
 62        "https://github.com/status-im/nim-beacon-chain"
 63        ],
 64      "dependencies": ["RANDAO", "Blake2"],
 65      "required_by": [""]
 66    },
 67    "RANDAO": {
 68      "summary": "A random number generator based on participants organized in a decentralized autonomous organization",
 69      "description": "",
 70      "improves": [""],
 71      "layer": 1,
 72      "tags": ["sharding", "cryptography", "random number generator"],
 73      "comments": [
 74        "It should be completely deterministic given a blockchain state so that client can sync in a deferred manner.",
 75        "It should not be predictable, so that it can be used as a strong PRNG (or even cryptographic RNG.",
 76        "VDFs: Verifiable Delay Functions"
 77        ],
 78      "resources": [
 79        {"https://docs.google.com/presentation/d/13OAGL42yzOvQUKvJJ0EBsAAne25yA7sv9RC8FfPhtyo/edit#slide=id.p": "Ethereum 2.0 randomness presentation"},
 80        {"https://notes.ethereum.org/SCIg8AH5SA-O4C1G1LYZHQ#Beacon-chain": "Beacon chain specification (WIP)"},
 81        {"https://ethresear.ch/t/making-the-randao-less-influenceable-using-a-random-1-bit-clock/2566/17": "Proposal on reducing influence of validator on the final number generated"},
 82        {"https://ethresear.ch/t/rng-exploitability-analysis-assuming-pure-randao-based-main-chain/1825": "Exploitability analysis of the RANDAO RNG"},
 83        {"https://blog.ethereum.org/2015/08/28/on-anti-pre-revelation-games/": "2015 article on collusion in a RANDAO"},
 84        {"http://swende.se/blog/Breaking_the_house.html": "2015 article on breaking casino smart-contract random number generator"},
 85        {"https://forum.ethereum.org/discussion/2031/randao-a-dao-working-as-rng": "RANDAO announcement and discussion"},
 86        {"https://ethresear.ch/t/fork-free-randao/1835/3": "Fork-free RANDAO proposition"},
 87        {"https://medium.com/ultrayolo/ultrayolos-random-number-generation-rng-on-the-blockchain-proof-of-randomness-c8e35d538d5a": "Overview of RNG techniques on the blockchain"},
 88        {"https://blog.positive.com/predicting-random-numbers-in-ethereum-smart-contracts-e5358c6b8620?gi=9d3d46afbaec": "Blockchain PRNGs vulnerabilities"}
 89      ],
 90      "status": "research",
 91      "last_update": "2018-07-18",
 92      "implementations": [
 93        "https://github.com/randao/randao"
 94        ],
 95      "dependencies": ["RANDAO"],
 96      "required_by": [""]
 97    },
 98    "shard chain": {
 99      "summary": "One of the chains on which transactions take place and account data is stored.",
100      "description": "",
101      "improves": ["throughput", "transaction cost"],
102      "layer": 1,
103      "tags": ["sharding"],
104      "comments": [""],
105      "resources": [
106        {}
107      ],
108      "status": "proof-of-concept",
109      "last_update": "2018-07-18",
110      "implementations": [
111        ],
112      "dependencies": [""],
113      "required_by": [""]
114    },
115    "BLS signature aggregation": {
116      "summary": "",
117      "description": "",
118      "improves": ["throughput"],
119      "layer": 1,
120      "tags": ["cryptography"],
121      "use-cases": [
122        "Solve the signature verification bottleneck. ECDSA would take a day when BLS aggregation would take a couple of minutes"
123      ],
124      "comments": [
125        "Not quantum secure",
126        "Will be replaced by STARKs",
127        "Milagro-crypto is a professionally-written crypto primitive library in C, C++, Java, Rust, Go with BLS primitives and proper constant time bignum implementation"
128        ],
129      "resources": [
130        {"https://orbs.com/wp-content/uploads/2018/07/Threshold-Cryptography-and-Digital-Key-Distribution.pdf": "Elliptic Curve, pairing curve and BLS presentation"},
131        {"https://crypto.stanford.edu/~dabo/pubs/papers/BLSmultisig.html": "BLS aggregation spec"},
132        {"https://github.com/zkcrypto/pairing/tree/master/src/bls12_381#bls12-381-instantiation": "Less math symbols, more specs"},
133        {"https://ethresear.ch/t/pragmatic-signature-aggregation-with-bls/2105": "EthResearch intrduction"},
134        {"https://eprint.iacr.org/2018/483.pdf": "Paper: Compact Multi-Signatures for Smaller Blockchains"},
135        {"https://github.com/zcash/zcash/issues/2502": "Zcash team presentation of BLS12-381, perf, security, implementation"},
136        {"https://medium.com/@VitalikButerin/exploring-elliptic-curve-pairings-c73c1864e627": "Explanation of Elliptic Curve pairings"},
137        {"https://www.maximintegrated.com/en/app-notes/index.mvp/id/5767": "ECDSA explanation"}
138      ],
139      "status": "research",
140      "last_update": "2018-07-30",
141      "implementations": [
142        {"https://github.com/lovesh/signature-schemes": "Rust: based on Milagro Crypto"},
143        {"https://github.com/zkcrypto/pairing": "Rust: official Zcash curve implementation"},
144        {"https://github.com/str4d/bls": "Rust: (Zcash dev) complement to Zcash for key generation, signature and aggregate"},
145        {"https://github.com/leishman/bls_lib": "C++ by Alexander Leishmann, crypto researcher @ Stanford U"},
146        "https://github.com/dis2/bls12",
147        "https://github.com/terenc3t/go-bls/blob/master/bls.go",
148        "https://github.com/milagro-crypto/amcl/tree/master/version3/c",
149        "https://github.com/milagro-crypto/amcl/issues/29",
150        "https://github.com/relic-toolkit/relic/blob/master/src/cp/relic_cp_bls.c",
151        "https://github.com/blynn/pbc/blob/master/example/bls.c",
152        "https://github.com/herumi/bls",
153        "https://github.com/status-im/nim-milagro-crypto",
154        "https://github.com/Chia-Network/bls-signatures",
155        {"https://github.com/opporty-com/Plasma-Cash/tree/master/bls": "JavaScript: implementation wih aggregate sig by Opporty.com"},
156        {"https://github.com/dfinity/bn": "Dfinity BN and BLS curve implementation"}
157        ],
158      "dependencies": [""],
159      "required_by": ["sharding"]
160    },
161    "Constant-time bignum": {
162      "summary": "If we want side-channel resistant custom implementation of cryptographic curves, we need constant-time bignum library",
163      "description": "",
164      "improves": [""],
165      "layer": 1,
166      "tags": ["cryptography"],
167      "use-cases": [
168        ""
169      ],
170      "comments": [
171        "Comments on BearSSL bignum implementation: https://crypto.stackexchange.com/a/59852"
172        ],
173      "resources": [
174        {"https://bearssl.org/constanttime.html": "Constant Time cryptography"},
175        {"https://bearssl.org/ctmul.html": "Hardware multiplication is not always constant-time"}
176      ],
177      "status": "research",
178      "last_update": "2018-07-23",
179      "implementations": [
180        "https://bearssl.org/gitweb/?p=BearSSL;a=tree;f=src/int;hb=HEAD",
181        "https://github.com/milagro-crypto/amcl/tree/master/version3/c"
182        ],
183      "dependencies": [""],
184      "required_by": ["sharding"]
185    },
186    "Blake2": {
187      "summary": "Hashing algorithm",
188      "description": "",
189      "improves": [""],
190      "layer": 1,
191      "tags": ["cryptography"],
192      "use-cases": [
193        ""
194      ],
195      "comments": [
196        ""
197        ],
198      "resources": [
199        {}
200      ],
201      "status": "implemented",
202      "last_update": "2018-07-20",
203      "implementations": [
204        "https://github.com/cheatfate/nimcrypto"
205        ],
206      "dependencies": [""],
207      "required_by": ["beacon chain"]
208    },
209    "zk-stark": {
210      "summary": "ZK-STARK allows a party to prove validity of a claim (knowledge, ownership, transaction, ...) without disclosing non-public information.",
211      "description": "",
212      "improves": ["throughput", "privacy"],
213      "layer": 1,
214      "tags": ["cryptography"],
215      "use-cases": [
216        "Initial full node syncing",
217        "Decentralized banks: smart-contracts that pools funds which uses zk-stark to prove ownership and transfer money within the pool. Total value owned within the pool is kept private."
218      ],
219      "comments": [
220        "Compared to ZK-SNARK, ZK-STARK does not rely on a thrid-party and is completely transparent",
221        "A ZK-STARK/ZK-SNARK proof is faster to compute than naively checking the claim its proving",
222        "ZK-STARK stands for Zero-Knowledge Succinct, Transparent, ARguments of Knowlegde",
223        "ZK-SNARK stands for Zero-Knowledge Succinct, Non-interactive, ARguments of Knowlegde"
224        ],
225      "resources": [
226        {"https://cyber.stanford.edu/sites/default/files/elibensasson.pdf": "Zcash slides"},
227        {"https://eprint.iacr.org/2018/046.pdf": "Zcash paper"},
228        {"https://blog.ethereum.org/2016/12/05/zksnarks-in-a-nutshell/": "Overview of ZK-SNARK"},
229        {"https://medium.com/@VitalikButerin/zk-snarks-under-the-hood-b33151a013f6": "Overview of ZK-SNARK"},
230        {"https://vitalik.ca/general/2017/11/09/starks_part_1.html": "Overview of ZK-STARK"},
231        {"https://www.youtube.com/watch?v=VUN35BC11Qw": "Introduction video to ZK-SNARK"},
232        {"pending": "ECDC Berlin Starkware presentation"},
233        {"https://notes.ethereum.org/s/B1-7aivmX#⟠-6-Discussion-STARKs-in-sharding-with-Eli-Ben-Sasson-Uri-Kolodny-Avihu-Levy-StarkWare-and-Justin-Drake-Ethereum-Foundation": "Stark & sharding, ECDC Berlin"}
234      ],
235      "status": "research",
236      "last_update": "2018-07-18",
237      "implementations": [""],
238      "dependencies": [""],
239      "required_by": [""]
240    },
241    "Proof-of-Stake": {
242      "summary": "",
243      "description": "",
244      "improves": ["energy consumption", "decentralization"],
245      "layer": 1,
246      "tags": ["proof of stake"],
247      "comments": [
248        "Currently 2 ways of doing PoS: 1. Chain-based PoS, similar to PoW. Stakers pseudo-randomly have the right to produce blocks.\n2. Byzantine Fault Tolerant (BFT) PoS."
249        ],
250      "resources": [
251        {"https://github.com/ethereum/wiki/wiki/Proof-of-Stake-FAQs": "Official PoS FAQ"},
252        {"https://medium.com/@jonchoi/ethereum-casper-101-7a851a4f1eb0": "Proof of Stake design philosophy"},
253        {"https://medium.com/@tuurdemeester/critique-of-buterins-a-proof-of-stake-design-philosophy-49fc9ebb36c6": "Critique of PoS design philosophy"},
254        {"https://medium.com/@VitalikButerin/minimal-slashing-conditions-20f0b500fc6c": "Slashing and economic finality"},
255        {"https://ethresear.ch/t/pos-fork-choice-rule-desiderata/2636": "PoS fork choice rules (Recursive proximity to justification (RPJ)"}
256      ],
257      "status": "research",
258      "last_update": "2018-07-18",
259      "implementations": [
260        ""
261        ],
262      "dependencies": [""],
263      "required_by": [""]
264    },
265    "Casper": {
266      "summary": "PoW to PoS transition research projects: Casper FFG by Vitalik and CBC-Casper by Vlad",
267      "description": "",
268      "improves": ["throughput"],
269      "layer": 1,
270      "tags": ["proof of stake", "architecture"],
271      "comments": [
272        ""
273        ],
274      "resources": [
275        {"https://blockgeeks.com/guides/ethereum-casper/": "In-depth dive in Caspers"},
276        {"https://medium.com/@jonchoi/ethereum-casper-101-7a851a4f1eb0": "Casper 101: introduction, goal, design, resources"},
277        {"https://ethereum.stackexchange.com/questions/332/what-is-the-difference-between-casper-and-tendermint": "Casper vs Tendermint"}
278      ],
279      "status": "research",
280      "last_update": "2018-07-18",
281      "implementations": [
282        ""
283        ],
284      "dependencies": [""],
285      "required_by": [""]
286    },
287    "Casper CBC": {
288      "summary": "Casper the Friendly GHOST: Correct-by-Construction",
289      "description": "",
290      "improves": ["throughput"],
291      "layer": 1,
292      "tags": ["proof of stake"],
293      "comments": ["Though silent, as of July 2018, CBC-Casper is still ongoing: https://ethresear.ch/t/cbc-casper-in-the-face-of-the-new-pos-sharding-plans-on-ethereum/2444"],
294      "resources": [
295        {"https://github.com/ethereum/research/blob/master/papers/cbc-consensus/AbstractCBC.pdf": "Correct by Construction Consensus protocols"},
296        {"https://github.com/ethereum/research/blob/master/papers/CasperTFG/CasperTFG.pdf": "Casper CBC spec"}
297      ],
298      "status": "research",
299      "last_update": "2018-07-18",
300      "implementations": [
301        ""
302        ],
303      "dependencies": [""],
304      "required_by": [""]
305    },
306    "Casper FFG": {
307      "summary": "Casper the Friendly Finality Gadget: a PoS finality system built on top of PoW",
308      "description": "",
309      "improves": ["throughput"],
310      "layer": 1,
311      "tags": ["proof of stake"],
312      "comments": [""],
313      "resources": [
314        {"https://arxiv.org/abs/1710.09437": "Casper FFG Paper"}
315      ],
316      "status": "research",
317      "last_update": "2018-07-18",
318      "implementations": [
319        "https://notes.ethereum.org/zazJPIQSQL2u0pI0K1RShg"
320        ],
321      "dependencies": [""],
322      "required_by": [""]
323    },
324    "state channel": {
325      "summary": "",
326      "description": "",
327      "improves": ["latency", "transaction cost"],
328      "worsen": [""],
329      "layer": 2,
330      "tags": [""],
331      "comments": [""],
332      "resources": [
333        {"https://medium.com/l4-media/making-sense-of-ethereums-layer-2-scaling-solutions-state-channels-plasma-and-truebit-22cb40dcc2f4": "overview of layer 2 solutions"}
334      ],
335      "status": "research",
336      "last_update": "2018-07-18",
337      "implementations": [
338        ""
339        ],
340      "dependencies": [""],
341      "required_by": [""]
342    },
343    "Plasma": {
344      "summary": "",
345      "description": "",
346      "improves": ["throughput", "transaction cost"],
347      "worsen": [""],
348      "layer": 2,
349      "tags": [""],
350      "comments": [""],
351      "resources": [
352        {"https://medium.com/chain-cloud-company-blog/plasma-in-10-minutes-c856da94e339": "Plasma at a glance"},
353        {"https://medium.com/l4-media/making-sense-of-ethereums-layer-2-scaling-solutions-state-channels-plasma-and-truebit-22cb40dcc2f4": "overview of layer 2 solutions"},
354        {"https://ethresear.ch/t/minimal-viable-plasma/426": "Draft of minimum viable Plasma implementation"},
355        {"https://karl.tech/plasma-cash-simple-spec/": "Plasma Cash spec"},
356        {"https://ethresear.ch/t/pos-plasma-cash-with-sharded-validation/1486": "Plasma Cash + Sharded Validation"},
357        {"https://medium.com/chain-cloud-company-blog/plasma-in-10-minutes-c856da94e339": "Comparison of Plasma and Liquidity.Network offchain scaling solution"},
358        {"https://raiden.network/faq.html": "Raiden, an offchain transfer network using state channels (i.e. complements Plasma/Liquidity.Network"}
359      ],
360      "status": "research",
361      "last_update": "2018-07-18",
362      "implementations": [
363        ""
364        ],
365      "dependencies": [""],
366      "required_by": [""]
367    },
368    "Truebit": {
369      "summary": "Offload complex/costly computation off-chain to a third party solver, with a challenge system to keep solver honest",
370      "description": "",
371      "improves": ["computation power"],
372      "worsen": [""],
373      "layer": 2,
374      "tags": [""],
375      "comments": [""],
376      "resources": [
377        {"https://medium.com/l4-media/making-sense-of-ethereums-layer-2-scaling-solutions-state-channels-plasma-and-truebit-22cb40dcc2f4": "Overview of layer 2 solutions"},
378        {"https://medium.com/@simondlr/an-intro-to-truebit-a-scalable-decentralized-computational-court-1475531400c3": "Introduction to Truebit"},
379        {"https://people.cs.uchicago.edu/~teutsch/papers/truebit.pdf": "Truebit paper"}
380      ],
381      "status": "research",
382      "last_update": "2018-07-18",
383      "implementations": [
384        ""
385        ],
386      "dependencies": [""],
387      "required_by": [""]
388    },
389    "Kademlia": {
390      "summary": "Peer discovery",
391      "description": "",
392      "improves": ["decentralization"],
393      "worsen": [""],
394      "layer": 1,
395      "tags": ["networking", "protocol"],
396      "comments": [""],
397      "resources": [
398        ""
399      ],
400      "status": "poc",
401      "last_update": "2018-07-19",
402      "implementations": [
403        ""
404        ],
405      "dependencies": [""],
406      "required_by": [""]
407    },
408    "libp2p": {
409      "summary": "",
410      "description": "",
411      "improves": [""],
412      "worsen": [""],
413      "layer": 1,
414      "tags": ["networking", "library"],
415      "comments": [""],
416      "resources": [
417        ""
418      ],
419      "status": "poc",
420      "last_update": "2018-07-19",
421      "implementations": [
422        ""
423        ],
424      "dependencies": [""],
425      "required_by": [""]
426    },
427    "devp2p": {
428      "summary": "",
429      "description": "",
430      "improves": [""],
431      "worsen": [""],
432      "layer": 1,
433      "tags": ["networking"],
434      "comments": [""],
435      "resources": [
436        {"https://github.com/ethereum/wiki/wiki/ÐΞVp2p-Wire-Protocol": "Official wiki"}
437      ],
438      "status": "poc",
439      "last_update": "2018-07-19",
440      "implementations": [
441        ""
442        ],
443      "dependencies": [""],
444      "required_by": [""]
445    },
446    "PubSub": {
447      "summary": "PubSub specifies how to subscribe to or publish events on the blockchain",
448      "description": "",
449      "improves": [""],
450      "worsen": [""],
451      "layer": 1,
452      "tags": ["networking", "protocol"],
453      "comments": [""],
454      "resources": [
455        {"https://github.com/ethereum/go-ethereum/wiki/RPC-PUB-SUB": "Geth wiki"}
456      ],
457      "status": "draft",
458      "last_update": "2018-07-19",
459      "implementations": [
460        ""
461        ],
462      "dependencies": ["Floodsub", "GossipSub"],
463      "required_by": [""]
464    },
465    "GossipSub": {
466      "summary": "",
467      "description": "",
468      "improves": [""],
469      "worsen": [""],
470      "layer": 1,
471      "tags": ["networking", "protocol"],
472      "comments": [""],
473      "resources": [
474        {"https://github.com/libp2p/specs/blob/master/pubsub/gossipsub/README.md": "Spec - GossipSub: Proximity Aware Epidemic PubSub for libp2p"}
475      ],
476      "status": "draft",
477      "last_update": "2018-07-19",
478      "implementations": [
479        ""
480        ],
481      "dependencies": [""],
482      "required_by": ["PubSub"]
483    }
484  }