見ていたコードが間違っている。適用されるコードはこちらだ:
bool CBlock::CheckBlock() const
{
...
// タイムスタンプをチェック
if (nTime > GetAdjustedTime() + 2 * 60 * 60)
return error("CheckBlock() : block timestamp too far in the future");
...
bool CBlock::AcceptBlock()
{
...
// 前のブロックに対してタイムスタンプをチェック
if (nTime <= pindexPrev->GetMedianTimePast())
return error("AcceptBlock() : block's timestamp is too early");
タイムスタンプは未来方向には最大2時間に制限されている。前のブロックより早い時刻にすることはできるが、直近11ブロックの中央値より大きくなければならない。このようにしている理由は、前のブロックのタイムスタンプが未来すぎた場合(今回起きたように)、次のブロックで時刻を修正できるようにするためだ。