Quando si esegue una richiesta privata a Binance, il messaggio viene firmato per aumentare la sicurezza delle richieste. Il messaggio include l'ora locale e la invia all'interno del messaggio firmato; se l'ora locale differisce di più di 5 secondi dall'ora dei server Binance, la richiesta verrà rifiutata. È quindi importante verificare che l'ora locale sia sincronizzata; ciò è possibile utilizzando il metodo di sincronizzazione dell'ora del proprio sistema operativo.
La logica è la seguente:
if (timestamp < (serverTime + 1000) && (serverTime - timestamp) <= recvWindow) {
// process request
} else {
// reject request
}
Si consiglia di utilizzare un recvWindow ridotto di 5000 o inferiore! Il massimo non può superare 60000 millisecondi.
È possibile verificare l'ora del server Binance chiamando il metodo GetServerTime, che restituirà l'ora del server Binance
Il RecvWindow è impostato per impostazione predefinita a 5000; questo valore può essere aumentato usando la proprietà REST_API.BinanceOptions.RecvWindow.
Se la propria applicazione non può garantire che l'orologio locale rimanga sincronizzato, ad esempio un server headless privo di un servizio orario affidabile, è possibile lasciare che il componente corregga lo scarto anziché vedere ogni richiesta privata rifiutata. Impostare REST_API.BinanceOptions.UseServerTimeOffset su True (per impostazione predefinita False) e chiamare il nuovo metodo SyncServerTime ogni volta che si desidera misurare la differenza tra l'orologio del server Binance e l'orologio locale, ad esempio una volta all'avvio o secondo una pianificazione a propria scelta. SyncServerTime chiama GetServerTime, la confronta con l'orologio locale e memorizza la differenza. Da quel momento in poi, il timestamp di ogni richiesta firmata include tale scarto memorizzato.
La differenza misurata è disponibile tramite la proprietà di sola lettura ServerTimeOffset, espressa in millisecondi, positiva quando l'orologio del server Binance è avanti rispetto all'orologio locale. Nulla viene misurato o applicato automaticamente: SyncServerTime deve essere chiamato esplicitamente e UseServerTimeOffset deve essere abilitato, quindi una richiesta firmata viene modificata soltanto quando l'applicazione lo richiede.