What are you talking about? That rule has nothing to do with IPs, in fact there is nothing in the block itself about IPs. The IP listed by blockchain (if there is one) has nothing to do with the node that actually mined the block, it's just the IP of the node that first relayed the block to blockchain.info.
youre right ip does not matter , was also wondering why it exepted 8 blocks bit the check is median time.
rule 13 is about Median time.... thats a hard concept.
block #299457 2014-05-06 23:25:38
----
block #299456 2014-05-06 23:02:13
block #299455 2014-05-06 22:54:57
block #299454 2014-05-06 22:51:31
block #299453 2014-05-06 22:50:08
---
block #299252 2014-05-06 22:37:53
---
block #299251 2014-05-06 22:27:03
block #299250 2014-05-06 22:21:21
block #299249 2014-05-06 22:17:07
This means that you can NOT create more then 6 blocks in a row less then 10 minutes apart ,
Rule 13. Reject [a block] if timestamp is the median time of the last 11 blocks or before
This can be interpreted in a following way: If the attacker will try to mine his own private blockchain fork, other nodes will almost certainly reject it, if his length is more than 6 blocks, since the timestamp of the first such mined block will be almost certainly older than the median time of the last 11 mined blocks. Replacing 6 or less blocks is possible, but when attacker tries to replace 7 or more blocks, the first one will be too old to be accepted.
TL;DR: Six bitcoin confirmations is not an arbitrary number. If payee accepts a transaction with less than six confirmations, it is possible that the attacker, even without a majority of the hashpower, can launch a brute force attack by mining his private blockchain fork and reverse the transaction. With six or more confirmations, such an attack will be rejected by the Protocol rule 13 described above.
Note for programmers: The check is implemented in the method GetMedianTimePast() and called in method AcceptBlock(), file main.cpp:
bool CBlock::AcceptBlock(CValidationState &state, CDiskBlockPos *dbp)
{
...
// Check timestamp against prev
if (GetBlockTime() <= pindexPrev->GetMedianTimePast())
return state.Invalid(error("AcceptBlock() : block's timestamp is too early"));
If ghash.io does make a separate chain form the original chain , it needs to devote all its hashing power to the fake chain . and CAN NOT know when the next transaction will come.
so making a plasible fake chain at the same time is very hard if not imposible.
becaue you have to know when transactions are comming at forehand.