Re: 警告:システムを確認してください(助けてください)

人物: agaumoney
Cdeckerの投稿(2010年9月6日 03:54 UTC)

UNIXタイムスタンプを返す小さなサーバーを用意し、クライアントがそれを取得してクロックドリフト(時刻の差)を計算し、すべてのプロトコル関連の時刻をそのドリフトに基づいて算出する方式がいいだろう。時計はまだ多少ずれる(システム時計でもどのみちずれる)し、完全な同期は得られない(分散システムでは不可能)が、現在の問題は解決するだろう。

コードは約5行で、タイムスタンプを計算する際の単純な算術(加算)だ。

サーバーがすでにたくさん存在しているのに、なぜわざわざ新しいサーバーを立てるのか?

Bitcoin クライアントの肥大化は避けたいし、Bitcoin クライアントがシステム時刻を設定するのは絶対にダメだということには同意する。

しかし、エラーの場合に Bitcoin クライアントがログにメッセージを記録し、システム時刻の代わりにネットワーク時刻を使おうとするのは価値があるかもしれない。

既存のサーバーについては、Bitcoin クライアントにはすでに http があるよね?まあ、今ではほとんどの HTTP サーバーがヘッダーに日付を提供している。例えば Python では:

import os, re, urllib
info = urllib.urlopen('http://www.yahoo.com/').info()
regx = r'Date:\s+[A-Z][a-z]{2}, (\d{1,2}) ([A-Z][a-z]{2}) (\d{1,4}) (\d\d:\d\d:\d\d)'
d, M, Y, T = re.search(regx,str(info)).groups()
m = 1+"JanFebMarAprMayJunJulAugSepOctNovDec".index(M)/3
print '%04d.%02d.%02d-%s' % (int(Y), m, int(d), T)

(この出力形式は、システム時刻を設定したい場合に “date -us” でそのまま使える)

もちろん、Yahoo だけに頼るよりも、複数のサイトを確認した方がいいだろう。HTTP サーバーの時刻が正確に設定されている保証はないからね。😊