Communitygithub.com

mitgajera/solana-program-upgrade-skill

Skill de Claude Code para actualizaciones seguras de programas Solana y migraciones de cuentas on-chain: versionado, realloc/redimensionamiento, simulación en fork, autoridad multisig y reversión.

¿Qué es solana-program-upgrade-skill?

Este skill de Claude Code (solana-program-upgrade) está diseñado para gestionar el ciclo de vida más crítico y potencialmente catastrófico en el desarrollo de Solana: la actualización de un programa en vivo y la migración segura de los datos de sus cuentas on-chain. Proporciona un flujo de trabajo estructurado en 8 pasos que abarca desde el análisis de diferencias de esquema, la selección de estrategias de migración (eager, lazy o copia a nueva cuenta), la implementación de versionado de cuentas y migraciones con realloc, hasta la simulación en forks de mainnet y el aseguramiento de la autoridad de actualización mediante multisig (Squads v4). El skill incluye comandos como `/plan-upgrade`, `/simulate-upgrade` y `/check-upgrade-authority`, así como agentes especializados como `program-migration-architect` y `migration-qa-engineer`. Está pensado como un complemento del `solana-dev-skill` y se enfoca exclusivamente en la actualización y migración, no en el despliegue inicial. Soporta tanto programas Anchor como nativos/Pinocchio y hace énfasis en la seguridad: nunca cambiar la disposición de una cuenta sin una etiqueta de versión, simular siempre contra un clon del estado real de mainnet, y mantener un plan de reversión.

Compatible con✓Claude Code~Codex CLI~Cursor
npx skills add mitgajera/solana-program-upgrade-skill

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

solana-program-upgrade

Actualiza un programa Solana en vivo y migra los datos de sus cuentas on-chain de forma segura: versionado, migración realloc perezosa, simulación en fork, higiene de la autoridad de actualización y reversión. Este es el paso más catastrófico del ciclo de vida en Solana, hecho sobrevivible.

Complemento de solana-dev-skill. Ese skill se encarga de los fundamentos de Anchor/Pinocchio y pruebas en campo verde. Este skill solo maneja el ciclo de vida de actualización + migración – úsalo una vez que un programa ya está desplegado y necesita cambiar.


Reglas de oro (la columna vertebral de seguridad)

  1. Nunca cambies la disposición de una cuenta en vivo sin una etiqueta de versión + una ruta de migración. Las cuentas antiguas son bytes sin procesar; el código nuevo que las lee con una estructura modificada -> AccountDidNotDeserialize o corrupción silenciosa. El discriminador de 8 bytes protege el tipo, no la versión.
  2. Simula contra un clon real del estado de mainnet antes de mainnet. Siempre ejecuta la actualización y migración exactas en un fork primero y compara los bytes de las cuentas. Sin excepciones.
  3. Usa multisig para la autoridad de actualización. Una sola clave activa que pueda reemplazar toda la lógica del programa es un vector de rug/compromiso. Muévela a Squads v4.
  4. Las migraciones de datos on-chain suelen ser solo hacia adelante. Diseña migraciones aditivas y reanudables; no asumas que puedes revertir los datos.
  5. Conserva el .so anterior. Siempre puedes revertir el código rápidamente incluso cuando los datos no se pueden revertir.
  6. Por defecto, usa devnet/localnet/fork. Nunca apuntes a mainnet automáticamente en ningún ejemplo.

El flujo de trabajo de actualización

Sigue en orden. Cada paso dirige a un archivo enfocado para profundizar.

  1. Diferenciar el esquema - compara las estructuras #[account] antiguas vs nuevas. Identifica cambios aditivos vs cambios disruptivos (reordenar/eliminar/recambiar tipo = disruptivo).
  2. Elegir una estrategia - migración eager (forzada) vs perezosa (al tocar) vs copiar a nueva cuenta -> migration-strategies.md.
  3. Escribir estructuras versionadas - agrega una etiqueta de versión, bifurca según la versión almacenada -> account-versioning.md.
  4. Implementar la migración - realloc manual (línea base portable) -> realloc-migration.md; o el tipo Migration de Anchor si tu versión lo tiene -> anchor-migration-type.md.
  5. Simular en un fork - clona cuentas reales, ejecuta la actualización, compara bytes, verifica idempotencia -> fork-simulation.md.
  6. Asegurar la autoridad - verifica/mueve a multisig Squads antes de tocar mainnet -> upgrade-authority.md.
  7. Desplegar el binario - flujo de buffer, extend si es más grande, IDL, --final -> program-deploy-upgrade.md.
  8. Verificar y mantener un plan de reversión - confirma que las cuentas se deserializan; conserva el .so anterior y una ruta de recuperación de migración parcial -> rollback-recovery.md.

Tabla de enrutamiento

Encuentra la fila que coincida con la situación y lee ese archivo.

Síntoma / tareaLee
AccountDidNotDeserialize / discrepancia de tamaño / valores incorrectos después de una actualizaciónaccount-versioning.md, luego realloc-migration.md
Se agregó/eliminó/reordenó/recambió un campo en una estructura #[account]account-versioning.md
"¿Cómo versiono mi cuenta para poder cambiarla después?"account-versioning.md
Necesitas agrandar/encoger una cuenta existente en su lugarrealloc-migration.md
Migración perezosa "al tocar" vs eager de una sola vezrealloc-migration.md, migration-strategies.md
realloc::zero riesgo de bytes obsoletos / dirección del relleno de alquilerrealloc-migration.md
Límite de crecimiento de realloc de 10 KB por instrucción, crecimientos grandesrealloc-migration.md
Quieres el nuevo tipo Migration<'info, From, To> de Anchoranchor-migration-type.md
Errores AccountAlreadyMigrated / AccountNotMigratedanchor-migration-type.md
Elegir entre eager vs perezosa vs copiar a nueva cuentamigration-strategies.md
Migrar un conjunto grande de cuentas (ej. decenas de miles) de forma económicamigration-strategies.md
Migración por lotes/crank/keeper, paginación, seguimiento de progresomigration-strategies.md
Realloc en el lugar imposible (encoger más allá de los datos, cambio de tipo)migration-strategies.md
Redesplegar / actualizar el binario del programaprogram-deploy-upgrade.md
Flujo solana program write-buffer / deploy --bufferprogram-deploy-upgrade.md
El nuevo .so es más grande que el desplegado (solana program extend)program-deploy-upgrade.md
Actualizar el IDL (anchor idl upgrade)program-deploy-upgrade.md
Desplegar en el lugar vs nuevo id de programa (efecto en PDAs/cuentas)program-deploy-upgrade.md
¿Quién controla el programa? Clave única vs multisigupgrade-authority.md
Mover la autoridad de actualización a un multisig Squads v4upgrade-authority.md
set-upgrade-authority, timelock, gestión de clavesupgrade-authority.md
Hacer el programa inmutable (--final) y qué cuestaupgrade-authority.md
Probar la actualización antes de mainnet / clonar estado realfork-simulation.md
Fork de mainnet con Surfpool; comparar bytes de cuentas antes/despuésfork-simulation.md
Pruebas unitarias con LiteSVM / Mollusk para la instrucción de migraciónfork-simulation.md
Demostrar que la migración es idempotente (ejecutar dos veces = no operación)fork-simulation.md
La actualización salió mal - recuperar el código antiguo rápidamenterollback-recovery.md
Conjunto de cuentas migrado a medias; reanudar de forma segurarollback-recovery.md
Pausa / guardia de migración / flag de características de emergenciarollback-recovery.md
Programa nativo / Pinocchio (sin azúcar de Anchor)realloc-migration.md, account-versioning.md
Enlaces autoritativos y documentación (verificar actualidad)resources.md

Herramientas complementarias

  • Comandos: /plan-upgrade (diferencia de esquemas -> plan de migración + informe de riesgos), /simulate-upgrade (fork, clonar, ejecutar, comparar), /check-upgrade-authority (auditar clave única vs multisig).
  • Agentes: program-migration-architect (diseñar la migración a partir de una diferencia de esquemas), migration-qa-engineer (escribir pruebas en fork/LiteSVM, verificar que no haya corrupción).
  • Regla: account-layout-guard se activa automáticamente al editar estructuras #[account] / state.rs y requiere un incremento de versión + una ruta de migración.

Contrato de precisión

Cada flag de CLI, restricción de Anchor, crate y tipo de cuenta en los archivos enrutados debe ser real y verificable. Cuando tengas dudas, verifica contra las versiones instaladas (anchor --version, solana --version, el changelog de Anchor) – nunca inventes. Trata el tipo Migration como posiblemente no liberado; el patrón manual de realloc es la opción portable por defecto.

Skills relacionados