Resumen
Los programas desplegados mediante loader-v3 pueden actualizarse cuando se establece una autoridad de actualización. Revocar la autoridad hace que el programa sea inmutable. Cubre el mecanismo de actualización, las instrucciones de despliegue y actualización de loader-v3, la verificación de compilación y los programas de carga disponibles.
Despliegue de programas
Rust nativo
Despliega usando la CLI de Solana con solana program deploy.
Anchor
Despliega usando el framework Anchor con anchor deploy.
Actualización de programas
Para actualizar un programa, una cuenta debe poseer la autoridad de
actualización (normalmente la cuenta que originalmente
desplegó el programa). Durante el despliegue o
actualización, el nuevo bytecode se carga en una cuenta de búfer temporal y
luego se escribe en la cuenta de datos del programa. Establecer la autoridad de
actualización como None hace que el programa sea inmutable y previene
permanentemente futuras actualizaciones.
Mecanismo de actualización
Cuando se procesa
UpgradeableLoaderInstruction::Upgrade,
el runtime:
- Verifica que la cuenta del programa sea escribible y esté en propiedad de loader-v3.
- Verifica que la cuenta de búfer contenga un estado
Buffercon la autoridad correcta. - Verifica que el
upgrade_authority_addressde la cuenta ProgramData coincida y no seaNone. - Verifica que el programa no haya sido desplegado ya en el slot actual
(
clock.slot != slot). - Carga y verifica los nuevos bytes ELF desde el búfer.
- Copia el nuevo bytecode desde el búfer a la cuenta ProgramData y pone a cero los bytes restantes.
- Financia la cuenta ProgramData hasta la exención de renta.
- Vacía la cuenta de búfer (establece lamports a 0) y trunca sus datos.
- La nueva versión entra en vigor en el siguiente slot (
deployment_slot + 1).
La cuenta Program en sí (su estado y el puntero programdata_address) no
cambia durante una actualización. Solo se actualizan el bytecode de la cuenta
ProgramData y los metadatos del slot.
Referencia de instrucciones de Loader-v3
Loader-v3 (BPF Loader Upgradeable) es el cargador predeterminado actual para desplegar programas en Solana.
| Instrucción | Descripción |
|---|---|
InitializeBuffer | Establece el estado de una cuenta buffer a Buffer con la autoridad especificada. Falla si ya está inicializada. |
Write | Escribe bytes en el desplazamiento especificado en una cuenta buffer. La autoridad debe firmar. |
DeployWithMaxDataLen | Crea un nuevo programa: deriva la dirección de ProgramData, crea la cuenta ProgramData mediante CPI al System Program, verifica y despliega el ELF desde el buffer, establece el estado de la cuenta Program y la marca como ejecutable. |
Upgrade | Reemplaza el bytecode en la cuenta ProgramData de un programa existente desde un buffer. |
SetAuthority | Cambia la autoridad de una cuenta Buffer o ProgramData. Establecerla a None en ProgramData hace que el programa sea inmutable. La autoridad del Buffer no puede establecerse a None. |
SetAuthorityChecked | Similar a SetAuthority, pero requiere que la nueva autoridad también firme la transacción. |
Close | Cierra una cuenta buffer, no inicializada o ProgramData transfiriendo sus lamports a un destinatario. Cerrar ProgramData también escribe una marca Closed en la caché del programa. No se puede cerrar un programa que fue desplegado en el slot actual. |
ExtendProgramChecked | Extiende la asignación de la cuenta ProgramData en bytes adicionales, financiando el rent adicional desde el pagador. |
Verificación de programas
Solana admite compilaciones verificables, que permiten a los usuarios confirmar que el bytecode en cadena de un programa coincide con su código fuente público. El framework Anchor proporciona soporte integrado para compilaciones verificables.
Para verificar el estado de verificación de un programa desplegado, busque su ID de programa en el Solana Explorer, o utilice el CLI de Compilación Verificable de Solana de Ellipsis Labs para verificar de forma independiente los programas en cadena.
Programas de carga
| Cargador | Dirección | Actualizable | Descripción |
|---|---|---|---|
| Cargador Nativo | NativeLoader1111111111111111111111111111111 | Solo mediante actualización del software validador | Posee componentes integrados (Sistema, Voto, Stake) y otros cargadores |
| Cargador BPF (v1) | BPFLoader1111111111111111111111111111111111 | No (gestión del cargador deshabilitada) | Programas heredados |
| Cargador BPF (v2) | BPFLoader2111111111111111111111111111111111 | No (gestión del cargador deshabilitada) | Programas heredados |
| Cargador BPF Actualizable | BPFLoaderUpgradeab1e11111111111111111111111 | Sí, si la autoridad de actualización está establecida | Posee todos los programas recientemente desplegados |
Is this page helpful?