Binance | プライベートリクエスト時刻

Binanceにプライベートリクエストを行う際、リクエストのセキュリティを高めるためにメッセージは署名されます。メッセージはローカル時刻を取得して署名済みメッセージ内に送信します。ローカル時刻がBinanceサーバーと5秒を超える差がある場合、リクエストは拒否されます。そのため、ローカル時刻が同期されていることを確認することが重要です。これは、OSの時刻同期メソッドを使用して行うことができます。

 

ロジックは以下のとおりです:

 

if (timestamp < (serverTime + 1000) && (serverTime - timestamp) <= recvWindow) {
// process request
} else {
// reject request
}

 

recvWindow は 5000 以下の小さい値を使用することをお勧めします。最大値は 60000 ミリ秒を超えることはできません。

 

GetServerTimeメソッドを呼び出すことでBinanceサーバーの時刻を確認できます。これはBinanceサーバーの時刻を返します

 

RecvWindow のデフォルト値は 5000 です。この値はプロパティ REST_API.BinanceOptions.RecvWindow を使用して増やすことができます。

 

アプリケーションがローカルクロックの同期を保証できない場合、例えば信頼できる時刻サービスを持たないヘッドレスサーバーなどでは、すべてのプライベートリクエストが拒否されるのではなく、コンポーネントにドリフトを補正させることができます。REST_API.BinanceOptions.UseServerTimeOffsetTrue(デフォルトは False)に設定し、Binanceサーバーのクロックとローカルクロックの差を測定したいときに新しい SyncServerTime メソッドを呼び出します。例えば、起動時に一度だけ、または任意のスケジュールで呼び出すことができます。SyncServerTime は GetServerTime を呼び出し、ローカルクロックと比較して、その差を保存します。以降、署名済みの各リクエストのタイムスタンプには、保存されたそのオフセットが含まれます。

 

測定された差は、読み取り専用プロパティ ServerTimeOffset を通じてミリ秒単位で取得でき、Binanceサーバーのクロックがローカルクロックより進んでいる場合は正の値になります。何も自動的に測定または適用されることはなく、SyncServerTime を明示的に呼び出し、かつ UseServerTimeOffset を有効にする必要があるため、署名済みリクエストはアプリケーションが要求した場合にのみ調整されます。