Fundamentos de Compresión de Estado
8 ejemplos para empezar con compresión de estado y cNFTs - 6 básicos y 2 intermedios.
Prerrequisitos
npm install @solana/kit@7.0.0 @metaplex-foundation/mpl-bubblegum @metaplex-foundation/mpl-account-compressionSe requiere RPC habilitado para DAS para lecturas de pruebas. Programa de Compresión de Cuentas SPL: cmtDvXnzBMY46rZyrBGX7p7r4Xc78DGpXEC5rVjrvAf.
Ejemplos Básicos
1. Por qué existe la Compresión
Las cuentas completas de mint de NFT cuestan alquiler por artículo. La compresión amortiza el costo entre millones de hojas.
// NFT completo: ~varias cuentas por artículo
// cNFT: una cuenta de árbol + actualizaciones de hash de hoja por mint- Los inventarios de juegos y los POAP impulsaron la adopción
- La raíz en la cadena prueba la integridad; las hojas se actualizan con pruebas
- Compromiso: dependencia del indexador para los datos de prueba
Relacionado: Costo y Compromisos
2. Árbol Merkle Concurrente
Los Árboles Merkle Concurrentes permiten múltiples actualizaciones por ranura sin serializar reescrituras completas del árbol.
const TREE_PROGRAM = "cmtDvXnzBMY46rZyrBGX7p7r4Xc78DGpXEC5rVjrvAf";
// La cuenta del árbol almacena la raíz, el dosel y el registro de cambios- La capacidad del árbol se elige en la creación (profundidad potencia de 2)
- El dosel almacena en caché los nodos de prueba superiores en la cadena para reducir el tamaño de la prueba
- Los árboles más profundos admiten más activos pero cuestan más alquiler por adelantado
Relacionado: Cómo funciona la Compresión
3. Programa Bubblegum
Bubblegum acuña y transfiere NFTs comprimidos en árboles.
const BUBBLEGUM_PROGRAM = "BGUMAp9Gq7iN3nEkgqX1FbwwdBonfLCEEgxoj36SYPk";- Esquema de metadatos Metaplex en formato comprimido
- Campos de colección y creador admitidos
- Programa principal para drops masivos de NFT en 2026
Relacionado: NFTs Comprimidos (Bubblegum)
4. Leer cNFT a través de DAS
Las billeteras no decodifican las hojas merkle manualmente.
const asset = await dasRpc("getAsset", { id: "CNFT_ASSET_ID" });
console.log(asset.compression?.leaf_id, asset.compression?.tree);- Objeto
compressionen la respuesta del activo DAS - La
interfacea menudo esCompressedNft - La llamada RPC estándar
getAccountInfoen el ID del activo no es suficiente
Relacionado: Lectura de Activos Comprimidos (DAS)
5. Obtener Prueba para Transferencias
Las transferencias necesitan una ruta de prueba merkle de DAS.
const proof = await dasRpc("getAssetProof", { id: "CNFT_ASSET_ID" });
console.log(proof.root, proof.proof.length);- La longitud de la prueba depende de la profundidad del árbol menos el dosel
- Una prueba obsoleta falla la transacción; actualízala antes de enviar
- Almacena la
rootutilizada en el momento de la creación para depurar fallos
Relacionado: Transferencia de cNFTs
6. Autoridad del Árbol y Delegados
El creador del árbol controla la acuñación; se pueden otorgar delegados para servicios de acuñación custodial.
# Árbol creado con el firmante de la autoridad del árbol
# La acuñación de Bubblegum CPIs actualiza la hoja bajo las reglas de autoridad- Una autoridad de árbol comprometida puede corromper el estado del árbol
- Usa multisig para la autoridad de árbol de producción
- Documenta los permisos del delegado si usas APIs de acuñación alojadas
Relacionado: NFTs Comprimidos (Bubblegum)
Ejemplos Intermedios
7. Acuñar 10k cNFTs (Esquema)
// 1. createTree (profundidad/maxBufferSize/canopy por plan de capacidad)
// 2. mintV1 en bucle o transacciones por lotes
// 3. monitorizar el índice de hojas a través de DAS getAssetsByGroup- Acuñaciones por lotes a través de múltiples transacciones para evitar límites de tamaño
- Tarifas de prioridad durante ventanas de acuñación competitivas
- El retraso del indexador significa una galería retrasada después de la acuñación
Relacionado: Mejores Prácticas de Compresión
8. Cuándo No Usar Compresión
| Usar cNFT | Usar Core / Metadatos de Token |
|---|---|
| 10k+ ítems similares | Arte 1/1 |
| Prioridad de bajo costo por artículo | Simplicidad máxima de billetera |
| Pila de lectura respaldada por DAS | Composición intensiva en programas en cadena por NFT |
- Los programas en cadena no pueden tratar un cNFT como una cuenta SPL simple
- La composabilidad requiere instrucciones conscientes de las pruebas
Relacionado: Fundamentos de NFT en Solana
Versiones de la Pila: Esta página fue 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, y LiteSVM 0.6.x.