Python bitstamp api невалидна грешка nonce

Изпълняваше се скрипт на Python, но сега не е.

                public_client = bitstamp.client.Public()

                data=backTestBitCoin.getHistoricalPrices();

                trading_client = bitstamp.client.Trading(username='AAA', key='BBB', secret='CCC')
                tick=trading_client.ticker();

                lastBid = float(tick['bid']);
                lastAsk = float(tick['ask']);
                balances = trading_client.account_balance(); #error thrown from this line

Получавам следната грешка:

                    return self._post("balance/", return_json=True)
                  File "/Library/Python/2.7/site-packages/bitstamp/client.py", line 47, in _post
                    return self._request(requests.post, *args, **kwargs)
                  File "/Library/Python/2.7/site-packages/bitstamp/client.py", line 80, in _request
                    raise BitstampError(error)
                bitstamp.client.BitstampError: Invalid nonce

Някой преживявал ли е това? Не съм толкова запознат с библиотеката, следователно не съм сигурен какво го причинява.


person jason m    schedule 18.06.2014    source източник


Отговори (1)


Генерирането на нов api ключ/тайна коригира този проблем. Вярвам, че е причинено от използването на комбинация от php api и python api или приложението Bitstamp за iphone. Ще потвърдя това подозрение, но цялостното решение беше да го извадя от контакта и да го включа отново.


Съкратено решение: Проблемът ми идваше от използването на следните php и python библиотеки,

php python

И двете са A+ страхотни и лесни за използване.

Грешката се създава поради следното несъответствие в техните методи за създаване на nonce (нито един от тях не е по-правилен според мен, просто различен).

php:

                // generate a nonce as microtime, with as-string handling to avoid problems with 32bits systems
                $mt = explode(' ', microtime());
                $req['nonce'] = $mt[1] . substr($mt[0], 2, 6);
                $req['key'] = $key;
                $req['signature'] = $this->get_signature($req['nonce']);

python:

                self._nonce = max(int(time.time()), nonce)

Където time.time() ви дава: 1403366728.072785, а microtime() ви дава: 1403366859731819.

Решението, което въведох, е да променя кода на python на:

self._nonce = max(int(time.time()*1000000), nonce) и грешката е решена.

person jason m    schedule 19.06.2014