Implementación de programas
Esta sección explica el proceso básico de implementación de un programa de Solana utilizando la CLI de Solana.
Referencia de comandos CLI
Tarea | Comando |
---|---|
Compilar programa | cargo build-sbf |
Implementar nuevo programa | solana program deploy <path_to_program.so> |
Actualizar programa existente | solana program deploy <path_to_program.so> (igual que implementar) |
Mostrar información del programa | solana program show <program-id> |
Transferir autoridad del programa | solana program set-upgrade-authority <program-id> --new-upgrade-authority <path_to_keypair> |
Hacer el programa inmutable | solana program set-upgrade-authority <program-id> --final |
Cerrar programa | solana program close <program-id> --bypass-warning |
Verificar saldo de la billetera | solana balance |
Solicitar airdrop (devnet/localhost) | solana airdrop 2 |
Conceptos clave
Antes de profundizar, aclaremos algunos términos:
- ID del programa: La dirección en la cadena de tu programa. Los usuarios interactúan con tu programa haciendo referencia al ID del programa.
- Program Account: La cuenta en la cadena que almacena los metadatos de tu programa. La dirección de la program account es el ID del programa. La program account también almacena la dirección de la ProgramData Account.
- ProgramData Account: La cuenta en la cadena que almacena el código ejecutable implementado de tu programa.
- Autoridad del programa: La cuenta que tiene permiso para actualizar o cerrar el programa. Por defecto, esta es tu billetera CLI.
Requisitos previos
Configurar la billetera
Después de la instalación, crea una billetera local con par de claves. La dirección de esta billetera se establece como la autoridad del programa predeterminada al implementar programas:
$solana-keygen new
Esto crea un keypair en ~/.config/solana/id.json
por defecto.
Configurar clúster
Elige a qué clúster de Solana desplegar. Usa el comando solana config get
para
verificar tu configuración actual:
$solana config get
Cambia entre clústeres según sea necesario:
$solana config set --url mainnet-beta$solana config set --url devnet$solana config set --url localhost$solana config set --url testnet$solana config set --url "https://your-rpc-url.com"
Fondear billetera
Necesitarás SOL para pagar los despliegues del programa. La cantidad depende del tamaño de tu programa.
Para devnet o localhost, fondea tu billetera usando el comando solana airdrop
:
$solana airdrop 2
Verifica el saldo de tu billetera:
$solana balance
Operaciones básicas
Compilar programa
Para compilar un programa, usa el comando cargo build-sbf
:
$cargo build-sbf
Programa de ejemplo
Aquí hay un programa mínimo de Solana que imprime "Hello, Solana!" en los registros del programa.
use solana_program::{account_info::AccountInfo, entrypoint, entrypoint::ProgramResult, msg, pubkey::Pubkey,};entrypoint!(process_instruction);pub fn process_instruction(_program_id: &Pubkey,_accounts: &[AccountInfo],_instruction_data: &[u8],) -> ProgramResult {msg!("Hello, Solana!");Ok(())}
Resultado de la compilación
Compila tu programa usando el comando cargo build-sbf
:
$cargo build-sbf
Esto crea dos archivos importantes en target/deploy/
:
hello_world-keypair.json
: Un archivo de keypair cuya clave pública se usará como tu ID de programahello_world.so
: El ejecutable del programa compilado
Verificar el tamaño y costo del programa
Implementar un programa requiere SOL que se asignará a la cuenta del programa según el tamaño del programa. Los programas más grandes cuestan más SOL para implementar.
Verifica el tamaño de tu programa:
$wc -c < ./target/deploy/hello_world.so
Calcula el SOL requerido para este tamaño (bytes):
$solana rent 18504
Necesitarás un poco más de SOL que lo mostrado para cubrir las comisiones de transacción de implementación.
Implementar programa
Usa el comando solana program deploy
para implementar tu programa:
$solana program deploy ./target/deploy/hello_world.so
El Id del programa mostrado es la dirección permanente de tu programa en la red.
Para implementar con un ID de programa específico (en lugar del generado automáticamente), usa:
$solana program deploy ./target/deploy/hello_world.so --program-id ./custom-keypair.json
Puedes generar nuevos keypairs usando el comando solana-keygen
:
$solana-keygen new -o ./custom-keypair.json
Actualizar programa
Actualiza tu programa usando el mismo comando solana program deploy
:
- Haz cambios en el código de tu programa
- Reconstruye tu programa:
cargo build-sbf
- Despliega la actualización:
$solana program deploy ./target/deploy/hello_world.so
Si tu programa actualizado requiere más espacio (bytes) del que está actualmente asignado, el despliegue extenderá automáticamente la cuenta del programa. Esto ocurre cuando tu nuevo programa es más grande que la versión anterior. La cuenta del programa necesita bytes adicionales para almacenar el nuevo programa. La CLI calculará el SOL requerido y lo deducirá de tu billetera automáticamente.
También puedes extender manualmente un programa para asignar más bytes:
$solana program extend 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE 1000
Gestión de programas
Una vez que tu programa está desplegado, hay varios comandos comunes para gestionar la cuenta del programa.
Ver metadatos del programa
Para verificar los metadatos de tu programa, usa el comando
solana program show
:
$solana program show 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE
Ejemplo de salida:
$ solana program show 7283x8k8fyBcfaFLyPsxbd2VV1AMmZFP7FNoyTXVKJw7Program Id: 7283x8k8fyBcfaFLyPsxbd2VV1AMmZFP7FNoyTXVKJw7Owner: BPFLoaderUpgradeab1e11111111111111111111111ProgramData Address: Gqn7YQVCP8NtYV1qkEqR4Udhj8EJ3fkikvS7HskCNQ7cAuthority: 5kh6HxYZiAebF8HWLsUWod2EaQQ6iWHpHYCz8UcmFbM1Last Deployed In Slot: 6573Data Length: 18504 (0x4848) bytesBalance: 0.12999192 SOL
Transferir la autoridad del programa
Para transferir la autoridad del programa a una cuenta diferente, utiliza el
comando solana program set-upgrade-authority
:
$solana program set-upgrade-authority 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE --new-upgrade-authority ./new-authority-keypair.json
Después de transferir la autoridad del programa, ya no podrás actualizar el programa a menos que tengas acceso al nuevo keypair de autoridad.
Hacer tu programa inmutable
Para hacer tu programa inmutable, utiliza el comando
solana program set-upgrade-authority
con la bandera --final
para eliminar la
autoridad del programa:
$solana program set-upgrade-authority 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE --final
Una vez que un programa es inmutable, nunca podrá ser actualizado o cerrado.
Cerrar tu programa
Para cerrar tu programa y recuperar el SOL asignado a la cuenta del programa,
utiliza el comando solana program close
:
$solana program close 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE --bypass-warning
Una vez cerrado, el ID del programa no puede ser reutilizado. No puedes implementar un nuevo programa en la misma dirección.
Comandos de utilidad
Listar todos los programas
Ver todos los programas donde tu billetera actual es la autoridad:
$solana program show --programs
Ejemplo de salida:
Program Id | Slot | Authority | Balance-------------------------------------------------|------------|------------------------------------------------|-------------7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE | 249885434 | 5kh6HxYZiAebF8HWLsUWod2EaQQ6iWHpHYCz8UcmFbM1 | 0.129991923KSGCk4m5hqJkTjPHBXUCPcqMwJnK3VmkqEsFUKKGJPK | 249883212 | 5kh6HxYZiAebF8HWLsUWod2EaQQ6iWHpHYCz8UcmFbM1 | 0.28654328
Descargar un programa implementado
Para descargar un programa implementado, utiliza el comando
solana program dump
:
$solana program dump 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE ./downloaded_program.so
Opciones avanzadas
Indicadores de implementación
Cuando la red de Solana está congestionada, utiliza estos indicadores para ayudar con la implementación del programa.
Ejemplo de uso:
$solana program deploy ./target/deploy/hello_world.so \--with-compute-unit-price 10000 \--max-sign-attempts 10 \--use-rpc
Explicación de las opciones:
--with-compute-unit-price
: Establece la tarifa prioritaria en micro-lamports (0.000001 SOL) por unidad de cómputo. Consulta la API de tarifas prioritarias de Helius para conocer las tarifas actuales. Una tarifa prioritaria es una tarifa adicional que se paga al líder actual para priorizar tu transacción.--max-sign-attempts
: Número de veces que se reintentará con un nuevo blockhash si las transacciones expiran. (Predeterminado: 5)--use-rpc
: Envía transacciones al RPC configurado. Este indicador requiere una conexión RPC ponderada por stake de proveedores como Triton o Helius.
Is this page helpful?