CommunityCodierung & Entwicklunggithub.com

mohit-1710/transfer-hook-scaffold

Generiere einen sicheren Token-2022 Transfer-Hook oder auditiere einen bestehenden. Eine kompilierende Anchor-Referenz, ein Gerüst-Generator und LiteSVM-Angriffstests. Entwickelt für das Solana AI Kit.

Was ist transfer-hook-scaffold?

Dieses Skill für AI-Agenten (wie Claude Code) bietet das vollständige Werkzeugset, um Token-2022 Transfer-Hooks auf Solana zu erstellen, zu debuggen und zu sichern. Transfer-Hooks sind die komplexeste Token-2022-Erweiterung: Sie erfordern einen `fallback`-Einstiegspunkt (da Anchor den nötigen Interface-Diskriminator nicht generiert), eine bytegenaue `ExtraAccountMetaList` und Schutz vor Out-of-Band-Aufrufen. Das Skill liefert ein kompilierendes Anchor 1.0-Referenzprogramm (Whitelist-Gate + Zähler pro Mint) und LiteSVM-Angriffstests, die den gesamten Transfer-Pfad prüfen – inklusive fehlschlagender Whitelist- und direkter Execute-Aufrufe. Der mitgelieferte `scaffold.sh` generiert auf Anfrage ein frisches, sicheres Workspace, und der Audit-Befehl (`/transfer-hook:audit`) prüft bestehende Programme auf die häufigsten Fehler. Es ergänzt rein auf Konsum ausgelegte Skills wie `token2022-integration-guard` und ersetzt allgemeinere Token-Extensions-Skills, wenn Sie einen Hook wirklich bauen oder härten müssen.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add mohit-1710/transfer-hook-scaffold

Installed? Explore more Codierung & Entwicklung skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

In Ihrer bevorzugten KI fragen

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

Dokumentation

Token-2022 Transfer-Hook Scaffold

Transfer-Hooks sind die schwierigste Token-2022-Erweiterung korrekt umzusetzen: Das Programm muss einen Interface-Diskriminator bereitstellen, den Anchor nicht generiert, eine ExtraAccountMetaList mit bytegenauer Reihenfolge anlegen und Out-of-Band-Aufrufe abwehren. Kleine Fehler führen zu undurchschaubaren Laufzeitfehlern. Dieses Skill ist der sichere Standardpfad, untermauert von einem kompilierenden Programm und LiteSVM-Angriffstests.

Im Vergleich zu den Token-Extensions-Skills: solana-token-extensions / token-2022-extensions behandeln Hooks als eine Funktion (ein statisches Beispiel, plus in einem Fall eine Checkliste für Audits). Dies ist das dedizierte Hook-Werkzeug – das einzige, das auf Anfrage einen neuen sicheren Hook generiert (scaffold.sh) und seinen Auditor mit bestandenen Angriffstests untermauert. Ergänzend: Installieren Sie es zusammen mit den anderen, wenn Sie tatsächlich einen Hook bauen oder härten.

Wann dieses Skill verwenden

  • Transfer-Hook bauen: Whitelist-/KYC-Gating, Lizenzgebühren-Durchsetzung, Gebühren-Routing, Kontingente/Buchhaltung pro Transfer, Soulbound-ähnliche Regeln.
  • Hook debuggen: AccountNotFound, NotEnoughAccountKeys, IncorrectAccountAddress, oder „Transfer funktioniert ohne Hook, aber nicht damit.“
  • Vorhandenes Hook-Programm auf Standard-Fallstricke prüfen/auditieren.
  • Token-2022-Mint erstellen, das auf einen Hook zeigt, und den Client-Transfer verdrahten.

Integrator-Hinweis: Wenn Sie auf der konsumierenden Seite sind (einen Drittanbieter-Mint akzeptieren, der einen Hook hat), ist das ein anderes Problem – die meisten Integratoren sollten unbekannte Hook-Mints ablehnen. Siehe das begleitende Skill token2022-integration-guard.

Das mentale Modell (zuerst lesen)

  1. Ein Hook-Programm implementiert Execute (das SPL-Transfer-Hook-Interface), das Token-2022 bei jeder Überweisung per CPI aufruft. Anchor dispatched über sha256("global:<ix>"), was NICHT mit dem Interface-Diskriminator übereinstimmt – daher fügt man einen fallback hinzu, der die Interface-Instruktion dekodiert und im Prozess dispatched (niemals eine Selbst-CPI). → program.md
  2. Der Hook kann zusätzliche Konten benötigen. Sie deklarieren sie einmal in einer ExtraAccountMetaList-PDA (["extra-account-metas", mint]); Token-2022 liest sie und übergibt diese Konten an Execute, wobei Seed-basierte PDAs zur Transferzeit aufgelöst werden. Die Reihenfolge ist entscheidend. → extra-account-metas.md
  3. Der Client muss den Transfer mit createTransferCheckedWithTransferHookInstruction aufbauen (ein einfaches transferChecked lässt die zusätzlichen Konten aus und reverts). → client-wiring.md
  4. Ein Hook ist für Angreifer erreichbar: schützen Sie ihn. → security.md
  5. Beweisen Sie es mit Tests, die durch den Hook überweisen. → testing.md

Routing-Tabelle

Der Benutzer…Lesen
Schreibt das Hook-Programm (Execute, Fallback, Init-Meta-Liste)program.md
Kämpft mit ExtraAccountMetaList / undurchschaubaren Kontofehlernextra-account-metas.md
Verdrahtet den Mint + den Client-Transferclient-wiring.md
Härtet / auditiert einen Hook auf Sicherheitsecurity.md
Schreibt Tests für einen Hooktesting.md
Erstellt ein neues Hook-WorkspaceFühren Sie /transfer-hook:scaffold aus
Auditiert ein bestehendes Hook-ProgrammFühren Sie /transfer-hook:audit aus
Quellen / weiterführende Lektüreresources.md

Was in diesem Skill enthalten ist

ArtefaktPfadBeschreibung
Referenz-Hook-Programmexamples/hook/Ein kompilierender Anchor 1.0 Hook: Whitelist-Gate + Zähler pro Mint, der Fallback-Router und die is_transferring-Absicherung.
Angriffstestsexamples/hook/tests/LiteSVM-Tests, die durch den Hook überweisen: Whitelist-bestehen (Zähler erhöht), nicht-Whitelist-fehlschlagen geschlossen, direkter Execute-Aufruf abgewiesen.
Scaffold-Skriptscripts/scaffold.shGeneriert ein neues Hook-Workspace aus der Referenz.

Fester Stack (2026)

Anchor 1.0, anchor-spl 1.0.2, spl-transfer-hook-interface =2.1.0, spl-tlv-account-resolution 0.11, @solana/spl-token 0.4.14, litesvm 1.2 (kit-nativ, Token-2022 vorinstalliert). Das Referenzprogramm baut und seine Tests bestehen auf diesem Stack.

Unverhandelbare Regeln

  • Fügen Sie einen fallback hinzu, der TransferHookInstruction::Execute dekodiert und im Prozess dispatched (__private::__global::transfer_hook) – niemals invoke auf das eigene Programm.
  • Initialisieren Sie die ExtraAccountMetaList vor dem ersten Transfer, und behalten Sie die Vec<ExtraAccountMeta>-Reihenfolge identisch zur Execute-Kontenstruktur.
  • Schützen Sie Execute mit is_transferring – lehnen Sie Aufrufe außerhalb eines echten Transfers ab.
  • Binden Sie jedes injizierte Konto an PDA-Seeds (Account<T> + seeds), niemals ein nacktes UncheckedAccount, sonst fälscht ein Angreifer die Whitelist.
  • Halten Sie den Hook minimal und total – er läuft bei jedem Transfer; ein Panic/hohe CU sperrt den Token.
  • Testen Sie den Transfer-Pfad, nicht nur Unit-Logik – ein Hook, der compiliert, kann zur Auflösungszeit trotzdem fehlschlagen.

Verwandte Skills