Python para Solana
Python es un lenguaje off-chain de primera clase para Solana. Los equipos lo utilizan para bots, servicios backend, notebooks de investigación, ETL y automatización de operaciones contra nodos RPC de Agave 4.1.1.
No se ejecuta dentro del runtime de Sealevel. Los programas on-chain siguen siendo Rust (a menudo Anchor 0.32.1), compilados y desplegados con Solana CLI 3.0.10. Python se comunica con esos programas a través de JSON-RPC, websockets y clientes IDL.
Esta página es el paraguas de la sección. Artículos hermanos cubren el par de SDKs, la construcción de transacciones, AnchorPy, lecturas, bots, análisis y hábitos de producción.
Resumen
- Utiliza Python para leer el estado de Solana, construir y firmar transacciones, llamar a programas Anchor a través de IDL y canalizar datos de la cadena a pilas de análisis, siempre como un cliente del clúster, nunca como bytecode de programa.
- Por qué Importa: Muchos equipos de quant, datos y plataformas ya utilizan Python. solders + solana-py + AnchorPy les permite integrar Solana sin reescribir servicios en TypeScript, mientras siguen emparejándose con frontends de @solana/kit 7.0.0 cuando las billeteras y los navegadores son la superficie del producto.
- Conceptos Clave: solders, solana-py (
solana), AnchorPy, VersionedTransaction, blockhash, simulación / preflight, AsyncClient, getProgramAccounts / filtros, DAS API, pandas / Polars, Python vs Kit. - Cuándo Usar Python: Bots de market-making y arb, backends de custodia o relé, ETL adyacente a indexadores, métricas de tesorería y protocolo, scripts de investigación y operaciones que reflejan flujos de trabajo de CLI.
- Limitaciones / Compensaciones: Sin ejecución on-chain; la experiencia de usuario de wallet-adapter y navegador es más débil que el kit TS; los límites de tasa de RPC públicos castigan a los bots ingenuos; la gestión de claves y la expiración de blockhash son problemas de producción que tú posees.
- Temas Relacionados: Fundamentos de Python para Solana, solders y solana-py, Construcción de Transacciones en Python, AnchorPy, Lectura de Datos de Cadena, Análisis de Datos.
Fundamentos
El código fuente de los programas de Solana es Rust 1.91.1 dirigido a sBPF. Python nunca entra en esa ruta de compilación. Tu proceso es un runtime de host normal que:
- Se conecta a RPC (HTTP y WebSocket opcional).
- Deserializa cuentas y metadatos de transacciones.
- Construye instrucciones y mensajes con tipos de solders.
- Firma con keypairs que controlas (o devuelve txs sin firmar para billeteras de usuario).
- Envía y confirma contra los niveles de compromiso del clúster.
Esa separación es todo el modelo. El estado duradero de la aplicación vive en las cuentas. Los programas las mutan. Python observa, programa y a veces firma.
La pila Python por defecto es:
| Paquete | Rol |
|---|---|
| solders | Tipos rápidos respaldados por Rust: Pubkey, Keypair, Instruction, mensajes, transacciones versionadas, helpers de sistema y compute-budget |
solana (solana-py) | Cliente JSON-RPC (Client / AsyncClient), TxOpts, suscripciones |
| anchorpy | Carga IDL de Anchor, program.rpc tipado / fetch de cuentas, Provider + Wallet |
Fija las URLs de RPC y los IDs de programa por entorno. Los scripts de desarrollo no deben apuntar silenciosamente a mainnet-beta. Para trabajo local, combina Solana CLI 3.0.10 (solana-test-validator o flujos de trabajo de Surfpool / LiteSVM del equipo para programas) con un venv de Python para el código cliente.
El dinero son siempre enteros: lamports y unidades base de tokens. Nunca uses flotantes para saldos, tarifas o PnL que deban coincidir con la cadena.
Mecánicas e Interacciones
solders y solana-py
solders es la capa de tipos y serialización. Refleja las primitivas de Solana con rendimiento de Rust a través del límite de Python. Prefiere los constructores de solders para instrucciones, metadatos de cuentas y empaquetado de mensajes en lugar de crear formatos de cableado manualmente.
solana-py (ruta de importación solana) es la capa de red. Úsalo para:
get_latest_blockhash,get_balance,get_account_infosimulate_transactionysend_transactionget_signatures_for_address,get_transaction- Websockets asíncronos para notificaciones de cuentas y firmas
solana-py moderno espera tipos de solders. Trátalos como una sola pila, no como SDKs competidores. Los detalles y recetas de copiar y pegar se encuentran en solders & solana-py.
Construcción y envío de transacciones
La ruta feliz para una transacción construida en Python:
- Componer instrucciones (transferencia de System Program, SPL Token, ix de programa Anchor, compute budget).
- Obtener un blockhash reciente de RPC.
- Construir un mensaje con el pagador de tarifas y la lista de ix (
Message.new_with_blockhasho APIs de mensajes versionados). - Firmar en una
VersionedTransaction(o legado solo cuando una dependencia lo fuerce). - Simular (preflight o simular explícitamente) e inspeccionar logs / CU.
- Enviar con compromiso y política de reintentos; actualizar el blockhash al expirar.
Las tarifas de prioridad y los límites de cómputo son instrucciones ordinarias (helpers de compute-budget de solders). Colócalos al principio del mensaje. Los bots de larga duración deben tratar la vida útil del blockhash y las reglas de firma duplicada como preocupaciones del bucle de control principal, no como casos extremos.
Los patrones de composición completos se encuentran en Construcción de Transacciones en Python.
AnchorPy y programas Anchor
Si el programa on-chain es Anchor 0.32.1, envía el IDL de anchor build y cárgalo con AnchorPy. Eso te da:
- Constructores de instrucciones con discriminadores que coinciden con el programa
- Clientes de cuentas para
fetch/ decodificar - Vinculación
Providerdel cliente RPC, billetera y opciones por defecto
Flujo de trabajo:
- Compilar y desplegar el programa (Rust + Anchor + CLI).
- Versionar el JSON del IDL con el ID del programa para cada clúster.
- En Python:
Provider+Program.at(...)oIdl.from_jsonexplícito. - Llamar a
program.rpc["instruction_name"](...)o construir instrucciones para lotes personalizados.
Regenera los clientes cuando el IDL cambie. Los discriminadores o el orden de las cuentas que no coinciden fallan en la simulación o en tiempo de ejecución. AnchorPy se basa en solders/solana-py; tú sigues siendo el propietario del blockhash, la simulación y la confirmación. Ver AnchorPy.
Lectura de datos de cadena
Las lecturas dominan la mayoría de los servicios Python de producción.
RPC Central
- Bytes de cuenta y lamports:
get_account_info(crudo o jsonParsed donde se admita) - Saldo nativo:
get_balance - Tenencias de SPL:
get_token_accounts_by_owner(y variantes jsonParsed) - Historial:
get_signatures_for_addressluegoget_transaction - Escaneos:
get_program_accountscon filtros memcmp en discriminadores o campos fijos
DAS (Digital Asset Standard)
Las carteras de NFT y cNFT a menudo necesitan un endpoint DAS proveedor (getAsset, búsqueda, pruebas). Usa httpx o clientes HTTP similares cuando solana-py no envuelva el método; mantén las URLs de DAS y las claves API fuera de git.
Hábitos de lectura de producción
- Prefiere clientes asíncronos bajo carga concurrente
- Limita
get_program_accountscon filtros; no descargues programas completos en RPC público - Para análisis intensivos, usa indexadores o exportaciones de almacén en lugar de raspar mainnet en vivo
- Decodifica layouts de cuenta con solders, helpers de Borsh o tipos de cuenta de AnchorPy, no con divisiones de cadenas ad hoc.
Profundizaciones: Lectura de Datos de Cadena.
Pipelines de análisis
La ventaja comparativa de Python es la pila de datos: pandas, Polars, NumPy, notebooks y herramientas de ML.
Flujo típico:
- Recopilar firmas o instantáneas de cuentas (RPC, buffer de websocket, o volcado de indexador).
- Normalizar filas: firma, slot, tarifa, éxito, ID de programa, campos analizados.
- Cargar en Polars (lotes grandes) o pandas (notebooks exploratorios).
- Unir tablas off-chain (usuarios, campañas, puntuaciones de riesgo).
- Publicar métricas, alertas o características de entrenamiento.
Trata el tiempo de la cadena (slots, tiempos de bloque) con cuidado; las claves de unión suelen ser pubkey, firma o mint. Los lamports permanecen enteros hasta la presentación. Patrones y encuadre: Análisis de Datos.
Alineación de operaciones con CLI y validadores
Los scripts de Python deben coincidir con la forma en que los operadores usan Solana CLI 3.0.10: la misma URL de RPC, el mismo formato JSON de keypair (Keypair.from_bytes en el array secreto de 64 bytes), el mismo clúster (devnet / mainnet-beta / local). La semántica RPC de Agave 4.1.1 (compromiso, resultados de simulación, informes de unidades de cómputo) es lo que tu cliente debe manejar, no un "Solana de Python" separado.
Consideraciones Avanzadas y Aplicaciones
Python vs TypeScript (@solana/kit 7.0.0)
| Necesidad | Preferir | Por qué |
|---|---|---|
| Conexión de billetera, dApp de navegador, POST de Acción/Blink en Next.js | @solana/kit 7.0.0 | Estándares de billetera, ecosistema web, la pila de frontend por defecto de este sitio |
| Bots, trabajos por lotes, ML, investigación con pandas/Polars | Python | Servicios asíncronos + bibliotecas de ciencia de datos |
| Repositorio compartido de servicios TS y web | Kit (o clientes duales) | Un lenguaje para la ruta del producto |
| Patrimonio existente de servicios Python FastAPI/Django | Python | Reutilizar autenticación, colas y observabilidad |
| Clientes tipados Codama / Kit para muchos programas | Kit | Mejor historia de generación de código en el mundo TS |
| Llamadas IDL de Anchor desde un portátil de investigación | AnchorPy | Ruta rápida sin frontend |
Muchas organizaciones ejecutan ambos: Kit en la aplicación orientada al usuario; Python para datos de mercado, riesgo, reequilibrio y operaciones. El formato de cableado es el mismo: transacciones versionadas y JSON RPC. No inventes una segunda interfaz de programa por lenguaje; comparte IDs de programa, versiones de IDL y documentación de layout de cuentas.
Patrones de arquitectura que envejecen bien
- Billetera caliente + política: los bots mantienen claves de bajo saldo; billetera fría o multisig para movimientos de tesorería.
- Construir sin firmar, firmar en otro lugar: los backends preparan mensajes; las HSM o las billeteras de usuario firman.
- Simular siempre en rutas de dinero: preflight captura cuentas faltantes, desbordamientos de CU y PDAs incorrectos antes de las tarifas.
- Confirmar con propósito:
processedpara una UX rápida no es liquidación para contabilidad; elige el compromiso según el riesgo. - Estrategias idempotentes: los reintentos no deben gastar doble; usa IDs de pedido del lado del cliente y unicidad on-chain donde los programas lo permitan.
- Observabilidad: registra el slot, la antigüedad del blockhash, la tarifa de prioridad, los logs de simulación y el estado de la firma en cada clase de error.
Bots y automatización (vista previa del alcance)
El trading y la automatización unen lecturas RPC, constructores de transacciones y límites de riesgo en un bucle de control. Eso se basa en los mismos fundamentos que esta descripción general; las páginas de sección para trading y mejores prácticas cubren el ritmo, las tarifas de prioridad y el manejo de errores sin convertir Python en una caja negra de estrategias.
Híbrido con Anchor y programas nativos
Python no se preocupa de si el programa es Anchor, solana-program nativo o Pinocchio. Necesitas el ID de programa correcto, metadatos de cuenta y bytes de instrucción. AnchorPy reduce ese costo para los IDL de Anchor. Para programas nativos, construye manualmente con solders o mantén pequeños codecs compartidos con pruebas de Rust.
Conceptos Erróneos Comunes
- "Python puede ejecutarse on-chain si uso la biblioteca correcta." No. Solo los programas sBPF se ejecutan en el SVM. Python es siempre un cliente.
- "solders y solana-py son alternativas." Son complementarios: tipos vs RPC. Las pilas modernas usan ambos.
- "Si funciona en ejemplos de web3.js, el puerto de Python es uno a uno." Los nombres de campo, las formas de transacción y las APIs asíncronas difieren. Sigue las APIs de mensajes de solders de principio a fin.
- "AnchorPy reemplaza la comprensión de cuentas y discriminadores." Genera conveniencia sobre las mismas reglas de cableado; los IDL incorrectos aún producen txs incorrectos.
- "El RPC gratuito público está bien para bots de producción." Los límites de tasa y los vecinos ruidosos rompen los bucles sensibles a la latencia. Presupuesta un proveedor.
- "omitir_preflight me acelera de forma segura." Puede ocultar fallos que habrías detectado gratis. Úsalo solo con los ojos abiertos.
- "Los flotantes están bien para cantidades USDC en pandas." Prefiere unidades base enteras a través de la computación; formatea para la presentación al final.
- "getProgramAccounts es análisis gratuito." Los escaneos sin filtrar son pesados; los proveedores los limitan o rechazan. Prefiere filtros o indexadores.
- "TypeScript es siempre mejor para Solana." Kit gana para billeteras y web. Python gana para datos y muchas propiedades backend. Elige por superficie, no por moda.
- "Un keypair de mainnet en un notebook está bien para demostraciones." Los notebooks se filtran. Usa secretos de entorno y claves dedicadas de bajo privilegio.
Preguntas Frecuentes
¿Para qué sirve Python en Solana si los programas son Rust?
Trabajo off-chain: leer cuentas, construir y enviar transacciones, llamar a programas a través de RPC/IDL, ejecutar bots, backends y análisis. Los programas siguen siendo Rust (u otras herramientas sBPF).
¿Qué debo instalar primero?
Un venv, luego solders y solana (solana-py). Añade anchorpy cuando llames a programas Anchor. Añade httpx, pandas o polars para DAS y análisis.
¿Es necesario solders con solana-py?
Sí, para solana-py moderno: los tipos principales y la serialización provienen de solders. Aprende ambos paquetes como una sola pila.
¿Cuándo necesito AnchorPy?
Cuando invocas programas Anchor 0.32.1 y deseas clientes de instrucciones y cuentas dirigidos por IDL en lugar de discriminadores y metadatos de cuenta manuales.
¿Cómo construyo una transferencia o una transacción multi-instrucción?
Compón instrucciones de solders, obtén un blockhash reciente, construye un mensaje, firma una transacción versionada, simula y luego envía a través de solana-py. Ver Construcción de Transacciones en Python.
¿Cómo debo leer los saldos de tokens y las tenencias de NFT?
Usa métodos RPC de cuenta de token para saldos de SPL y un proveedor compatible con DAS para metadatos de NFT/cNFT y consultas conscientes de la compresión. Ver Lectura de Datos de Cadena.
¿Puedo usar Python para una dApp de navegador conectada a una billetera?
Posible pero incómodo. Prefiere @solana/kit 7.0.0 (y adaptadores de billetera) en el navegador; mantén Python para servidores y bots que no necesiten experiencia de billetera en la página.
¿Cómo se relacionan los servicios Python con Agave 4.1.1?
Son clientes RPC de nodos Agave (o proveedores compatibles). Los niveles de compromiso, los resultados de simulación y los mercados de tarifas coinciden con el comportamiento del clúster, no con una cadena específica de Python.
¿Qué pasa con la gestión de claves?
Carga JSON de keypair compatible con Solana CLI solo en entornos seguros. Prefiere variables de entorno o un gestor de secretos. Nunca incluyas archivos de claves en el control de versiones. Usa billeteras calientes con fondos limitados para bots.
¿Por qué expiran mis transacciones?
Los blockhashes tienen una vida útil corta. Los bucles de eventos largos deben actualizar los blockhashes y volver a firmar. Las políticas de reintento deben detectar la expiración y reconstruir, no reenviar una firma obsoleta para siempre.
¿Cómo analizo la actividad del protocolo en notebooks?
Extrae muestras acotadas de firmas o cuentas (o CSV/Parquet del indexador), normaliza las cantidades enteras y luego agrega en pandas/Polars. Ver Análisis de Datos.
¿Deberían los bots usar clientes síncronos o asíncronos?
Prefiere AsyncClient cuando consultes muchas cuentas, extiendas RPC o mezcles websockets con envíos. El Client síncrono está bien para scripts cortos.
¿Por dónde debería empezar un nuevo compañero en esta sección?
Esta descripción general, luego Fundamentos de Python para Solana, luego solders/solana-py, transacciones, AnchorPy, lecturas y análisis según lo requiera tu rol.
¿Necesito tener Solana CLI instalado para usar Python?
No estrictamente para scripts solo de RPC, pero CLI 3.0.10 es invaluable para la generación de claves, airdrops en devnet, configuración y para alinear la configuración del clúster con tu entorno Python.
¿Puede Python desplegar programas?
El despliegue es una preocupación de la CLI / toolchain (solana program deploy, Anchor deploy). Python puede envolver llamadas a subprocesos en automatización de operaciones; no reemplaza cargo build-sbf.
Relacionados
- Fundamentos de Python para Solana - ejemplos cortos para encajar, RPC, txs, AnchorPy y datos
- solders & solana-py - primitivas, cliente RPC y el par SDK por defecto
- Construcción de Transacciones en Python - instrucciones, firma, simulación y envío
- AnchorPy - clientes IDL para programas Anchor 0.32.1
- Lectura de Datos de Cadena - cuentas, tokens, firmas y DAS
- Análisis de Datos - datos RPC e indexador en pandas/Polars
Versiones de la pila: Esta página fue escrita para Agave 4.1.1, Solana CLI 3.0.10, Anchor 0.32.1, Rust 1.91.1, y @solana/kit 7.0.0.