Despliegue de Programas
Despliega programas sBPF compilados con solana program deploy, gestiona cuentas de búfer y controla la autoridad de actualización desde la CLI.
Receta
Tarjeta de referencia rápida - lista para copiar y pegar.
cargo build-sbf
solana program deploy target/deploy/my_program.so
solana program show <PROGRAM_ID>
solana program set-upgrade-authority <PROGRAM_ID> --new-upgrade-authority <AUTH>Cuándo usar esto:
- Primer despliegue de un programa Anchor o nativo en devnet/mainnet.
- Actualización de un programa existente con un nuevo artefacto
.so. - Transferencia de la autoridad de actualización a un multisig o DAO.
- Escritura del ID del programa en
Anchor.toml/declare_id!después de la generación de claves.
Ejemplo Funcional
cd my_anchor_program
anchor build
# Artefacto: target/deploy/my_anchor_program.so
solana config set --url devnet
solana airdrop 2
# Despliegue con keypair de programa explícito (primer despliegue)
solana program deploy \
target/deploy/my_anchor_program.so \
--program-id target/deploy/my_anchor_program-keypair.json
PROGRAM_ID=$(solana-keygen pubkey target/deploy/my_anchor_program-keypair.json)
solana program show "$PROGRAM_ID"Lo que esto demuestra:
cargo build-sbf/anchor buildproduce el.soconsumido por el despliegue.- El keypair del programa determina la dirección del ID del programa en la cadena.
program showconfirma el cargador, la cuenta de datos del programa y la autoridad.
Profundización
Cómo Funciona
- Upgradeable BPF Loader v3 almacena el bytecode en una cuenta de datos del programa (
programdata). - Las transacciones de despliegue suben el ELF en fragmentos a un búfer, y luego finalizan en
programdata. - La clave pública de la autoridad de actualización puede enviar nuevas actualizaciones o establecerse en
none(inmutable). - El despliegue cuesta lamports para el almacenamiento de
programdataexento de alquiler, proporcional al tamaño del.so.
Comandos de Despliegue
| Comando | Propósito |
|---|---|
program deploy | Sube y activa (o actualiza) el bytecode |
program write-buffer | Sube solo al búfer |
program deploy --buffer | Finaliza desde un búfer existente |
program close | Recupera lamports de un búfer (requiere autoridad) |
program set-upgrade-authority | Transfiere o revoca derechos de actualización |
Notas de bash
# Mostrar estimación del coste de despliegue
solana program deploy my_program.so --dry-run 2>&1 | grep -i cost
# Programa inmutable: revocar autoridad de actualización
solana program set-upgrade-authority <PROGRAM_ID> --finalErrores Comunes
- Desajuste del ID del programa -
declare_id!no coincide con el keypair desplegado. Solución: alinearAnchor.tomlylib.rsconsolana-keygen pubkeydel keypair de despliegue. - Falta de SOL para alquiler - los programas grandes necesitan más lamports que un airdrop pequeño. Solución: financiar al desplegador con suficiente SOL para el alquiler de
programdatamás las tarifas. - Despliegue de compilaciones de depuración -
.sono optimizado desperdicia CU y alquiler. Solución:cargo build-sbf --release/anchor build. - Autoridad de actualización perdida - establecer la autoridad a una clave incorrecta bloquea las actualizaciones. Solución: transferir deliberadamente a un multisig; probar primero en devnet.
- Despliegue en clúster incorrecto - ID de programa de devnet en la configuración de mainnet. Solución:
solana config getantes de cada despliegue.
Alternativas
| Alternativa | Usar Cuando | No Usar Cuando |
|---|---|---|
anchor deploy | Espacio de trabajo de Anchor con IDs guionizados | Programas nativos sin Anchor |
solana program write-buffer + finalización separada | CI divide la carga y la activación | Bucles de desarrollo local rápidos |
Pipeline solana-verify | Despliegues verificados reproducibles | Pruebas rápidas y desechables en devnet |
| Surfpool / validador local | Simulación pre-mainnet | Lanzamiento a producción |
Preguntas Frecuentes
¿Dónde está el archivo .so después de anchor build?
target/deploy/<nombre_crate>.so más el archivo -keypair.json correspondiente para el ID del programa.
¿Cuánto SOL cuesta el despliegue?
El alquiler de programdata escala con el tamaño del bytecode más las tarifas de transacción. Ejecuta el despliegue en devnet y lee los lamports cobrados en solana confirm -v.
¿Puedo actualizar sin volver a desplegar el ID del programa?
Sí, envía un nuevo .so al mismo ID de programa mientras poseas la autoridad de actualización.
¿Qué hace --final en set-upgrade-authority?
Elimina permanentemente la autoridad de actualización; el programa se vuelve inmutable.
¿Qué es una cuenta de búfer?
Cuenta temporal que contiene fragmentos de ELF subidos antes de la activación en programdata.
¿Puedo desplegar con una billetera de hardware?
Posible con firmantes compatibles, pero la mayoría de los equipos usan una clave de despliegue activa en devnet y autoridad multisig en mainnet.
¿Por qué falló el despliegue con "cuenta ya en uso"?
A menudo es un búfer parcial o un despliegue concurrente. Cierra búferes obsoletos o espera a que las transacciones en curso se completen.
¿Cómo verifico el hash del binario desplegado?
solana program dump <ID> out.so y compara SHA256 con tu artefacto de compilación, o usa solana-verify para compilaciones reproducibles.
¿Funciona el despliegue en localnet?
Sí, inicia solana-test-validator y despliega en http://127.0.0.1:8899.
¿Quién paga las tarifas de despliegue?
El pagador de tarifas en la transacción de despliegue, normalmente tu keypair de CLI configurado.
Relacionado
- Compilación de Programas (cargo build-sbf) - compila antes de desplegar
- Inspección de Cuentas y Programas - inspección post-despliegue
- Compilaciones Verificables (solana-verify) - artefactos reproducibles
- solana-test-validator - objetivo de despliegue local
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.