mohit-1710/transfer-hook-scaffold

Gere um hook de transferência Token-2022 seguro ou audite um existente. Uma referência compilável para Anchor, um gerador de scaffold e testes de ataque LiteSVM. Construído para o Solana AI Kit.

O que é transfer-hook-scaffold?

Esta skill é a ferramenta dedicada para criar e auditar hooks de transferência Token-2022 no ecossistema Solana. Diferente de outras skills que tratam hooks como um recurso secundário, esta fornece um caminho seguro por padrão, incluindo um programa Anchor de referência que compila, um gerador de scaffold (`scaffold.sh`) para criar novos hooks sob demanda e testes de ataque LiteSVM que provam a segurança. O hook de transferência é a extensão Token-2022 mais difícil de acertar, exigindo um discriminador de interface que o Anchor não gera, um layout de `ExtraAccountMetaList` com ordem exata de bytes e proteção contra invocações fora da banda. A skill documenta o modelo mental completo (Execute, fallback, contas extras, segurança e testes) e inclui regras não negociáveis, como adicionar um fallback que despacha em processo, nunca via self-CPI, e proteger o Execute com a flag `is_transferring`. Suporta Anchor 1.0 e a stack de 2026, e é complementar às skills de extensões de token, devendo ser instalada junto com elas quando o desenvolvedor estiver realmente construindo ou endurecendo um hook.

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

Installed? Explore more Programação e Desenvolvimento skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Scaffold de Hook de Transferência Token-2022

Hooks de transferência são a extensão Token-2022 mais difícil de acertar: o programa deve expor um discriminador de interface que o Anchor não gera, dispor um ExtraAccountMetaList com ordem exata de bytes e resistir a invocações fora da banda. Pequenos erros aparecem como erros opacos de runtime. Esta skill é o caminho seguro por padrão, apoiado por um programa compilável e testes de ataque LiteSVM.

vs. as skills de extensões de token: solana-token-extensions / token-2022-extensions tratam hooks como um recurso (um exemplo estático único, mais uma auditoria em checklist em um caso). Esta é a ferramenta de hook dedicada — a única que gera um hook seguro novo sob demanda (scaffold.sh) e apoia seu auditor com testes de ataque que passam. Complementar: instale-a junto com elas quando estiver realmente construindo ou endurecendo um hook.

Quando usar esta skill

  • Construindo um hook de transferência: bloqueio whitelist/KYC, imposição de royalties, roteamento de taxas, contabilização/limites por transferência, regras do tipo soulbound.
  • Depurando um hook: AccountNotFound, NotEnoughAccountKeys, IncorrectAccountAddress, ou "transferência funciona sem o hook, mas falha com ele."
  • Revisando/auditando um programa de hook existente para as armadilhas padrão.
  • Criando um mint Token-2022 que aponta para um hook e conectando a transferência do cliente.

Nota para integradores: se você está do lado consumidor (aceitando um mint de terceiros que tem um hook), esse é um problema diferente — a maioria dos integradores deve rejeitar mints de hook desconhecidos. Veja a skill complementar token2022-integration-guard.

O modelo mental (leia primeiro)

  1. Um programa de hook implementa Execute (a interface SPL transfer-hook), que Token-2022 chama via CPI em toda transferência. O Anchor despacha por sha256("global:<ix>"), que NÃO corresponde ao discriminador da interface — então você adiciona um fallback que decodifica a instrução da interface e despacha em processo (nunca uma self-CPI). → program.md
  2. O hook pode exigir contas extras. Você as declara uma vez em um ExtraAccountMetaList PDA (["extra-account-metas", mint]); Token-2022 o lê e passa essas contas para Execute, resolvendo PDAs baseados em sementes no momento da transferência. A ordem é crucial. → extra-account-metas.md
  3. O cliente deve construir a transferência com createTransferCheckedWithTransferHookInstruction (um transferChecked simples omite as contas extras e reverte). → client-wiring.md
  4. Um hook é atingível por atacantes: proteja-o. → security.md
  5. Prove isso com testes que transferem através do hook. → testing.md

Tabela de roteamento

O usuário está…Leia
Escrevendo o programa hook (Execute, fallback, init meta list)program.md
Lutando contra ExtraAccountMetaList / erros opacos de contaextra-account-metas.md
Conectando o mint + a transferência do clienteclient-wiring.md
Endurecendo / auditando um hook para segurançasecurity.md
Escrevendo testes para um hooktesting.md
Scaffolding de um workspace de hook novoexecute /transfer-hook:scaffold
Auditando um programa hook existenteexecute /transfer-hook:audit
Fontes / leitura adicionalresources.md

O que acompanha esta skill

ArtefatoCaminhoO que é
Programa hook de referênciaexamples/hook/Um hook Anchor 1.0 compilável: bloqueio whitelist + contador por mint, roteador fallback e guarda is_transferring.
Testes de ataqueexamples/hook/tests/Testes LiteSVM que transferem através do hook: whitelisted passa (contador incrementa), não-whitelisted falha fechado, Execute direto rejeitado.
Script de scaffoldscripts/scaffold.shGera um workspace de hook novo a partir da referência.

Stack fixada (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 (nativo do kit, Token-2022 pré-carregado). O programa de referência compila e seus testes passam nesta stack.

Regras não negociáveis

  • Adicione um fallback que decodifica TransferHookInstruction::Execute e despacha em processo (__private::__global::transfer_hook) — nunca invoke seu próprio programa.
  • Inicialize o ExtraAccountMetaList antes da primeira transferência e mantenha a ordem do Vec<ExtraAccountMeta> idêntica à struct de contas do seu Execute.
  • Proteja o Execute com is_transferring — rejeite chamadas fora de uma transferência real.
  • Vincule cada conta injetada a sementes PDA (Account<T> + seeds), nunca um UncheckedAccount simples, ou um atacante falsifica sua whitelist.
  • Mantenha o hook mínimo e total — ele é executado em toda transferência; um pânico/CU pesado quebra o token.
  • Teste o caminho de transferência, não apenas a lógica unitária — um hook que compila ainda pode falhar no momento da resolução.

Habilidades Relacionadas