Quando você faz uma requisição privada à Binance, a mensagem é assinada para aumentar a segurança das requisições. A mensagem pega o horário local e o envia dentro da mensagem assinada; se o horário local tiver uma diferença maior que 5 segundos em relação aos servidores da Binance, a requisição será rejeitada. Então, é importante verificar se seu horário local está sincronizado, você pode fazer isso utilizando o método de sincronização de horário do seu SO.
A lógica é a seguinte:
if (timestamp < (serverTime + 1000) && (serverTime - timestamp) <= recvWindow) {
// process request
} else {
// reject request
}
É recomendado utilizar um recvWindow pequeno, de 5000 ou menos! O máximo não pode ultrapassar 60000 milissegundos.
Você pode verificar a hora do servidor da Binance chamando o método GetServerTime, que retornará a hora do servidor da Binance
O RecvWindow tem o padrão 5000; este valor pode ser aumentado utilizando a propriedade REST_API.BinanceOptions.RecvWindow.
Se sua aplicação não puder garantir que o relógio local permaneça sincronizado, por exemplo, um servidor headless sem um serviço de horário confiável, você pode deixar o componente corrigir o desvio em vez de ter todas as requisições privadas rejeitadas. Defina REST_API.BinanceOptions.UseServerTimeOffset como True (por padrão False) e chame o novo método SyncServerTime sempre que quiser medir a diferença entre o relógio do servidor da Binance e o seu relógio local, por exemplo, uma vez na inicialização ou em um intervalo definido por você. SyncServerTime chama GetServerTime, compara com o relógio local e armazena a diferença. A partir daí, o timestamp de cada requisição assinada passa a incluir esse desvio armazenado.
A diferença medida está disponível através da propriedade somente leitura ServerTimeOffset, em milissegundos, sendo positiva quando o relógio do servidor da Binance está adiantado em relação ao seu relógio local. Nada é medido ou aplicado automaticamente, SyncServerTime deve ser chamado explicitamente e UseServerTimeOffset deve estar habilitado, portanto uma requisição assinada só é ajustada quando a aplicação solicitar isso.