EPF Dev Update #9

Happy New Year everyone!

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 →

Summary for this week:

  • Add Beacon API endpoint to download blobs by block id. PR merged.
  • Set up a Lighthouse/Geth node on EIP-4844 devnet-3
  • Builder spec changes for Capella and EIP-4844, PRs under review.

Next week:

  • Work on tests for the new download blobs API
  • Add download blob endpoint to Beacon API spec. Issue here
  • Continuing work on builder updates for EIP-4844. Draft PR here

New Beacon API endpoint to download blobs by block ID

Pull request: lighthouse#3830

My PR was merged to eip4844 branch earlier this week.

Since this endpoint isn't part of the standard API yet, I have implemented it under the /lighthouse path for now - this is where the "non-standard" endpoints sit. There is an open issue to formally add this to Beacon API spec, which I plan to work on soon.

Testing the endpoint

If you're interested in trying this out, below are the steps:

  1. Start a Lighthouse/Geth testnet using the Lighthouse local_testnet script from here
  2. Once the network has reached the EIP-4844 fork (epoch 2), a blob transaction can be submitted using blob-utils:
blob-utils tx --rpc-url http://localhost:6001 --blob-file ./blob.txt -to 0xC8D369B164361A8961286CFbaB3bc10F962185a8 --private-key 45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8 --gas-limit 210000 --gas-price 20000000000 --chain-id 4242 --priority-gas-price 2000000000 --max-fee-per-data-gas 3000000000
  1. Then the blob sidecar can be retrieved using block ID, here using slot as an example:
curl http://localhost:8001/lighthouse/beacon/blobs_sidecars/19823

Below are some example outputs:

Output from a slot with no blobs:

curl -s http://localhost:8000/lighthouse/beacon/blobs_sidecars/1617 | jq .

{
  "data": {
    "beacon_block_root": "0x8cc186bbb9ae722211764d54d4eaaab3a383e6ca09dc9a08521b722905d81a73",
    "beacon_block_slot": "1617",
    "blobs": [],
    "kzg_aggregated_proof": "0xc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
  }
}

Output with blob:

curl http://localhost:8000/lighthouse/beacon/blobs_sidecars/1616 | jq .

{
  "data": {
    "beacon_block_root": "0x143150075e8fbd835397c57441d66f5b2d39f5b4c894935f7c964c90899ed7e7",
    "beacon_block_slot": "1616",
    "blobs": [
      "0x3000000000000000000000000000000000000000000000000000000000000000000000000000000000..."
    ],
    "kzg_aggregated_proof": "0xa5926e75519eef67bd4f40cc256e815173c7b4e9fcdd8400ee007692447187e2adc7ddc00ed7b00e680d4cb8d0ae48f0"
  }
}

Output from a pre 4844 block:

curl -s http://localhost:8000/lighthouse/beacon/blobs_sidecars/genesis | jq .

{
  "code": 404,
  "message": "NOT_FOUND: Blob with block root 0x9247…c507 is not in the store",
  "stacktraces": []
}

I've started working on some tests for this endpoint, and it has been quite challenging as it requires a bit of work to get the test infra setup, e.g. the mock execution layer would need to support forkChoiceUpdatedV2, getPayloadV3, as well as the get blobs method - it needs to be able to produce valid blobs sidecars. I've got some help from @realbigsean, so hopefully I'll get this working next week!

Running a node on devnet-3

I've created a docker-compose setup for running a node on devnet v3: https://github.com/jimmygchen/devnet-v3.

I was able to sync a Lighthouse node all the way to slot 10207, which is the maximum slot that we can sync to right now as the chain has stalled there. I'm not sure exactly what happened, there were some discussions on R&D discord #4844-testing channel, but this is great effort from the core devs as we've now got multiple clients running on devnet-3, and the group is now looking to start planning for devnet v4.

Beacon API & Builder Spec changes for Capella & EIP-4844

Piper's AMA session

Last week we had an AMA session with Piper Merriam in the EPF Office Hour call. It was very insightful as Piper was quite generous with sharing his own views and experiences. He gave some really good advices on the fellowship program and becoming a core dev. What he said really resonated with me, and I hope to continue to create positive impact on things I deeply care about, hopefully beyond the EPF program, which is now just less two months to the finishing line!

I've dropped my notes here. I would encourage anyone interested in pursing protocol development to watch this recording here:
https://drive.google.com/file/d/16V09u55059yYWwpGkrgmx-MLuVQWj2ar/view?usp=sharing

And that's all for now, thanks for reading!

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 →