Saltar para o conteúdo principal
Esta página foi traduzida automaticamente por IA. A versão em inglês é a fonte oficial.Ver versão em inglês →
Raydium não publica um SDK Python oficial. Os padrões aqui combinam três bibliotecas comunitárias bem mantidas: solders (primitivas Solana vinculadas a Rust), solana-py (cliente RPC) e anchorpy (construtores de instruções estilo Anchor a partir de IDLs). A combinação cobre tudo o que o SDK TS faz; apenas é menos polida.

Ambiente

Versões que funcionam juntas neste momento:
anchorpy periodicamente fica atrás da versão anchor-lang; para um programa Raydium recentemente deployado, verifique se o IDL compila sob seu anchorpy fixado antes de commitar.

Conexão e keypair

AsyncClient é a variante async; o Client síncrono está disponível para scripts rápidos, mas async é preferido para qualquer coisa que envie múltiplas requisições.

Leitura do estado do pool

A maioria do uso em produção lê estado do pool decodificado da REST API do Raydium (veja sdk-api/rest-api) em vez de decodificar dados on-chain manualmente — é mais simples e a latência é aceitável para a maioria dos casos de uso.
Para bots que precisam da menor latência possível, decodifique bytes on-chain diretamente:
O layout completo está em src/raydium/cpmm/layout.ts (fonte TS); porte-o para construct conforme necessário. anchorpy pode fazer isso automaticamente dado o IDL — veja abaixo.

Construindo e enviando um swap

Para simplicidade, use o endpoint server-built-transaction do Raydium. O servidor retorna uma transação pronta para assinar; você só precisa adicionar sua assinatura:
Este é o caminho mais rápido para um bot funcional. A cotação do servidor expira rapidamente (≈30s); não faça cache.

Construindo um swap client-side (via anchorpy)

Para menor latência ou quando você não consegue alcançar a API do Raydium (regiões sancionadas, configurações isoladas):
Derivações de PDA (estado de observação, autoridade do pool) seguem as mesmas fórmulas que no capítulo CPMM. anchorpy não as deriva automaticamente.

Arquitetura típica de bot

Uma estrutura comum de bot Python para Raydium:
Decisões principais para produção:
  • Provedor RPC. RPCs públicos da mainnet limitam agressivamente a taxa. Use um provedor dedicado (Helius, QuickNode, Triton) para tráfego sustentado.
  • WebSocket para estado do pool. client.account_subscribe(pool_id) envia atualizações em cada mudança de estado. Muito mais apertado que polling.
  • Provedor de taxa de prioridade. Helius tem um endpoint getPriorityFeeEstimate; Triton tem o seu próprio. Dimensione sua taxa com base no 75º percentil de taxas recentes no programa de destino.
  • Bundles para trades sensíveis a MEV. Rotear através do motor de blocos do Jito se você não puder tolerar risco de sandwich. Libs Python: jito-sdk-python (terceirizado, qualidade varia).

Leitura do estado da farm

.account["X"].decode(bytes) do anchorpy fornece um objeto Python nativo correspondendo ao struct IDL.

Armadilhas

1. Tratamento de decimais

O float nativo do Python é IEEE-754 double; quantidades em mints com 9 decimais (1 SOL = 1e9 unidades) permanecem precisas, mas razões e produtos perdem precisão. Use int (solders retorna int para todos os campos de quantidade) e rotear por decimal.Decimal para qualquer aritmética de preço.

2. Raciocínio baseado em slot vs baseado em timestamp

Algumas versões de farm usam contadores de slot; LaunchLab usa timestamps. solana-py retorna slot em respostas RPC, mas converter slot → timestamp é lossy (varia por schedule de leader). Se você precisar de hora de parede, chame get_block_time(slot) explicitamente.

3. Esgotamento do pool de conexão

AsyncClient abre uma conexão HTTP por requisição por padrão. Sob alta carga, reutilize sessões httpx.AsyncClient e defina um limits=httpx.Limits(max_connections=100) apropriado.

4. Limites de tamanho de transação

Transações construídas em Python não são menores que as construídas em TS — o limite de 1232 bytes aplica-se igualmente. Use transações V0 (tabelas de lookup de endereços) para qualquer coisa que roteia através de mais de ~2 pools.

Referências

Fontes: