Does it mean the miners will mine as normal? If the Hash < Target, it'll be a main block. If the Target < Hash < Target*64, it'll be a sub block. Am I correct?
Right, a pool could just check all returned shares. If the share target is less than 1/64 of the main chain difficulty, then they don't even need to change that.
I was thinking than an improvement would be to use the merkle root as part of the reverse link.
Header A builds on Header B if
- they both have the same previous full block or B has A as its previous block
- The N LSBs of B's merkle root match the hash of A
By using the extra nonce, the pool can set the least significant bytes of the merkle root to anything they want. If N = 16 bits was used, this would require on average 64k hashes * merkle depth attempts by the pool. This could probably be done in software, but is maybe a little heavy.
This would keep collisions to a minimum. They don't really cause that much of a problem. Once a new block is found, they are mostly a tie breaking rule.
Sub-chain length probabilities
<= 64: 63.5%
<= 256: 98.23%
<= 512: 99.97%
<= 1024: 99.99999%
So, 1024 would mean that the sub-chain would almost never saturate the previous link field. Using a single byte would mean around every 50 - 100 blocks, the sub-chain would be saturated.
Full difficulty blocks would be worth 256 points and 1/64 difficulty headers would be worth 1 point. Miners should build against the longest chain.
This means that the sub-chain is only really used to break ties. To reverse a full block would require 256 links on the sub-chain. This requires 4X as much hashing as just creating an alternative block.
Blocks more than 1024 full blocks from the end of the chain are 128 points and 1/64 difficulty headers are worth nothing. This allows old low difficulty headers to be discarded after a while. A split more than 1024 blocks deep is already a major fork anyway.
Since there is no reward for broadcasting, the incentives to broadcast are different than for main chain blocks. Keeping a header back, means you can publish both that header and your new block at once. This instantly breaks any orphan tie in your favor. However, that is only useful if your block would have been orphaned otherwise.
Assuming a 1% orphan rate for main blocks, then holding back the header will increase revenue by at most 1%. In addition, the header is only worth something if nobody else finds a sub-chain header in the meantime, since if that happens, the public sub-chain has the same POW as your secret one. The odds of the next block happening before the next sub-chain header is 1 in 64. This means net benefit of holding back is 1/64 of 1%.
Given that mining pools can't be bothered to update the transaction inclusion rules by much, it is likely that a significant fraction wouldn't bother changing their code to hold back the sub-chain headers.