Podczas wykonywania prywatnego żądania do Binance wiadomość jest podpisywana w celu zwiększenia bezpieczeństwa żądań. Wiadomość zawiera lokalny czas i jest wysyłana w podpisanej wiadomości; jeśli czas lokalny różni się o więcej niż 5 sekund od czasu serwerów Binance, żądanie zostanie odrzucone. Dlatego ważne jest, aby zweryfikować, czy czas lokalny jest zsynchronizowany; można to zrobić za pomocą metody synchronizacji czasu właściwej dla systemu operacyjnego.
Logika jest następująca:
if (timestamp < (serverTime + 1000) && (serverTime - timestamp) <= recvWindow) {
// process request
} else {
// reject request
}
Zaleca się używanie małego recvWindow wynoszącego 5000 lub mniej! Maksymalna wartość nie może przekraczać 60000 milisekund.
Można sprawdzić czas serwera Binance, wywołując metodę GetServerTime, która zwróci aktualny czas serwera Binance.
Wartość domyślna RecvWindow wynosi 5000; można ją zwiększyć przy użyciu właściwości REST_API.BinanceOptions.RecvWindow.
Jeśli Twoja aplikacja nie może zagwarantować, że zegar lokalny pozostaje zsynchronizowany, na przykład w przypadku bezobsługowego serwera bez wiarygodnej usługi czasu, możesz pozwolić komponentowi skorygować to przesunięcie, zamiast dopuszczać do odrzucania każdego żądania prywatnego. Ustaw właściwość REST_API.BinanceOptions.UseServerTimeOffset na True (domyślnie False) i wywołuj nową metodę SyncServerTime za każdym razem, gdy chcesz zmierzyć różnicę między zegarem serwera Binance a zegarem lokalnym, na przykład raz przy uruchomieniu lub według własnego harmonogramu. SyncServerTime wywołuje GetServerTime, porównuje wynik z zegarem lokalnym i zapisuje różnicę. Od tego momentu znacznik czasu każdego podpisanego żądania uwzględnia to zapisane przesunięcie.
Zmierzona różnica jest dostępna za pośrednictwem właściwości tylko do odczytu ServerTimeOffset, wyrażonej w milisekundach, dodatniej, gdy zegar serwera Binance wyprzedza zegar lokalny. Nic nie jest mierzone ani stosowane automatycznie, metoda SyncServerTime musi zostać wywołana jawnie, a właściwość UseServerTimeOffset musi być włączona, dzięki czemu podpisane żądanie jest korygowane wyłącznie wtedy, gdy zażąda tego aplikacja.