Skip to content

Learning Readme

user_name edited this page Feb 3, 2023 · 4 revisions

Learning Pocket

This is a live document on how to get ramped up on all the knowledge you need to contribute to the Pocket Protocol.

🏁 Where to Start?

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.

  1. 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
  2. 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 run make from to see all the available commands.
  3. Get an understanding of the V1 spec summaries by reading about the 4 modules in our docs. (2-4 hours)

  4. Optional: Go through Otto's Pocket Guide presentations to understand how Pocket V0 works.

    • Volume 1: The Claim and Proof lifecycle
    • Volume 2: Block, Chains and Staking
    • Volume 3: For The Builders and Hackers I - History Lesson
    • Volume 4: For The Builders and Hackers II - History Lesson Continued
  5. 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
  6. 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.
  7. 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.
  8. 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
  9. View our V1 Roadmap. (10 mins)

    • This will give you insight into our development & release timelines
  10. Get a sense of all the open issues and tickets in out Github project. (1 hour)

  11. 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)

  12. 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.

🏗️ Technical Foundation

Github Development

If you're not familiar with the Github workflow, you can reference the First Contributions repository.

Golang

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:

Mermaid

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 🤓

📚 Technical References

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.

Pocket Specific

Consensus

Merkle Trees

  • 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
  • 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)

Persistence

Ethereum

Cryptography

P2P

Blogs

Specific Article Recommendations

General Subscription Recommendations

❌ Non-suggested reads

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.

Clone this wiki locally