Hello everyone!

Last time, I was wrangling with whether I should continue working on nanoeth, my execution-layer Ethereum implementation, or contribute to an existing client to advance the state expiry agenda.

Ultimately, I've kicked the can down the road, and resolved to stick to my earlier plan. That plan is to to keep working on nanoeth, until I can validate blocks, excluding proof-of-work checking and EVM execution, but including Merkle root verification, which requires me to implement Merkle trees. Then I would implement Verkle trees. And then — if I have time, I would either:

A) Focus on improving nanoeth, adding an EVM implementation. I believe this is valuable, as mentionned in my second dev update.

I'd also try to contribute to the execution-specs repo, whose team (including fellow apprentices) are doing sensibly the same thing.

I don't believe it's a problem to have multiple parallel efforts in the same direction. In fact, it's pretty much one of Ethereum's development tenets.

B) Try to implement Verkle trees in an existing client.

Note that it's now apparent to me that it might a be difficult to help uncovering address space extension pitfalls without knowing more about the the EVM.

As for what I've actually been doing, well I mostly followed the plan outlined above. Blocks and block validation (as defined above) have been implemented, excepted Merkle root validation. I've also written an in-memory Merkle tree implementation, but I'm still working on debugging it.

Because of the particular nature of hashes (notably the avalanche property), it's difficult to know why the existing test cases (which hash a whole tree worth of stuff) fail. I will need to write my own smaller test cases (probably generating them from an existing implementation).