Communitygithub.com

mitgajera/solana-program-upgrade-skill

Claude Code Skill für sichere Solana-Programm-Upgrades und On-Chain-Kontenmigration: Versionierung, Realloc/Resize, Fork-Simulation, Multisig-Autorität und Rollback.

Was ist solana-program-upgrade-skill?

Dieses Skill bietet eine vollständige, praxisorientierte Anleitung für das Upgrade eines laufenden Solana-Programms und die zugehörige Migration von On-Chain-Kontodaten – mit Fokus auf Sicherheit und Wiederherstellbarkeit. Es behandelt die kritischsten Fehlerquellen im Solana-Entwicklungslebenszyklus: inkompatible Account-Layouts, verlorene Daten durch fehlende Versionierung (AccountDidNotDeserialize), fehlende Rollback-Strategien und unsichere Upgrade-Authorities. Das Skill führt durch einen strukturierten Workflow aus Schemavergleich, Strategiewahl (eager vs. lazy vs. Copy-to-New-Account), Versionierung der Account-Strukturen, Implementierung der Migration (manuelles realloc oder Anchor Migration-Typ), Fork-Simulation mittels Cloning von Mainnet-Zuständen, Absicherung der Upgrade-Authorität (z. B. mittels Squads v4 Multisig), Deployment des Binaries und Verifikation nach dem Upgrade. Es enthält ausführliche Referenztabellen für häufige Fehlerszenarien, Companion-Tools wie /plan-upgrade und /simulate-upgrade sowie eine Genauigkeitsverpflichtung: Alle verwendeten CLI-Flags, Anchor-Constraints und Crates sind real und gegen die installierten Versionen verifiziert. Das Skill ergänzt solana-dev-skill und überlässt diesem die Grundlagen, während es sich ausschließlich auf den Upgrade- und Migrations-Lifecycle konzentriert – ideal für Entwickler, die bereits ein deployed Programm warten und erweitern müssen.

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

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

solana-program-upgrade

Ein laufendes Solana-Programm upgraden und seine On-Chain-Kontodaten sicher migrieren - Versionierung, lazy realloc-Migration, Fork-Simulation, Upgrade-Authority-Hygiene und Rollback. Dies ist der mit Abstand katastrophalste Lebenszyklusschritt in der Solana-Entwicklung, und dieser Guide macht ihn überlebbar.

Addon zu solana-dev-skill. Dieses Skill besitzt die Grundlagen von Greenfield Anchor/Pinocchio/Testing. Dieses Skill besitzt nur den Upgrade + Migrations-Lifecycle - greife darauf zu, sobald ein Programm bereits deployed ist und geändert werden muss.


Goldene Regeln (das Sicherheitsfundament)

  1. Ändere niemals ein Live-Account-Layout ohne Versionstag + Migrationspfad. Alte Accounts sind rohe Bytes; neuer Code, der sie mit einem geänderten Struct liest -> AccountDidNotDeserialize oder stille Korruption. Der 8-Byte-Diskriminator schützt den Typ, nicht die Version.
  2. Simuliere gegen echten geklonten Mainnet-Zustand, bevor es ans Mainnet geht. Führe immer das exakte Upgrade + Migration auf einem Fork durch und vergleiche die Account-Bytes. Keine Ausnahmen.
  3. Multisig für die Upgrade-Authority. Ein einzelner Hotkey, der die gesamte Programmlogik ersetzen kann, ist ein Rug/Compromise-Vektor. Verschiebe ihn zu Squads v4.
  4. On-Chain-Datenmigrationen sind normalerweise vorwärtsgerichtet. Gestalte sie additiv und fortsetzbar; gehe nicht davon aus, dass du Daten zurücksetzen kannst.
  5. Behalte die vorherige .so. Du kannst den Code immer schnell zurückrollen, auch wenn die Daten nicht rückgängig gemacht werden können.
  6. Verwende standardmäßig Devnet/Localnet/Fork. Zielniemals automatisch Mainnet in irgendeinem Beispiel.

Der Upgrade-Workflow

In dieser Reihenfolge vorgehen. Jeder Schritt führt zu einer fokussierten Datei für die Vertiefung.

  1. Schema diff - vergleiche alte und neue #[account]-Structs. Identifiziere additive vs. brechende Änderungen (Reihenfolge ändern/entfernen/Typ ändern = brechend).
  2. Wähle eine Strategie - eager crank vs. lazy migrate-on-touch vs. copy-to-new-account -> migration-strategies.md.
  3. Schreibe versionierte Structs - füge einen Versionstag hinzu, verzweige basierend auf der gespeicherten Version -> account-versioning.md.
  4. Implementiere die Migration - manuelles realloc (portable Baseline) -> realloc-migration.md; oder der Anchor Migration-Typ falls deine Version ihn hat -> anchor-migration-type.md.
  5. Simuliere auf einem Fork - klone echte Accounts, führe das Upgrade durch, diff die Bytes, überprüfe Idempotenz -> fork-simulation.md.
  6. Sichere die Authority - überprüfe/verschiebe zu Squads Multisig, bevor du Mainnet berührst -> upgrade-authority.md.
  7. Deploye das Binary - Buffer-Flow, extend falls größer, IDL, --final -> program-deploy-upgrade.md.
  8. Verifiziere und behalte einen Rollback-Plan - bestätige, dass Accounts deserialisieren; behalte die vorherige .so und einen Halbmigrations-Wiederherstellungspfad -> rollback-recovery.md.

Routing-Tabelle

Finde die Zeile, die zu deiner Situation passt, und lies diese Datei.

Symptom / AufgabeLies
AccountDidNotDeserialize / Größenkonflikt / falsche Werte nach einem Upgradeaccount-versioning.md, dann realloc-migration.md
Hinzugefügtes/entferntes/umgestelltes/neues Feld in einem #[account]-Structaccount-versioning.md
„Wie versioniere ich meinen Account, damit ich ihn später ändern kann?

Verwandte Skills