I'm trying to understand Ethash' Proof of work system, a.k.a. "Dagger-Hashimoto". I've read the readme
and the pages linked from that, but I guess I'm just not clever enough to wrap my head around what's written there. But this thing keeps haunting me, I really want to understand what is happening there. So I'm going to start off with writing some assumptions, and hopefully you can either confirm or correct those.
- At genesis, there is Block 0. This block will detemine the seed hash of the first Dagger dataset
- This seed hash is used to generate a 32MB cache.
- The word cache is confusing. It is not a part of the Dagger dataset, but cryptographically related. I don't understand how. Something with 256 parents and FNV
- The cache is used to generate the 1GB Dagger dataset
- This dataset is the same on every (mining) client.
- There exist two ways to computer hash, a "heavy" and a "lightweight" version. The "heavy" one needs the full dataset and the "lightweight" only needs the cache.
- The "heavy" hash function is required to mine, the "lightweight" is only used to verify. Or not. Because in the CL miner code it only seems to use the cache.
- I don't understand the actual structure of the dag file, nor that of the cache, so I also don't understand the actual hashing routine. Is there a way to visualize / explain it without getting too much into cryptography?
- After a x number of blocks, a new and bigger Dagger file is created based on the seed hash of block x and the whole thign starts again.
Writing this down raises so many questions! It's mind-boggling...I don't know where to start..