Python bitstamp api недопустимая ошибка одноразового номера

Скрипт на питоне работал, а теперь нет.

                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 или приложения iphone Bitstamp. Я подтвержу это подозрение, но общее решение состояло в том, чтобы отключить его и снова подключить.


Сокращенное решение: моя проблема возникла из-за использования следующих библиотек php и python,

php питон

Оба отличные и простые в использовании.

Ошибка создается из-за следующего несоответствия в их методах создания 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']);

питон:

                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