The block interval follows exponential distribution of lambda=1/10, with mean = 1/lambda = 10 and variance = square of the mean = 100.
It is not uncommon to see block intervals of >1 hour and that could be really annoying. Having two blocks too close to each other is also a waste of block space.
As the variance is the square of the mean, we may decrease the variance by decreasing the mean but that would have other side effects.
It is possible to decrease the variance to 50 while keeping the mean as 10:
1. A miner will first mine the following message
|Version|hashPrevBlcok|hashCoinbase|Bits|Nonce-a|
until it is below the target. The difficulty is determined to archive an average successful rate of 5 minutes. hashCoinbase is the 256-bit hash of the desired reward transaction. The miner won't broadcast the message
2. When a valid hash is found in the step 2, the miner will start to hash the following message:
|Version|hashPrevBlcok|hashCoinbase|Bits|Nonce-a|hashMerkleRoot|Time|Nonce-b|
until it is below the target. The average successful rate is also 5 minutes. This is the valid block to broadcast to the network
3. A block is valid if it satisfies all the following requirements:
- Hash of |Version|hashPrevBlcok|hashCoinbase|Bits|Nonce-a| is below the 5-minutes target
- Hash of |Version|hashPrevBlcok|hashCoinbase|Bits|Nonce-a|hashMerkleRoot|Time|Nonce-b| is below the same 5-minutes target
- Hash of the reward transaction is same as hashCoinbase
- All other existing rules, e.g. all transactions are valid, timestamp requirements
The block time interval will follow Erlang distribution (
http://en.wikipedia.org/wiki/Erlang_distribution) with lambda=1/5 and k=2. The mean is k/lambda=10, and variance=k/(lambda^2)=50
The block header size will be expanded from 80bytes to 116bytes.
We can further decrease the variance by decreasing the difficulty while requesting more nonce. For example, we can decrease the difficulty to 1/3, then:
First step:
|Version|hashPrevBlcok|hashCoinbase|Bits|Nonce-a|
Second step:
|Version|hashPrevBlcok|hashCoinbase|Bits|Nonce-a|Nonce-b|
Final step:
|Version|hashPrevBlcok|hashCoinbase|Bits|Nonce-a|Nonce-b|hashMerkleRoot|Time|Nonce-c|
The mean block time interval is still 10, but the variance decreases further to 33.33
For each additional nonce requested, 4 bytes additional bytes are needed
Why need a hashCoinbase? We need to make sure people can't steal the partially completed block of other miner
It may make some types of one-confirmation double spend attack easier. I'm not very sure.
Any comments?