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