-
Notifications
You must be signed in to change notification settings - Fork 33
Learning Readme
This is a live document on how to get ramped up on all the knowledge you need to contribute to the Pocket Protocol.
IMPORTANT: If you are reading this, understand that if something looks incomplete, confusing or wrong, it most likely is. Don't be afraid to openly ask questions & submit a PR to change it!
This is a general set of steps we have found to help new core team members onboard to Protocol development.
-
Watch our 2022 Infracon presentation on v1 to get a general idea of how everything works. (43 mins)
- This will help you understand the core building components of a Pocket V1 Node
-
Run a LocalNet by following the development guide. (1-3 hours)
- This will get you set up to start contributing
- Reach out to the core team in the #v1-dev discord channel if you hit any issues
- TIP: Once you clone the Github repo, you can
cd pocket
and runmake
from to see all the available commands.
-
Get an understanding of the V1 spec summaries by reading about the 4 modules in our docs. (2-4 hours)
- This will get you understand the spec foundations for Pocket V1
- Utility
- Consensus
- P2P
- Persistence-
-
Optional: Go through Otto's Pocket Guide presentations to understand how Pocket V0 works.
-
Optional: If you’re interested, you can view the OG v0 Pocket whitepaper. (3-5 hours)
- This can provide both valuable and interesting historical context into Pocket
-
Optional: If you’re interested, you can view the V0 Claim & Proof Lifecycle specifications. (2-4 hours)
- It is a proprietary algorithm that you are unlikely to ever need to touch/modify, but it is fun & interesting to reason about and understand.
-
Eventually: Over time, and not all at once, you can start making your way through and updating the V1 specifications. (15-30 hours)
- Treat these specifications as guidelines and not sources of truth. If you are reading this, you will likely modify them at some point.
- Mastering these concepts won't be easy but will make you an expert on Pocket V1
- TIP: We hope to publish it with V1 benchmarks on arxiv one day, so this is your chance to contribute 🙂
- Optional: If you're a core team member or heavily involved in the project, reach out to the team about getting access to the V1 specification research documents.
-
Start getting acquainted with the code structure by looking at the docs on the shared architecture. (1 hour)
- This will help you understand the code architecture of Pocket V1
-
View our V1 Roadmap. (10 mins)
- This will give you insight into our development & release timelines
-
Get a sense of all the open issues and tickets in out Github project. (1 hour)
-
If you don't already have a starter task, pick one from Dework, our open issues or ask the team in the #v1-dev discord channel. (1 hour)
-
Jump on a call and pair code! (∞ and beyond)
- If you need a walk-through of the code and some pointers before getting started, jump on a call!
- If you need to take your time to understand the problem and the code first, do so, and then jump on a call!
- If you don't need help, when you’re about 33% of the way done, show your draft work and get some feedback, so jump on a call!
- Just leave a message in the #v1-dev discord channel and someone from the core team will respond.
If you're not familiar with the Github workflow, you can reference the First Contributions repository.
A great starting point to learn both the basics, idioms and some advanced parts of go is The Way To Go course on educative.io.
Afterwards, two great references you can constantly refer to are:
- Effective Go by the official Gopher community
- Practical Go by Dave Cheney
We used Mermaid as our text-to-diagram framework to embed visuals alongside all of our visualisations. It makes the documentation easier to understand and maintain. As explained in this comment, you can use mermaid.live to work on them in your browser or install an extension in your editor of choice; which should probably be VSCode 🤓
NOTE: We're trying not to make this a link dump, so please only add more references if it was actually helpful in clarifying your understanding. Don't treat these as must reads but as a signal for good sources to learn. If there was something that really helped clarify your understanding, please do include it!
This is a general set of technical links and recommended reading our team has found useful to review and study for core technical concepts.
-
- This is the OG Pocket whitepaper if you want to go down memory lane
-
Pocket easy-to-learn Documents
- This is the best starting point for anyone who is non-technical or very new to the project
-
First Pocket Network V1 Presentations: The original presentations for Pocket V1 presented at the Mexico 2021 offsite
-
- Contains everything from Infracon presentations, to contributor hour calls, etc...
-
Hotstuff whitepaper
- The original hotstuff whitepaper does a great job at explaining the algorithm on which HotPOKT is built
-
Attacks on BFT Algorithms
- Covers various attacks on different BFT algorithms
-
Jellyfish Merkle Tree
- An easy-to-read paper on JMT's that contains a good amount of background of how Merkle Trees work
- Verkle Trees
-
Verkle Tree Whitepaper
- The Verkle Tree whitepaper provides a good background on Merkle trees and some details on polynomial commitments
-
Vitalik's Verkle Tree Review
- Vitalik's analysis dives deeper into the math behind Verkle Trees with an alternative
-
Verkle Tree Whitepaper
-
Cosmos Discussion about Storage and IAVL
- This is a Github discussion between various Cosmos contributors of why and how to deprecate IAVL and goes into an intensive discussion of Merkle Tree alternatives
-
State commitment and storage review
- This research report was a result of the discussion above and goes in depth into state commitments and storage alternatives
-
Plasma Core Merkle Sum Tree
- A good reference to understand some of the underlying cryptography in V0's proof/claim lifecycle 9934927 (Add a couple more helpful links)
- Tendermint Discussion around a rollback tool for state
-
Paths toward single-slot finality
- An ethereum-pov explanation on the difficulty of having large validator networks
-
Anoma Whitepaper
- This whitepaper is a bit dense but introduces a great way of thinking about the building blocks of decentralized applications and blockchains focused on security and intent. It always provides a great historical background on both Bitcoin and Ethereum.
-
Threshold signatures presentation
- A great presentation by Alin Tomescu (founding engineer) that builds intuition around threshold signatures, signature aggregation, etc
-
ECDSA is not that bad: two-party signing without Schnorr or BLS
- A gentle introduction to BLS aggregation
-
How Schnorr signatures may improve Bitcoin
- A gentle introduction to Schnorr signatures
-
Eclipsing Ethereum Peers with False Friends
- A detailed explanation of how Kademlia (DHT for P2P networks) works, accompanying a deep dive into peer management and peer discovery in Geth, with the goal of outlining several attack vectors and their countermeasures.
-
A Brief Overview of Kademlia, and its use in various decentralized platforms
- Short article from 2019 about some kademlia extensions Storj implemented (published in 2007) to prevent Sybil and Eclipse attacks.
- Pocket Network Blog
- OG Pocket Network Blog
- Vitalik's blog
- Mike's blog
-
Joachim Neu
- See the articles under the Technical reports section
- Decentralized Thoughts by Ittai Ibrahim; the RSS feed is available here
The papers in this list were read by our team and would not be recommended to become more productive to contributing to Pocket.
We do not consider them bad, but time is limited so it is important to focus on what will bring the most learning value.
-
Blockchains Meet Distributed Hash Tables: Decoupling Validation from State Storage
- An "extended abstract" of how Authenticated Data Structures (i.e. Merkle Trees) could be "sharded" across nodes using Distributed Hash Tables (DHTs) to reduce the state required to be maintained and synched by each node.
Contents
- Home
- Persistence
- Changelog
-
Persistence
- Indexer
- Rpc
- Runtime
- State_Machine
-
Guides
- Roadmap
-
Guides
- Learning
- Guides
-
Guides
- Contributing
- Devlog
-
Guides
- Dependencies
-
Guides
- Releases
- Guides
- P2P
-
Shared
- Crypto
- Shared
-
Shared
- Modules
-
Build
- Config
- Consensus
-
Guides
- Telemetry
- Utility
- Logger