(Re: Amiller's high hash highway)
No I hadn't, that's interesting.
Ok, reading more. The rule is that you have 2 links, one to the previous block and one to the best (lowest) hash before previous that beats previous. He uses number of leading zeros rather than has value for some reason. He has a big discussion that there is probably only 1 "best" hash in that context. Using the full value means that you are pretty much guaranteed that.
If 100 billion hashes are performed, then each hash has an equal chance of being the best. The fact that there is a difficulty threshold means some never become block headers, but the best ones always will, so it doesn't affect the result.
This means that the best hash so far (ignoring the previous block for some reason) will on average be 50% of the way back, in terms of POW. It splits the chain into 2 equally important halves. Each step backwards would decrease total POW by on average 50%, so it takes log(total POW / POW(genesis)) steps to get back the genesis block.
Blocks that don't have the 2nd link would have to be ignored (so assumed to have a worthless (infinitely high) hash). So, blocks after 270k wouldn't be allowed to link to blocks before 270k and 270k would link to the genesis block. Effectively, the blocks from 1 to 269999 would be considered to have an infinite hash.
[edit]
Reading even more. The reason for taking zeros is so that collisions can occur.
If the highest hash has 50 zeros, then there will be 2 hashes with 49 and 4 hashes with 48 and so on.
The "up" link goes to the most recent block with more zeros than this block (or the genesis block, if none).
If the current block had 47 zeros, then you could find all 48 zero blocks following the chain
while (block != genesis)
if (block.zeros == 48) {
addToList(block)
block = block.prev;
} else if (block.zeros < 48) {
block = block.up;
} else {
block = block.prev;
}
If the current block has less than 48, you go upwards. This will skip blocks with zeros less than or equal to the current block, so will never skip a 48 block.
If the current block has 48, then add it to the list and go to the previous block.
If the current block has more than 48, you need to go to the previous block too, since using the up link could cause 48's to be skipped.
This can be used to find a chain of each type of difficulty. This gives more points, so less variance to work out total difficulty.
However, even just showing the 50 zero header would be strong evidence of the total hashing power. The up link would point directly to the genesis block. It would also show the minimum work against that genesis block.