Conceptos básicos de Python para Solana
9 ejemplos para empezar con Python para Solana: 6 básicos y 3 intermedios. Cubre cuándo Python es adecuado, lecturas RPC, construcción de transacciones, AnchorPy y flujos de datos contra clústeres Agave 4.1.1.
Busca en todas las páginas de la documentación
9 ejemplos para empezar con Python para Solana: 6 básicos y 3 intermedios. Cubre cuándo Python es adecuado, lecturas RPC, construcción de transacciones, AnchorPy y flujos de datos contra clústeres Agave 4.1.1.
Crea un entorno virtual e instala la pila principal de Python:
python3 -m venv .venv
source .venv/bin/activate
pip install solders solana anchorpy httpx pandas polarsApuntar a devnet (coincide con los valores predeterminados de Solana CLI 3.0.10):
export SOLANA_RPC_URL=https://api.devnet.solana.comPython es la herramienta adecuada para la automatización off-chain, no para programas on-chain.
# Buenos casos de uso
USE_CASES = [
"bots de market-making y arbitraje",
"APIs de backend que construyen y retransmiten transacciones",
"indexación, ETL y análisis en pandas/Polars",
"notebooks de investigación y scripts de operaciones puntuales",
]
# Mal caso de uso
ON_CHAIN = "Usa Rust + Anchor 0.32.1 para programas desplegados vía cargo build-sbf"Relacionado: solders y solana-py - el par de SDK principal
solana-py expone un cliente HTTP asíncrono para JSON-RPC.
from solana.rpc.async_api import AsyncClient
RPC = "https://api.devnet.solana.com"
async def main():
async with AsyncClient(RPC) as client:
slot = (await client.get_slot()).value
print(f"Slot actual: {slot}")
# asyncio.run(main()) # descomentar en un scriptAsyncClient para bots que consultan suscripciones o distribuyen lecturas.Relacionado: Lectura de datos de la cadena - cuentas y tokens
solders refleja los primitivos de Solana en Python con rendimiento de Rust.
from solders.pubkey import Pubkey
from solana.rpc.api import Client
SYSTEM_PROGRAM = Pubkey.from_string("11111111111111111111111111111111")
client = Client("https://api.devnet.solana.com")
resp = client.get_balance(SYSTEM_PROGRAM)
print(f"Lamports: {resp.value}")Pubkey valida base58 en la construcción, detectando errores tipográficos temprano.solders interoperan con los constructores de solicitudes de solana-py.Coincide con el formato de par de claves que escribe Solana CLI 3.0.10.
from solders.keypair import Keypair
kp = Keypair.from_bytes(bytes(open("/path/to/id.json", "rb").read()))
print(kp.pubkey())~/.config/solana/id.json (JSON de array secreto de 64 bytes)..gitignore y secretos de CI.Relacionado: Construcción de transacciones en Python - flujos de firma
Compón instrucciones con solders, luego envuélvelas en una transacción.
from solders.pubkey import Pubkey
from solders.system_program import TransferParams, transfer
from solders.hash import Hash
from solders.message import Message
from solders.transaction import Transaction
payer = Keypair() # reemplaza con tu par de claves
dest = Pubkey.from_string("Recipient1111111111111111111111111111111")
ix = transfer(TransferParams(from_pubkey=payer.pubkey(), to_pubkey=dest, lamports=1_000_000))
blockhash = Hash.from_string("11111111111111111111111111111111") # obtener fresco vía RPC
msg = Message.new_with_blockhash([ix], payer.pubkey(), blockhash)
tx = Transaction.new_unsigned(msg)
tx.sign([payer], blockhash)Detecta errores de cuenta y de CU sin gastar tarifas.
from solana.rpc.types import TxOpts
sig = client.send_transaction(tx, opts=TxOpts(skip_preflight=False, preflight_commitment="confirmed"))
print(sig.value)skip_preflight=False ejecuta la simulación dentro del nodo RPC.logs en caso de error para depurar cuentas faltantes o errores del programa.Relacionado: Trading y Bots - patrones de automatización
Carga una IDL e invoca instrucciones con clientes tipados.
from anchorpy import Program, Provider, Wallet
from solana.rpc.async_api import AsyncClient
async def call_anchor():
client = AsyncClient("https://api.devnet.solana.com")
wallet = Wallet.local() # usa ANCHOR_WALLET o la ruta predeterminada
provider = Provider(client, wallet)
program = await Program.at("<PROGRAM_ID>", provider)
# await program.rpc["initialize"](...)Wallet.local() refleja el comportamiento de Anchor TS para desarrollo; usa rutas de clave explícitas en producción.Relacionado: AnchorPy - guía completa del cliente
Evita respuestas gigantes de getProgramAccounts.
from solana.rpc.types import MemcmpOpts
filters = [MemcmpOpts(offset=0, bytes="...")] # discriminador específico del programa
resp = client.get_program_accounts(
Pubkey.from_string("<PROGRAM_ID>"),
encoding="base64",
filters=filters,
)memcmp en los discriminadores para reducir las cargas útiles.Relacionado: Análisis de datos - pipelines de pandas/Polars
Haz que la respuesta a incidentes sea manejable cuando las transacciones no se confirman.
import logging
logging.basicConfig(level=logging.INFO, format="%(asctime)s %(levelname)s %(message)s")
log = logging.getLogger("solana-bot")
def on_send_failure(signature: str, err: Exception):
log.error("send_failed sig=%s err=%s", signature, err)getSignatureStatuses de Agave 4.1.1 RPC para el seguimiento de confirmaciones.Relacionado: Mejores prácticas de Python para Solana - lista de verificación de producción
Versiones de la pila: Esta página fue escrita para Agave 4.1.1, Solana CLI 3.0.10, Anchor 0.32.1, anchor-lang 0.32.1, Rust 1.91.1, @solana/kit 7.0.0, Surfpool 0.12.0 y LiteSVM 0.6.x.
Revisado por Chris St. John·Última actualización: 16 jul 2026