본문 바로가기
Flutter

Binace API timeStamp Error 해결방법

by 호빵맨 2023. 7. 15.

1. Binance API timeStamp 란?

Binance API 중 Signed EndPoint에 접근하려면 Secure Key와 API Key, timeStamp가 필요합니다.

Secure Key로 timeStamp와 쿼리를 암호화 해서 GET 또는 POST로 보내게 됩니다.

API Key는 Header에 넣어서 보냅니다.

그중 timeStamp는 실시간으로 시가가 변하는 코인거래 특성상 주문한 시간과 쿼리를 받은시간의 차이가 크면 거래가 되지 않도록 하기위해 존재합니다. 현재 시세로 주문을 넣었는데, 네트워크 지연에 의해 5초 후에 주문이 된다면 곤란하겠지요.

Binance의 timeStamp 로직은 다음과 같습니다.

Binance API timeStamp Logic

 

2. Binance timeStamp Error Code 와 msg

TimeStamp가 맞지 않으면 다음과 같은 에러가 발생합니다.

-1021 INVALID_TIMESTAMP
Timestamp for this request is outside of the recvWindow.
Timestamp for this request was 1000ms ahead of the server's time.

에러 코드는 -1021이며, msg는 두개의 message 중 해당 되는 메지시가 발송됩니다.

API Response body에 json Type으로 코드와 메시지가 전송됩니다.

{"code":-1021,"msg":"Timestamp for this request was 1000ms ahead of the server's time."}
반응형

3. Binance API timeStamp 문제 해결 방법

두가지 방법이 있습니다.

첫번째는 Local Time을 동기화 시키는 것입니다. 의외로 많은 기기들이 자동시간동기화를 설정해 놓지 않아 시간이 지날수록 시간이 표준시간과 차이가 발생하게 됩니다. 이경우 시간동기화로 쉽게 해결이 가능합니다.

 

두번째는 timeStamp 값을 서버 값을 사용하는 것입니다.

이 경우 계정 정보 조회등의 조회 목적으로만 사용하셔야 합니다. 거래용 코드에 아래의 방법을 사용하여 발생 할 수 있는 손실에 대해서는 책임지지 않습니다. 모든 거래는 거래당사자의 책임입니다.

 

제 경우 앱 제작에 사용 하였으며, 이상하게 어느때는 timeStamp 값이 맞고 어떤 때는 -1021 에러가 발생 했습니다. 시간동기화를 다시 시켜도 잘 맞지 않는 상황이 발생하여 timeStamp 값을 Binance Server timeStamp 값을 읽어와 사용했습니다.

// Flutter Dart Code

var timeResponse = await http.get(Uri(scheme: 'https', host: baseEndPoint, path: '/fapi/v1/time'));
int timeStamp = jsonDecode(timeResponse.body)['serverTime']

Binance Server timeStamp 값은 https://binance-docs.github.io/apidocs/#change-log 에서 이용하려는 API 의 server time EndPoint를 확인하시면 됩니다.

https://binance-docs.github.io/apidocs/#change-log

댓글