Erigon embedded validator client
Objective: Embedd a Eth2 Consensus Layer into Erigon and enabling embedded validators without having to run any validator client and consensus client alongside it.
Main Milestones:
Full-Client Sync Protocol
1) Checkpoint sync
Erigon already uses checkpoint sync by default from the lightclient, the only difference is that the state is not discarded it is stored in the Database.
2) First sync download
First Sync is going to be exactly lightclient sync, this is to allow us to immediately verify the block before the head. once that is done we can use the ParentRoot of that block to reverse-sync download the missing blocks that separates the fetched state from the head of the chain. This allows us to sync up any number of blocks by doing only 1 BLS verification (which is the main bottleneck). Basically by having a block verified that close to the head, will allow us to to just download all blocks by just checking that the parent root of the successive block is equal to the root of the current block and so on, until we reconnect with the state.
3) First sync processing
process each block in order by slot against our state once we reconnected it to the state we have.
4) Sync
If we are close enough we can just sync each block one by one, by just requesting future slots and process them against our state.
Then rinse and repeat.
Here is a schematic on how to do the Sync:

Validator section TBD.
Progress tracking
Erigon embedded validator client
Objective: Embedd a Eth2 Consensus Layer into Erigon and enabling embedded validators without having to run any validator client and consensus client alongside it.
Main Milestones:
Full-Client Sync Protocol
1) Checkpoint sync
Erigon already uses checkpoint sync by default from the lightclient, the only difference is that the state is not discarded it is stored in the Database.
2) First sync download
First Sync is going to be exactly lightclient sync, this is to allow us to immediately verify the block before the head. once that is done we can use the ParentRoot of that block to reverse-sync download the missing blocks that separates the fetched state from the head of the chain. This allows us to sync up any number of blocks by doing only 1 BLS verification (which is the main bottleneck). Basically by having a block verified that close to the head, will allow us to to just download all blocks by just checking that the parent root of the successive block is equal to the root of the current block and so on, until we reconnect with the state.
3) First sync processing
process each block in order by slot against our state once we reconnected it to the state we have.
4) Sync
If we are close enough we can just sync each block one by one, by just requesting future slots and process them against our state.
Then rinse and repeat.
Here is a schematic on how to do the Sync:
Validator section TBD.
Progress tracking