Ccxt: Kraken - 403 erro proibido ao tentar obter pedidos mínimos

Criado em 14 abr. 2020  ·  7Comentários  ·  Fonte: ccxt/ccxt

Olá,

A integração do Kraken parece interrompida para mim desde esta atualização: https://github.com/ccxt/ccxt/commit/89ee033e90c10b500c098ce3ed5a440c39c33dad#diff -5e85c8f10126d08bc relevantc3138002c7c0
No commit, "fetchMinLimitOrder" foi definido como verdadeiro.
Mas, Kraken tem um mecanismo de proteção que exige que os usuários concluam um captcha em seu site para acessar as páginas. Acho que quando essa proteção está habilitada, o Kraken não consegue carregar os mercados.

Diga-me se estou errado em meu pensamento e se uma correção é possível.

Obrigado,
Alex

duplicate question

Comentários muito úteis

@alextousss Conforme indicado na resposta do Kroitor acima, o tamanho mínimo do pedido do Kraken é recuperado através da página de suporte do Kraken - https://support.kraken.com/hc/en-us/articles/205893708-What-is-the-minimum- pedido-tamanho-.

O código html da página de suporte do Kraken é capturado e as tags html <td class="wysiwyg-text-align-right"> são explodidas em uma matriz que é usada para derivar os pedidos mínimos.

Minha correção de curto prazo (até que o Kraken adicione os tamanhos mínimos de pedido ao endpoint da API REST AssetPairs) era fornecer o código html diretamente para a função fetch_min_order_amounts () no arquivo ccxt / kraken.php.

Em vez de $html = $this->zendeskGet205893708WhatIsTheMinimumOrderSize ();

Eu defini a variável $ html com o texto da página de suporte usando uma função que retornou o texto relevante.

Simplesmente criei a seguinte função que retornou o código html relevante copiado da página de suporte do kraken:

public function Minimum_Order_Size_Hard_Code(){

return '<td><strong>Base currency</strong></td>
<td class="wysiwyg-text-align-right"><strong>Order minimum</strong></td>
</tr>
<tr>
<td>Algorand</td>
<td class="wysiwyg-text-align-right">50 ALGO</td>
</tr>
<tr>
<td>Augur</td>
<td class="wysiwyg-text-align-right">0.3 REP</td>
</tr>
<tr>
<td>Basic Attention Token</td>
<td class="wysiwyg-text-align-right">50 BAT</td>
</tr>
<tr>
<td>Bitcoin</td>
<td class="wysiwyg-text-align-right">0.002 XBT</td>
</tr>
<tr>
<td>Bitcoin Cash</td>
<td class="wysiwyg-text-align-right">0.000002 BCH</td>
</tr>
<tr>
<td>Cardano</td>
<td class="wysiwyg-text-align-right">1 ADA</td>
</tr>
<tr>
<td>Chainlink</td>
<td class="wysiwyg-text-align-right">10 LINK</td>
</tr>
<tr>
<td>Cosmos</td>
<td class="wysiwyg-text-align-right">1 ATOM</td>
</tr>
<tr>
<td>DAI</td>
<td class="wysiwyg-text-align-right">10 DAI</td>
</tr>
<tr>
<td>Dash</td>
<td class="wysiwyg-text-align-right">0.03 DASH</td>
</tr>
<tr>
<td>Dogecoin</td>
<td class="wysiwyg-text-align-right">3000 XDG</td>
</tr>
<tr>
<td>EOS</td>
<td class="wysiwyg-text-align-right">3 EOS</td>
</tr>
<tr>
<td>Ethereum</td>
<td class="wysiwyg-text-align-right">0.02 ETH</td>
</tr>
<tr>
<td>Ethereum Classic</td>
<td class="wysiwyg-text-align-right">0.3 ETC</td>
</tr>
<tr>
<td>Gnosis</td>
<td class="wysiwyg-text-align-right">0.02 GNO</td>
</tr>
<tr>
<td>ICON</td>
<td class="wysiwyg-text-align-right">50 ICX</td>
</tr>
<tr>
<td>Lisk</td>
<td class="wysiwyg-text-align-right">10 LSK</td>
</tr>
<tr>
<td>Litecoin</td>
<td class="wysiwyg-text-align-right">0.1 LTC</td>
</tr>
<tr>
<td>Monero</td>
<td class="wysiwyg-text-align-right">0.1 XMR</td>
</tr>
<tr>
<td>Nano</td>
<td class="wysiwyg-text-align-right">10 NANO</td>
</tr>
<tr>
<td>OmiseGO</td>
<td class="wysiwyg-text-align-right">10 OMG</td>
</tr>
<tr>
<td>PAX Gold</td>
<td class="wysiwyg-text-align-right">0.01 PAXG</td>
</tr>
<tr>
<td>QTUM</td>
<td class="wysiwyg-text-align-right">0.1 QTUM</td>
</tr>
<tr>
<td>Ripple</td>
<td class="wysiwyg-text-align-right">30 XRP</td>
</tr>
<tr>
<td>Siacoin</td>
<td class="wysiwyg-text-align-right">5000 SC</td>
</tr>
<tr>
<td>Stellar Lumens</td>
<td class="wysiwyg-text-align-right">30 XLM</td>
</tr>
<tr>
<td>Tether</td>
<td class="wysiwyg-text-align-right">5 USDT</td>
</tr>
<tr>
<td>Tezos</td>
<td class="wysiwyg-text-align-right">1 XTZ</td>
</tr>
<tr>
<td>Tron</td>
<td class="wysiwyg-text-align-right">500 TRX</td>
</tr>
<tr>
<td>USD Coin</td>
<td class="wysiwyg-text-align-right">5 USDC</td>
</tr>
<tr>
<td>Watermelon</td>
<td class="wysiwyg-text-align-right">0.1 MLN</td>
</tr>
<tr>
<td>Waves</td>
<td class="wysiwyg-text-align-right">10 WAVES</td>
</tr>
<tr>
<td>Zcash</td>
<td class="wysiwyg-text-align-right">0.03 ZEC</td>
</tr>
<tr>
<td>Euro</td>
<td class="wysiwyg-text-align-right">10 EUR</td>
</tr>
<tr>
<td>US Dollar</td>
<td class="wysiwyg-text-align-right">10 USD</td>
</tr>
<tr>
<td>Great British Pound</td>
<td class="wysiwyg-text-align-right">10 GBP</td>
</tr>
</tbody>';
}

e então definiu a variável $ html na função fetch_min_order_amounts () no arquivo ccxt / kraken.php com uma chamada para a função acima:

public function fetch_min_order_amounts() {
$html =  $this->Minimum_Order_Size_Hard_Code();
...

Obviamente, essa correção não é a ideal, pois a solução alternativa será perdida automaticamente quando o ccxt for atualizado, mas funciona. Além disso, essa correção não representa uma alteração material no código e pode ser facilmente adicionada a quaisquer atualizações futuras.

Todos 7 comentários

Isso foi relatado anteriormente, aqui:

Resposta oficial de Kraken:

estamos cientes do problema recente que o CCXT enfrentou quando uma alteração de segurança em nossas páginas de suporte impediu que os tamanhos mínimos de pedidos fossem recuperados por meio de nossas páginas de suporte. Nossos desenvolvedores de API REST estão no processo de adicionar os tamanhos mínimos de pedido ao terminal de AssetPairs da API REST, o que tornaria os tamanhos mínimos de pedido disponíveis com mais eficiência (e mais confiabilidade). Ainda não temos uma data prevista de disponibilidade para esta atualização, mas irei acompanhar o progresso e avisar você quando mais informações estiverem disponíveis.

Enquanto isso, você pode contornar o problema, definindo a opção fetchMinOrderAmounts para false .

exchange = ccxt.kraken({
    'enableRateLimit': True,
    'options': {  # ←--------------------- inside 'options' subkey
        'fetchMinOrderAmounts': False,  # ←---------- set to False 
    }
})

Dessa forma, você perderá efetivamente as informações sobre os limites mínimos, mas a outra funcionalidade continuará funcionando.

Deixe-me saber se isso não responder à pergunta.

Sinto muito pela duplicata, eu só pesquisei "Kraken" na guia de problemas quando você marcou meu problema como Duplicado (não havia menção a Kraken na página inicial dos problemas).

No entanto, sim, confirma tudo o que pensei. Corrigi meu sistema de produção voltando para a versão anterior ao commit que mencionei. A longo prazo, desabilitarei fetchMinOrderAmounts

Obrigado por sua resposta e seu envolvimento mais amplo no ccxt.
Não é uma tarefa fácil unificar 100 APIs do crypto exchange, mas você fez isso maravilhosamente bem. Tirem o chapéu.

@alextousss obrigado pelo feedback, realmente agradeço! Não hesite se tiver mais perguntas. Manterá você atualizado e avisará quando for consertado do lado do Kraken.

@alextousss Conforme indicado na resposta do Kroitor acima, o tamanho mínimo do pedido do Kraken é recuperado através da página de suporte do Kraken - https://support.kraken.com/hc/en-us/articles/205893708-What-is-the-minimum- pedido-tamanho-.

O código html da página de suporte do Kraken é capturado e as tags html <td class="wysiwyg-text-align-right"> são explodidas em uma matriz que é usada para derivar os pedidos mínimos.

Minha correção de curto prazo (até que o Kraken adicione os tamanhos mínimos de pedido ao endpoint da API REST AssetPairs) era fornecer o código html diretamente para a função fetch_min_order_amounts () no arquivo ccxt / kraken.php.

Em vez de $html = $this->zendeskGet205893708WhatIsTheMinimumOrderSize ();

Eu defini a variável $ html com o texto da página de suporte usando uma função que retornou o texto relevante.

Simplesmente criei a seguinte função que retornou o código html relevante copiado da página de suporte do kraken:

public function Minimum_Order_Size_Hard_Code(){

return '<td><strong>Base currency</strong></td>
<td class="wysiwyg-text-align-right"><strong>Order minimum</strong></td>
</tr>
<tr>
<td>Algorand</td>
<td class="wysiwyg-text-align-right">50 ALGO</td>
</tr>
<tr>
<td>Augur</td>
<td class="wysiwyg-text-align-right">0.3 REP</td>
</tr>
<tr>
<td>Basic Attention Token</td>
<td class="wysiwyg-text-align-right">50 BAT</td>
</tr>
<tr>
<td>Bitcoin</td>
<td class="wysiwyg-text-align-right">0.002 XBT</td>
</tr>
<tr>
<td>Bitcoin Cash</td>
<td class="wysiwyg-text-align-right">0.000002 BCH</td>
</tr>
<tr>
<td>Cardano</td>
<td class="wysiwyg-text-align-right">1 ADA</td>
</tr>
<tr>
<td>Chainlink</td>
<td class="wysiwyg-text-align-right">10 LINK</td>
</tr>
<tr>
<td>Cosmos</td>
<td class="wysiwyg-text-align-right">1 ATOM</td>
</tr>
<tr>
<td>DAI</td>
<td class="wysiwyg-text-align-right">10 DAI</td>
</tr>
<tr>
<td>Dash</td>
<td class="wysiwyg-text-align-right">0.03 DASH</td>
</tr>
<tr>
<td>Dogecoin</td>
<td class="wysiwyg-text-align-right">3000 XDG</td>
</tr>
<tr>
<td>EOS</td>
<td class="wysiwyg-text-align-right">3 EOS</td>
</tr>
<tr>
<td>Ethereum</td>
<td class="wysiwyg-text-align-right">0.02 ETH</td>
</tr>
<tr>
<td>Ethereum Classic</td>
<td class="wysiwyg-text-align-right">0.3 ETC</td>
</tr>
<tr>
<td>Gnosis</td>
<td class="wysiwyg-text-align-right">0.02 GNO</td>
</tr>
<tr>
<td>ICON</td>
<td class="wysiwyg-text-align-right">50 ICX</td>
</tr>
<tr>
<td>Lisk</td>
<td class="wysiwyg-text-align-right">10 LSK</td>
</tr>
<tr>
<td>Litecoin</td>
<td class="wysiwyg-text-align-right">0.1 LTC</td>
</tr>
<tr>
<td>Monero</td>
<td class="wysiwyg-text-align-right">0.1 XMR</td>
</tr>
<tr>
<td>Nano</td>
<td class="wysiwyg-text-align-right">10 NANO</td>
</tr>
<tr>
<td>OmiseGO</td>
<td class="wysiwyg-text-align-right">10 OMG</td>
</tr>
<tr>
<td>PAX Gold</td>
<td class="wysiwyg-text-align-right">0.01 PAXG</td>
</tr>
<tr>
<td>QTUM</td>
<td class="wysiwyg-text-align-right">0.1 QTUM</td>
</tr>
<tr>
<td>Ripple</td>
<td class="wysiwyg-text-align-right">30 XRP</td>
</tr>
<tr>
<td>Siacoin</td>
<td class="wysiwyg-text-align-right">5000 SC</td>
</tr>
<tr>
<td>Stellar Lumens</td>
<td class="wysiwyg-text-align-right">30 XLM</td>
</tr>
<tr>
<td>Tether</td>
<td class="wysiwyg-text-align-right">5 USDT</td>
</tr>
<tr>
<td>Tezos</td>
<td class="wysiwyg-text-align-right">1 XTZ</td>
</tr>
<tr>
<td>Tron</td>
<td class="wysiwyg-text-align-right">500 TRX</td>
</tr>
<tr>
<td>USD Coin</td>
<td class="wysiwyg-text-align-right">5 USDC</td>
</tr>
<tr>
<td>Watermelon</td>
<td class="wysiwyg-text-align-right">0.1 MLN</td>
</tr>
<tr>
<td>Waves</td>
<td class="wysiwyg-text-align-right">10 WAVES</td>
</tr>
<tr>
<td>Zcash</td>
<td class="wysiwyg-text-align-right">0.03 ZEC</td>
</tr>
<tr>
<td>Euro</td>
<td class="wysiwyg-text-align-right">10 EUR</td>
</tr>
<tr>
<td>US Dollar</td>
<td class="wysiwyg-text-align-right">10 USD</td>
</tr>
<tr>
<td>Great British Pound</td>
<td class="wysiwyg-text-align-right">10 GBP</td>
</tr>
</tbody>';
}

e então definiu a variável $ html na função fetch_min_order_amounts () no arquivo ccxt / kraken.php com uma chamada para a função acima:

public function fetch_min_order_amounts() {
$html =  $this->Minimum_Order_Size_Hard_Code();
...

Obviamente, essa correção não é a ideal, pois a solução alternativa será perdida automaticamente quando o ccxt for atualizado, mas funciona. Além disso, essa correção não representa uma alteração material no código e pode ser facilmente adicionada a quaisquer atualizações futuras.

@ mjoh090 sim, codificar os limites é uma das maneiras de contornar esse problema, quando você realmente precisa dessa informação.

De uma perspectiva mais ampla, seria possível ter um "modo estável" que desabilitasse esse tipo de recurso que não depende de APIs oficiais e estáveis? O ccxt está analisando páginas de ajuda para outras trocas? Este problema já estava presente para taxas, se bem me lembro e me causou uma grande dor de cabeça.
Se você construir, vou dormir melhor ;-)

@alextousss sim, em geral estamos tentando tornar opcionais todos os pontos de extremidade "não oficiais", no entanto, pode haver algumas peculiaridades ainda nas trocas derivadas - faremos o nosso melhor para limpar tudo. Eu o desliguei para Kraken (em 1.26.20), então essa opção agora é false por padrão.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

scoshil picture scoshil  ·  39Comentários

cklester picture cklester  ·  346Comentários

marinsokol5 picture marinsokol5  ·  60Comentários

synchronizing picture synchronizing  ·  51Comentários

rbn920 picture rbn920  ·  64Comentários