July 2022 Progress:
Light Clients
Last month, I described the LIP for standardizing the light client sync process. The LIP is just about ready for review, and I’ve made good progress implementing the changes.
Here is the status of each step:
1. Download and verify all headers for the longest chain.
Light clients already download the header chain, so no changes are needed for this step.
2. Download and verify the HogEx transaction and MWEB header for the most recent block.
I’ve written the code for responding to an MSG_MWEB_COMMITMENT
getdata request with a new message containing the Merkle Block, HogEx transaction, and MWEB header. Tests were also written and everything appears to be working, so it’s ready to be submitted for review.
3. Download and verify the UTXO leafset bitmap.
The new getdata message type was added, as well as a new message for responding with the actual leafset.
Peers will be able to request a leafset for a recent block, but it may not be the most recent block. We only keep one working version of the UTXO leafset, so if an older leafset is requested, we need to “rewind” the leafset to the block height it’s requested for. Currently, I’m working on the code for performing this rewind.
4. Download the compact UTXOs and PMMR parent hashes.
The changes for this step have not yet been started.
I intend to wrap up the LIP this week and get it submitted for review. I should also be able to submit a PR for steps 2 & hopefully 3 before next month’s update.