[개발이야기] 고팍스 API 사용기[2] : 주문하기 성공 (invalid signature 오류 해결책)

in #kr6 years ago

고팍스 API를 이용하여 거래소에 주문을 내고 싶다는 생각에 시작한 프로젝트

지난 글 보기
[개발이야기] 고팍스 API 사용기[1] : 거래내역 가져오기 성공


지난 번 글에서 예제에 나오는 주문을 실행하였더니 signature 오류가 뜨는 것 까지 언급하였다.

오늘 퇴근 후 다시 작업 시작한다.

signature 오류의 원인을 찬찬히 살펴보았다. 문제는 signature를 만드는 시점의 데이터와 거래소로 보내는 데이터의 형태가 틀리기 때문에 signature오류가 발생하는 것 같다.

결국 아래 두 문장에서 request_body의 내용이 틀리다는 것으로 보인다.

#필수 정보를 연결하여 prehash 문자열을 생성함
what = nonce + method + request_path + json.dumps(request_body, sort_keys=True)

req = requests.post(url = 'https://api.gopax.co.kr' + request_path, headers = custom_headers,json=request_body)

디버깅을 해 본다.
what에는 아래 문장이 들어가 있다.

'1526391980.336POST/orders{"amount": 2.0, "price": 30000.0, "side": "sell", "tradingPairName": "EOS-KRW", "type": "limit"}'

그리고 requests.post에 들어가는 request_body에는 아래 문장이 들어가 있다.

{'amount': 2.0, 'price': 30000.0, 'side': 'sell', 'tradingPairName': 'EOS-KRW', 'type': 'limit'}

굳이 차이를 보자면 '와 "의 차이로 보인다. what에 있는 문자열에 " 대신에 '로 넣을려고 하니, 방법을 모르겠다. 아마도 json.dumps라는 함수에서 입력으로 '를 넣어도 "로 바꾸는 부분이 있는 것 같다.

입력이 똑같은 것 같은데 왜 signature오류라고 뜨는지 모르겠다.

.........
.........
.........

이렇게 막힐 때는 뭔가 추가한 것을 빼고 하나씩 테스트해 보아야 한다. 무엇을 없애야 하나. 한 문장 한 문장 훓어보다보니 what을 구하는 문장에 있는 json.dumps라는 함수에 있는 sort_keys=True 라는 옵션이 보였다. 입력 변수에 있는 key에 대하여 sorting을 하라는 이야기인데, 이미 입력 변수에 있는 key는 sorting이 되어 있어서 큰 의미가 없어 보인다. 그래서 빼 본다.

그랬더니 what 값이 아래와 같이 바뀐다. sort_key가 있을 때와 orders에 들어가는 인자들의 위치가 변경되었다.

'1526392350.264POST/orders{"price": 30000.0, "type": "limit", "side": "sell", "tradingPairName": "EOS-KRW", "amount": 2.0}'

혹시 이것 때문에????

마지막까지 돌려본다.

빙고!! 오 감동..

주문이 들어갔다. 이번 주문 API 문제를 푼 기념으로 3만원에 EOS 2주 매도 주문은 취소하지 않고 계속 둘 거다..

이 문제와 관련하여 gopax의 예제를 올려 놓은 github에 질문을 남겨 놓았다. 역시나 아직까지 답신이 없다. 미래에 이 문제로 고생할 또 다른 개발자의 시간을 절약시켜주기 위하여 자답을 하였다. 이 글을 gopax에서 보면 예제를 수정해주기를 바란다.


자 정리해보자.

gopax에서 제공해주는 주문하기 파이썬 예제는 invalid signature 오류가 뜬다. 이 문제를 해결하는 방법은 signaure를 만드는 문장을 생성하는 코드를 아래와 같이 수정해야 한다.

what = nonce + method + request_path + json.dumps(request_body)


주문까지 성공을 했는데, 이제는 뭘 하나?

Sort:  

전 엄두도 못 내고 있습니다만 API 거래의 꽃은 재정거래일 것 같은데요. :)?

재정거래가 꽃이기는 하지요. 그런데 돈을 주고 받을 수 있는 방법이 없어요. 항상 한국이 프리미엄이 높다보니..

You received 86.06 % upvote as a reward From round 3 on 2018.05.15! Congrats!

저같은 문맹은 그냥 음.. 발자국만 남기고 갑니다 ㅋㅋ
고팍스님이 언능 오셔야 할터인데요 ㅎㅎ

그러게요. 관심이 절실하게 필요한 시점인데요.

성공하셨군요. 축하드립니다.
3만원에 매도되길 빕니다^^

Coin Marketplace

STEEM 0.20
TRX 0.19
JST 0.034
BTC 88275.41
ETH 3281.06
USDT 1.00
SBD 3.00