IDLs On-Chain
O Anchor pode armazenar a IDL on-chain em uma conta pertencente ao programa, para que exploradores e clientes busquem interfaces canônicas pelo ID do programa.
Receita
anchor idl init -f target/idl/my_program.json <PROGRAM_ID>
anchor idl fetch <PROGRAM_ID> -o idl/my_program.jsonQuando usar isso: Você quer interfaces descobertas sem depender exclusivamente do GitHub.
Exemplo de Trabalho
# Após deploy e build
anchor idl init -f target/idl/my_program.json Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS --provider.cluster devnet
# Consumidores buscam
anchor idl fetch Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS -o fetched.jsonO que isso demonstra:
idl initcria a conta IDL on-chainidl fetchrecupera o JSON para clientes- Atualiza a IDL com
anchor idl upgradequando a API muda - Emparelha com builds verificáveis para confiança
Mergulho Profundo
Modelo de Confiança
A IDL on-chain é conveniente, mas não substitui builds reproduzíveis. Emparelhe com hashes de programa verificados.
Limites de Tamanho
IDLs grandes podem precisar de estratégias de fragmentação; monitore o tamanho da conta e o aluguel (rent).
Armadilhas
- IDL não atualizada após upgrade - Clientes buscam API desatualizada. Correção: Execute
idl upgradecom a versão do programa. - Confiar na IDL buscada sem verificação de hash - Risco na cadeia de suprimentos. Correção: Compare com o artefato de release.
- Comprometimento da chave de autoridade - IDL maliciosa publicada. Correção: Proteja a autoridade de upgrade.
- Buscar no cluster errado - Mapeamento incorreto do ID do programa. Correção: Fixe o cluster nas ferramentas.
- Conta IDL superdimensionada -
initfalha. Correção: Remova metadados de documentação do JSON da IDL.
Alternativas
| Alternativa | Usar Quando | Não Usar Quando |
|---|---|---|
| Apenas releases do GitHub | Revisão completa de CI | Descoberta por carteira/explorador |
| Pacote npm de IDL | Instalações versionadas | Descoberta on-chain |
FAQs
Versão do Anchor?
0.32.1 em tópicos avançados.
Quando usar `zero_copy`?
Layouts fixos grandes quando o CU do Borsh é muito alto.
O `realloc` é reversível?
Não facilmente; planeje o crescimento futuro.
As contas restantes estão na IDL?
Não; documente separadamente.
O `declare_program!` precisa de quê?
JSON da IDL do callee em tempo de compilação.
O Anchor pode fazer CPI para Pinocchio?
Sim, com metadados de conta corretos.
Flags de recursos e IDL?
Evite IDLs diferentes por recurso na mainnet.
Como medir o CU?
LiteSVM, Surfpool, simulação em devnet.
Tipos de conta personalizados são comuns?
Não; último recurso.
Próximos passos?
Veja os links relacionados para IDLs on-chain.
Relacionados
- A IDL do Anchor - conteúdo
- Versionamento de IDL - releases
- Builds Verificáveis - verificar
Versões do Stack: Esta página foi escrita para Agave 4.1.1, Solana CLI 3.0.10, Anchor 0.32.1, anchor-lang 0.32.1, Rust 1.91.1, @solana/kit 7.0.0, Surfpool 0.12.0, e LiteSVM 0.6.x.