Binance에 프라이빗 요청을 할 때, 요청의 보안을 높이기 위해 메시지에 서명합니다. 메시지는 로컬 시간을 가져와 서명된 메시지 안에 보냅니다. 로컬 시간이 Binance 서버와 5초보다 큰 차이가 나면 요청이 거부됩니다. 따라서 로컬 시간이 동기화되었는지 확인하는 것이 중요하며, OS의 시간 동기화 메서드를 사용하여 이를 수행할 수 있습니다.
로직은 다음과 같습니다:
if (timestamp < (serverTime + 1000) && (serverTime - timestamp) <= recvWindow) {
// process request
} else {
// reject request
}
5000 이하의 작은 recvWindow를 사용하는 것이 좋습니다! 최대값은 60000밀리초를 초과할 수 없습니다.
GetServerTime 메서드를 호출하여 Binance 서버 시간을 확인할 수 있으며, 이는 Binance 서버의 시간을 반환합니다
RecvWindow 의 기본값은 5000이며, 이 값은 REST_API.BinanceOptions.RecvWindow 속성을 사용하여 늘릴 수 있습니다.
애플리케이션이 로컬 시계의 동기화 상태를 보장할 수 없는 경우, 예를 들어 안정적인 시간 서비스가 없는 헤드리스 서버의 경우, 모든 프라이빗 요청이 거부되도록 두는 대신 컴포넌트가 시간 차이를 보정하도록 할 수 있습니다. REST_API.BinanceOptions.UseServerTimeOffset을 True로 설정하고(기본값은 False입니다), Binance 서버 시계와 로컬 시계 간의 차이를 측정하고 싶을 때마다 새로운 SyncServerTime 메서드를 호출하십시오. 예를 들어 시작 시 한 번 또는 원하는 일정에 따라 호출할 수 있습니다. SyncServerTime은 GetServerTime을 호출하여 로컬 시계와 비교한 후 그 차이를 저장합니다. 이후로는 서명된 모든 요청의 타임스탬프에 저장된 오프셋이 포함됩니다.
측정된 차이는 읽기 전용 속성인 ServerTimeOffset을 통해 밀리초 단위로 확인할 수 있으며, Binance 서버 시계가 로컬 시계보다 앞서 있을 때 양수 값을 가집니다. 아무것도 자동으로 측정되거나 적용되지 않으며, SyncServerTime을 명시적으로 호출해야 하고 UseServerTimeOffset을 활성화해야 하므로, 서명된 요청은 애플리케이션이 요청할 때만 조정됩니다.