PoT verification during genesis sync

The current recommendation for PoT verification during deep sync (more than a couple of dozen blocks) is to apply probabilistic verification – validate the seed-output parent-child chain for all blocks, then randomly select ~200 blocks and verify AES iterations on those (or less if we are syncing less than 200 blocks).
Eventually, though we would still like to verify PoT every block for the strong guarantee that the chain is valid, so I did some calculations on how long that will take.

  • Say it takes ~200 ms (rounded up) on one core of my laptop to verify 1 slot/sec worth of iterations (currently 183.3 million iterations) PoT with 8 checkpoints (22 912 500 iterations per checkpoint).
  • If 1 block is on average every 6 slots, I can verify it in 1.2 seconds on one core and 4 blocks on 4 cores.

To give a perspective, we have Gemini 2a network that has been running for about 11 month now and at the time of writing has 4 935 635 blocks. If they had PoT it would take about 17 days to fully verify on 4 cores or 9 days on 8 cores. This is about 4x less than what we initially thought would be (namely ~330 days/8 cores = 40 days of verification).

Note that the same holds if we don’t parallelize PoT verification in one block, only across blocks. Then we can consider 8 blocks as 8 “checkpoints” with 6*183 300 000 = 1 099 800 000 iterations each if a block is on average every 6 slots.