## Week 20 and Week 21 Updates: ### Progress on ePBS Implementation: #### All-in-one Fork Choice Analysis Key Components: ```golang type AvailabilityCommittee struct { Validators []ValidatorIndex VotingPeriod uint64 // 7 seconds into slot Threshold uint64 // Majority threshold } type BlockBranch struct { Empty bool // B_empty: Block without payload Full bool // B_full: Block with payload Root Root // Block root } ``` Major Improvements: - Unifies fork choice rules for ePBS, FOCIL, and DAS - Eliminates need for complex builder boost mechanisms - Introduces staged release of block data - Simplifies payment processing logic #### Critical Technical Challenges **Withdrawal Handling Issue:** ```golang // Current Challenge func get_expected_withdrawals(state BeaconState) error { if !is_parent_full(state) { return ErrIndeterminateWithdrawals } // Process withdrawals } ``` **Proposed Solutions:** 1. Client-side Caching: ```golang type BeaconNode struct { withdrawalCache map[Root][]Withdrawal } func (bn *BeaconNode) GetWithdrawals(blockRoot Root) []Withdrawal { return bn.withdrawalCache[blockRoot] } ``` 2. State-level Caching: ```golang type BeaconState struct { WithdrawalsCache []Withdrawal // Instead of just root } ``` **Builder Staking Security:** Current Risk: ```golang type Builder struct { Balance uint64 // Can potentially drain balance after bidding } ``` Proposed Solutions: ```golang // Option 1: Execution Request Based type BuilderBid struct { MaxBid uint64 ValidUntil uint64 } // Option 2: Excess Balance Only type Builder struct { MinStake uint64 // 1 ETH ExcessLimit uint64 // Maximum bid allowed } ``` ### Implementation Progress Fork Choice Updates: ```golang func (f *ForkChoice) ProcessBlock(block *BeaconBlock) error { // New dual-branch handling empty := createEmptyBranch(block) full := createFullBranch(block) // Process AC votes if hasACMajority(block) { return f.processFull(full) } return f.processEmpty(empty) } ``` ### Focus for next 2 weeks Technical Priorities: - Implement client-side withdrawal caching - Develop builder stake management system - Update validator specifications - Create test scenarios for empty block handling #### Outstanding Questions Builder Security: - How to handle builder slashing? - What's the optimal minimum stake? - How to prevent stake drainage attacks? Withdrawal Handling: - Performance implications of caching - Race condition prevention - State bloat considerations #### Client Implementation Status **Prysm:** ```golang // New implementations needed type BlockProduction struct { WithdrawalCache cache.WithdrawalCache BuilderRegistry registry.BuilderStakes ACVoteProcessor votes.ACProcessor } ``` **Other Clients:** - Teku: Aligned with client-side caching approach - Awaiting feedback from remaining clients **Misc:** - Presentation and final report for devcon
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.