Despliegue de Programas
Desplegar un programa de Solana sube el bytecode BPF a una cuenta de datos de programa a través del cargador actualizable. Usa Solana CLI 3.0.10 o anchor deploy después de anchor build en clústeres Agave 4.1.1.
Receta
Tarjeta de receta de referencia rápida - lista para copiar y pegar.
anchor build
solana program deploy target/deploy/my_program.so \
--program-id target/deploy/my_program-keypair.json \
--url devnetCuándo usar esto:
- Primer despliegue en devnet/mainnet.
- Envío de bytecode con correcciones de auditoría.
- Redimensionamiento de datos del programa después de grandes cambios de código.
- Lanzamientos automatizados en CI/CD.
Ejemplo de Trabajo
#!/usr/bin/env bash
set -euo pipefail
CLUSTER=devnet
PROGRAM_SO=target/deploy/my_program.so
PROGRAM_KEYPAIR=target/deploy/my_program-keypair.json
solana config set --url "$CLUSTER"
solana balance
# Construir artefacto reproducible
anchor build
# Estimar costo
solana program deploy "$PROGRAM_SO" --program-id "$PROGRAM_KEYPAIR" --dry-run
# Desplegar
DEPLOY_OUT=$(solana program deploy "$PROGRAM_SO" --program-id "$PROGRAM_KEYPAIR")
echo "$DEPLOY_OUT"
PROGRAM_ID=$(solana-keygen pubkey "$PROGRAM_KEYPAIR")
solana program show "$PROGRAM_ID"Lo que esto demuestra:
--dry-runprevisualiza el alquiler y la CU sin aplicarlo.- El ID del programa proviene de la clave pública del par de claves que coincide con
declare_id!. program showconfirma la autoridad y la longitud de los datos después del despliegue.
Profundización
Cómo Funciona
- La CLI divide el ELF en fragmentos que se escriben en una cuenta de buffer.
- La instrucción de despliegue copia el buffer a la cuenta de datos del programa.
- La cuenta del programa es un proxy ejecutable que apunta a la cuenta de datos.
- El pagador financia el mínimo exento de alquiler para el tamaño de la cuenta de datos.
Factores de Costo de Despliegue
| Factor | Impacto |
|---|---|
Tamaño del archivo .so | Alquiler proporcional a los bytes |
| Clúster | devnet SOL más barato; mainnet costo real |
| Despliegue fallido | Alquiler del buffer hasta que se cierre |
| Tarifas de prioridad | Velocidad de aterrizaje durante la congestión |
Notas de bash
# Cerrar buffer fallido para recuperar el alquiler
solana program close <BUFFER_ADDRESS>Trampas
- Desajuste del ID del programa -
declare_id!!= clave pública del par de claves. Solución:anchor keys syncdespués de keygen. - SOL insuficiente - El alquiler + las tarifas exceden el saldo. Solución: Usa
solana program deploy --dry-runprimero. - Clúster incorrecto - Despliegue en devnet, clientes en mainnet. Solución:
solana config getantes de desplegar. - Autoridad de actualización en hot wallet - La clave del desplegador posee las actualizaciones. Solución: Transfiere a multisig inmediatamente.
- Compilación no reproducible - El hash difiere del de CI. Solución: Pipeline
solana-verify build. - Programa sobredimensionado - Excede el tamaño máximo de despliegue. Solución: Elimina depuración, optimiza, divide la lógica entre programas.
Alternativas
| Alternativa | Usar Cuando | No Usar Cuando |
|---|---|---|
anchor deploy | Espacio de trabajo de Anchor | Solo programa nativo sin procesar |
| Reanudar buffer | SO grande / red inestable | Programas pequeños |
| Propuesta de despliegue de Squads | Gobernanza de producción | Iteración de solo devnet |
Preguntas Frecuentes
¿Cuánto SOL cuesta el despliegue?
Principalmente el alquiler de los datos del programa (~tamaño del .so); usa --dry-run para una estimación en tu clúster.
¿Puedo cambiar el ID del programa más tarde?
No - el ID es la clave pública del par de claves; cambiar el ID es un nuevo despliegue y una migración de estado.
¿anchor build vs cargo build-sbf?
anchor build envuelve cargo build-sbf y genera el IDL - preferido para proyectos Anchor 0.32.1.
¿Qué es la cuenta de buffer?
Cuenta temporal de retención para fragmentos ELF durante el despliegue de varios pasos.
¿Falla el despliegue a mitad de camino?
Queda un buffer parcial - cierra el buffer o reanuda el despliegue desde la dirección del buffer.
¿Mismo .so en múltiples clústeres?
Sí - despliega por separado por clúster con pares de claves de programa específicos del clúster si es necesario.
¿Patrón de despliegue en CI?
Construye en CI, despliega con clave segura del gestor de secretos, verifica el hash post-despliegue.
¿Inmutable en el primer despliegue?
Posible revocando la autoridad inmediatamente - raro; usualmente se mantiene la autoridad durante el período de auditoría.
¿Dirección de datos del programa?
Cuenta separada del ID del programa - program show lista la dirección de ProgramData que contiene el ELF.
¿Requisito de Agave 4.1.1?
Construye con herramientas de plataforma coincidentes para que el ELF desplegado coincida con las expectativas del cargador BPF del validador.
Relacionado
- Conceptos Básicos de Despliegue - descripción general del cargador
- Actualizaciones de Programas - actualización de bytecode
- Compilaciones Verificables - verificación de hash
- Mejores Prácticas de Despliegue - política de lanzamiento
Versiones de Stack: 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.