Try โ€‚โ€‰HackMD

EPF Cohort 3 Dev Update 9 (pavignol)

I didn't post an update last week because I hadn't made much progress on the EPF front and was I busy working on a client for the KZG Ceremony. This week, I have 2 updates:

Added a REST implementation for the GetDuties endpoint

GetDuties is an endpoint that I started working on weeks ago, but because there was a bug with the prysm beacon node REST API, I was unable to complete it. Now that the bug has been fixed, I was finally able to merge this PR.

The GetDuties endpoint aggregates 8 Beacon REST APIs into a single one:

1 call to /eth/v1/validator/duties/attester/{epoch}
1 call to /eth/v1/validator/duties/attester/{epoch+1}
1 call to /eth/v1/validator/duties/proposer/{epoch}
1 call to /eth/v1/validator/duties/proposer/{epoch+1}
1 call to /eth/v1/validator/duties/proposer/{sync}
1 call to /eth/v1/validator/duties/proposer/{sync+1}
1 call to /eth/v1/beacon/states/head/committees?{epoch}
1 call to /eth/v1/beacon/states/head/committees?{epoch+1}

Once all the calls are made, aggregating the information is relatively straightforward. The way the information is presented in the REST API is different from how it is presented in the gRPC API, but with a few hashmaps it's pretty simple to reconstruct it. Because of the high number of Beacon API calls, the tests were the biggest chunk of this work since there are many edge cases are validation cases to test.

Made a C++ KZG Ceremony Client

This task is unrelated to the EPF, but I was interested in building a client for the KZG Ceremony and use this client to send my own contribution. The client is now mostly done and has the following features:

  • Supports Windows, Mac and a wide range of Linux distributions
  • Supports Ethereum and GitHub accounts
  • BLS signing
  • ECDSA signing for Ethereum accounts
  • Transcript verification
  • Contribution verification
  • Lightweight (the executable is around 3MB)

For the sake of language and framework diversity, I decided to build the client with C++. Current implementations are centered around Go, Rust or JavaScript, so it adds some diversity to the list of clients that people can use.

Update on the PRs

There are only 5 endpoints remaining! We've come a long way from the start of this project and it's really nice to see that we're probably going to be able to 100% complete this project. 2 of the remaining tasks are on me, and now that my KZG Ceremony client implementation is done, I'll be able to focus more time in the next 2 weeks on those. I think they will also be relatively easy to implement since they are the stream versions of endpoints that have already been implemented (e.g. GetDuties -> StreamDuties).

Legend:

Symbol State
Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More โ†’
Not ready for PR
Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More โ†’
PR opened
Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More โ†’
Merged into develop
Done Owner Endpoint
Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More โ†’
pavignol GetDuties
Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More โ†’
pavignol GetBeaconBlock
Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More โ†’
pavignol ProposeBeaconBlock
Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More โ†’
pavignol PrepareBeaconProposer
Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More โ†’
pavignol GetAttestationData
Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More โ†’
dhruv ProposeAttestation
Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More โ†’
dhruv SubmitAggregateSelectionProof
Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More โ†’
dhruv SubmitSignedAggregateSelectionProof
Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More โ†’
pavignol ProposeExit
Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More โ†’
pavignol SubscribeCommitteeSubnets
Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More โ†’
manu SubmitValidatorRegistrations
Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More โ†’
manu ValidatorIndex
Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More โ†’
manu ValidatorStatus
Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More โ†’
manu MultipleValidatorStatus
Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More โ†’
pavignol SubmitSignedContributionAndProof
Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More โ†’
manu SubmitSyncMessage
Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More โ†’
dhruv GetSyncSubcommitteeIndex
Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More โ†’
dhruv GetSyncMessageBlockRoot
Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More โ†’
pavignol StreamDuties
Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More โ†’
pavignol WaitForChainStart
Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More โ†’
manu WaitForActivation
Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More โ†’
pavignol StreamBlocksAltair
Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More โ†’
pavignol DomainData
Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More โ†’
manu GetFeeRecipientByPubKey
Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More โ†’
manu CheckDoppelGanger
Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More โ†’
dhruv GetSyncCommitteeContribution