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
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 (vejasdk-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.
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: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):
anchorpy não as deriva automaticamente.
Arquitetura típica de bot
Uma estrutura comum de bot Python para Raydium:- 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
Ofloat 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
sdk-api/rest-api— os endpoints HTTP usados acima.sdk-api/anchor-idl— onde obter o IDL paraanchorpy.integration-guides/routing-and-mev— padrões de bundle Jito.

