## Week 12 and Week 13 Updates: ### Progress on ePBS Implementation: - [PR #14394](https://github.com/prysmaticlabs/prysm/pull/14394): Moved handling of PTC messages from sync package to chain package(Potuz) - [PR #14420](https://github.com/prysmaticlabs/prysm/pull/14420): Added GetPTCVote helpers for forkchoice(Potuz) - [PR #14422](https://github.com/prysmaticlabs/prysm/pull/14422): Implemented handling of execution payload insertion in forkchoice(Potuz) - [PR #14395](https://github.com/prysmaticlabs/prysm/pull/14395): Added RPC endpoint for proposer to submit signed execution payload envelope(Terence) - [PR #14409:](https://github.com/prysmaticlabs/prysm/pull/14409)Work in progress on local payload handling (blocked pending payload ID cache changes)(Terence) - [PR #14419](https://github.com/prysmaticlabs/prysm/pull/14419): Added helper function to wait for PTC duty(Terence) - [PR #14380](https://github.com/prysmaticlabs/prysm/pull/14380): Implemented retrieval of payload attestation data(Terence) - [PR #14440](https://github.com/prysmaticlabs/prysm/pull/14440): Demonstrated end-to-end local proposer workflow(Terence) ### Some challenges and important discussion we had - Discussion on payload ID cache key: Discussed changing from block root to block root + block hash for ePBS compatibility. - Memory consumption concerns: Potuz noted potential issues with PTC votes in nodes causing memory bloat in forkchoice. - Mockgen conflicts: Discussed challenges with maintaining mocks across ePBS and develop branches. - Caching strategy: Debated full payload caching vs. header-only caching for BN. - GetPTCVote helpers added to forkchoice: ```go func (f *ForkChoice) GetPTCVote(slot types.Slot) (primitives.PayloadStatus, error) ``` - Execution payload insertion in forkchoice: ```go func (f *ForkChoice) InsertExecutionPayload(ctx context.Context, payload *enginev1.ExecutionPayloadEnvelope) error ``` #### Implementation Details: - Local proposer workflow outlined by Terence: (VC is validator client, BN is beacon node) 1. VC calls `GetHeader` 2. BN caches Payload and `Blob_sidecar` 3. VC signs Header 4. VC calls `SubmitSignedHeader` 5. BN caches `SignedHeader` 6. VC calls `GetBlock` 7. BN inserts cached `SignedHeader` in the block 8. VC signs Block 9. VC calls `SubmitSignedBlock` 10. VC calls `GetExecutionPayloadEnvelope` 11. VC signs `ExecutionPayloadEnvelope` 12. VC calls `SubmitExecutionPayloadEnvelope` - Potuz suggested modifications: - Update signed header cache only if new header is better than existing. - Gate steps 10-12 by VC checking if signed header was by one of its serving keys. ### Focus for the next 2 weeks: - Implement and address issue [Add a builders blacklist for ePBS](https://github.com/prysmaticlabs/prysm/issues/14385) (kira) - Implement compute state root helper for payload envelope (Potuz) - Modify Payload ID cache to use block root + block hash as key (Potuz) - Break down [PR #14440](https://github.com/prysmaticlabs/prysm/pull/14440) into smaller, manageable PRs (Terence) - Design alternative to storing PTC votes in nodes to reduce memory consumption (Potuz)