Noções Básicas de State Compression
8 exemplos para você começar com state compression e cNFTs - 6 básicos e 2 intermediários.
Pré-requisitos
npm install @solana/kit@7.0.0 @metaplex-foundation/mpl-bubblegum @metaplex-foundation/mpl-account-compressionRPC com DAS habilitado necessário para leituras de proof. Programa SPL Account Compression: cmtDvXnzBMY46rZyrBGX7p7r4Xc78DGpXEC5rVjrvAf.
Exemplos Básicos
1. Por Que a Compressão Existe
Contas de mint NFT completas custam aluguel por item. Compressão amortiza custo entre milhões de folhas.
// Full NFT: ~several accounts per item
// cNFT: one tree account + leaf hash updates per mint- Inventários de games e POAPs impulsionaram adoção
- Raiz on-chain prova integridade; folhas atualizadas com proofs
- Trade-off: dependência de indexer para dados de proof
Relacionado: Cost & Trade-offs
2. Concurrent Merkle Tree
Concurrent Merkle Trees permitem múltiplas atualizações por slot sem reescrever a árvore inteira em série.
const TREE_PROGRAM = "cmtDvXnzBMY46rZyrBGX7p7r4Xc78DGpXEC5rVjrvAf";
// Tree account stores root, canopy, and change log- Capacidade da árvore escolhida na criação (profundidade potência de 2)
- Canopy cacheia nós superiores de proof on-chain para reduzir tamanho do proof
- Árvores mais profundas suportam mais assets mas custam mais aluguel upfront
Relacionado: How Compression Works
3. Programa Bubblegum
Bubblegum minta e transfere compressed NFTs nas árvores.
const BUBBLEGUM_PROGRAM = "BGUMAp9Gq7iN3nEkgqX1FbwwdBonfLCEEgxoj36SYPk";- Schema de metadata Metaplex em formato comprimido
- Campos de collection e creator suportados
- Programa principal para drops massivos de NFT em 2026
Relacionado: Compressed NFTs (Bubblegum)
4. Ler cNFT via DAS
Carteiras não decodificam folhas merkle manualmente.
const asset = await dasRpc("getAsset", { id: "CNFT_ASSET_ID" });
console.log(asset.compression?.leaf_id, asset.compression?.tree);- Objeto
compressionna resposta DAS do asset interfacefrequentementeCompressedNft- RPC padrão
getAccountInfono id do asset não é suficiente
Relacionado: Reading Compressed Assets (DAS)
5. Buscar Proof para Transferências
Transferências precisam do caminho merkle proof do DAS.
const proof = await dasRpc("getAssetProof", { id: "CNFT_ASSET_ID" });
console.log(proof.root, proof.proof.length);- Comprimento do proof depende da profundidade da árvore menos canopy
- Proof obsoleto falha na transação - atualize antes do envio
- Armazene
rootusado no build time para depurar falhas
Relacionado: Transferring cNFTs
6. Autoridade da Árvore e Delegates
Criador da árvore controla minting; delegates podem ser concedidos para serviços de mint custodial.
# Tree created with tree authority signer
# Bubblegum mint CPIs update leaf under authority rules- Autoridade da árvore comprometida pode corromper estado da árvore
- Use multisig para autoridade de árvore em produção
- Documente permissões de delegate se usar APIs de mint hospedadas
Relacionado: Compressed NFTs (Bubblegum)
Exemplos Intermediários
7. Mintar 10k cNFTs (Esboço)
// 1. createTree (depth/maxBufferSize/canopy per capacity plan)
// 2. mintV1 in loop or batch transactions
// 3. monitor leaf index via DAS getAssetsByGroup- Mints em batch em várias transações para evitar limites de tamanho
- Priority fees durante janelas competitivas de mint
- Lag de indexer significa galeria atrasada após mint
Relacionado: Compression Best Practices
8. Quando Não Usar Compressão
| Use cNFT | Use Core / Token Metadata |
|---|---|
| 10k+ itens similares | Arte fine 1/1 |
| Prioridade de baixo custo por item | Máxima simplicidade de carteira |
| Stack de leitura com DAS | Composabilidade on-chain pesada por NFT |
- Programas on-chain não tratam cNFT como conta SPL simples
- Composabilidade exige instruções conscientes de proof
Relacionado: NFT Basics on Solana
Versões da 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.