# EPF6 - Week 5 Updates ## tl;dr - Refined the proposal to make it concise, finally opened a [PR](https://github.com/eth-protocol-fellows/cohort-six/pull/177). - Several discussions about technical stuffs with Nando. - Started coding! ## Details I dedicated most of my time to 1) refine the proposal ([PR](https://github.com/eth-protocol-fellows/cohort-six/pull/177) is open now.) and 2) discuss with [Nando](https://github.com/fernantho) about the scope of our project and document management. ### Finalized the Proposal ![image](https://hackmd.io/_uploads/B1u508cUle.png) ![image](https://hackmd.io/_uploads/S1P3R8cLee.png) Last week, we kindly requested to our mentors and Etan for reviewing our proposal. After few rounds of review-and-apply, I believe we made a concrete proposal document that is clearly scoped (and our mentors liked it 👍). You can check the [PR](https://github.com/eth-protocol-fellows/cohort-six/pull/177) that adds the proposal in the EPF repository. There were two major decisions this week: - **Concised the proposal**: By directing a link to our [spec document](https://hackmd.io/@junsong/rkAN9lIIxx), I don't have to open an extra PR to change the design details that might be flexible. Also deleted a bunch of lines so it is better in terms of readability. - **UX consideration**: UX matters, as we aim for our project to be used by real users in this ecosystem. After discussing with [Nando](###Discussion-with-Nando) and Radek, we decided to fix the request/response structure. A response now contains its path as below, so now it's more self-contained. Also `state_root` is renamed to `root` and placed at the upper level of the object: so this reduces redundancy. ```json { "version": "electra", "execution_optimistic": false, "finalized": true, "data": { "result": [ { "path": ".validators[100].withdrawal_credentials", "value": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", "proof": [ "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2" ] }, { "path": ".len(validators)", "value": 1000, "proof": [ "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2" ] } ], "root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2" } } ``` Based on the proposal, we could also be assigned to the meta issues. - [SSZ Query Language #15343](https://github.com/OffchainLabs/prysm/issues/15343) - [Merkle proofs of everything #15344](https://github.com/OffchainLabs/prysm/issues/15344) ### Discussion with Nando Since speccing is one of the core part of this project, collaborating with Nando helps me a lot to broaden my horizens and also to consider bigger pictures of the project. Discussion of this week started by Nando's [open questions](https://github.com/fernantho/SSZ-QL-and-GMP/tree/16c4208fa9349a6f8b13c58c52eb7fa92d7341f2?tab=readme-ov-file#open-questions-to-be-considered). Some notable discussions are below: #### Adding query paths in the response ➡️ Yes! Nando suggested two ways to specifying the response: ordering and include `path` string for each query result. I thought it would be better to include `path` string as the result is more self-explained, leading better expereicne for developers. #### Multiproof Type ➡️ Use basic multiproof. > I think we can stick to the "normal" multiproof despite some benefits in terms of performance. The reason is: > - It fits well with current consensus specs, so we don't need to explain about what this algorithm looks like, etc. > - Performance matters, but in my point of view, multiproof still increases significant performance in terms of space. More complex algorithms are necessary for the case of user queries for 10+ paths, which doesn't take place so often. Excerpt from my message. There are several candidates for multiproofs, but we finalized ourselves to use the _basic_ multiproof that is already [specified](https://github.com/ethereum/consensus-specs/blob/dev/ssz/merkle-proofs.md#merkle-multiproofs) in `consensus-specs`. ### And... started coding 💻 > [Diff](https://github.com/OffchainLabs/prysm/compare/8623a144d92659ed89f8830eb4d7f4c3000be724..syjn99:prysm:f152e192859609e1f1d5f04ecb12d662aafe93da) I finally started coding myself. Not yet implemented core logics, but there are some confirmed things to do for API handlers. ## What's next - Create a fine-grained task list (reference: https://github.com/OffchainLabs/prysm/issues/12991) - Discuss remaining agendas with Nando. - How do we maintain our spec document? - [Radek's comment](https://hackmd.io/romP2sD0T8SpJpnbO8nnHQ?comment=a426dc3f-694a-4ebe-b4c5-40c2e9115e11&utm_source=comment-card&utm_medium=icon): For better UX, how can we provide an unified structure for multiproof and non-multiproof? ## Postscript ![image](https://hackmd.io/_uploads/H1vD5v9Ixl.png) > [Link](https://discord.com/channels/595666850260713488/595701319793377299/1395368458384048188) to the message. Happy to find out that our project would be quite useful!