Lectura de Assets Comprimidos (DAS)
Los NFT comprimidos no tienen cuentas por asset legibles a través de getAccountInfo. Las aplicaciones de producción utilizan la API DAS para obtener metadatos de assets, campos de compresión y pruebas de Merkle para transferencias.
Receta
const asset = await dasRpc("getAsset", { id: "CNFT_ID" });
const proof = await dasRpc("getAssetProof", { id: "CNFT_ID" });const collection = await dasRpc("getAssetsByGroup", {
groupKey: "collection",
groupValue: "COLLECTION_ID",
page: 1,
limit: 100,
});Cuándo recurrir a esto:
- Renderizar galerías de cNFT en wallets
- Obtener pruebas antes de construir transacciones de transferencia
- Verificar el ID del árbol y el índice de la hoja para depuración
- Dashboards de colecciones después de minteos masivos
Ejemplo Funcional
const DAS_RPC = process.env.DAS_RPC_URL!;
async function dasRpc<T>(method: string, params: unknown): Promise<T> {
const res = await fetch(DAS_RPC, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ jsonrpc: "2.0", id: 1, method, params }),
});
const json = await res.json();
if (json.error) throw new Error(json.error.message);
return json.result as T;
}
type DasAsset = {
id: string;
compression?: {
eligible: boolean;
compressed: boolean;
leaf_id: number;
tree: string;
seq: number;
};
content?: { metadata?: { name?: string } };
};
type AssetProof = {
root: string;
proof: string[];
node_index: number;
leaf: string;
tree_id: string;
};
const assetId = "CNFT_ASSET_ID_FROM_PRIOR_QUERY";
const asset = await dasRpc<DasAsset>("getAsset", { id: assetId });
console.log("nombre:", asset.content?.metadata?.name);
console.log("árbol:", asset.compression?.tree);
console.log("hoja:", asset.compression?.leaf_id);
const proof = await dasRpc<AssetProof>("getAssetProof", { id: assetId });
console.log("nodos de prueba:", proof.proof.length);
console.log("raíz:", proof.root);import { createSolanaRpc } from "@solana/kit";
// RPC estándar para enviar transacciones; DAS para lecturas y pruebas
const txRpc = createSolanaRpc(process.env.RPC_URL!);Lo que esto demuestra:
getAssetdevuelve metadatos decompressionpara cNFTsgetAssetProofsuministra hashes hermanos para instrucciones de Bubblegum- Usa consistentemente el
iddevuelto por DAS, no solo la clave pública del árbol
Análisis Profundo
Cómo Funciona
- El indexador rastrea eventos de Bubblegum y actualizaciones de cuentas de árbol
- DAS normaliza los assets comprimidos junto con Core y Token Metadata
getAssetProofdebe coincidir con la raíz actual; actualiza antes de construir la transaccióngetAssetsByGrouplista los cNFTs de la colección con paginación
Campos DAS para cNFTs
| Campo | Significado |
|---|---|
compression.tree | Clave pública de la cuenta del árbol Merkle |
compression.leaf_id | Índice de la hoja en el árbol |
compression.seq | Secuencia para actualizaciones concurrentes |
id | Identificador del asset DAS para llamadas posteriores |
Notas de TypeScript
// Cachear metadatos de assets por más tiempo que las pruebas
// TTL de pruebas: segundos a minutos durante ventanas de minteo activasErrores Comunes
- Usar la clave pública de minteo como ID de cNFT: la búsqueda en DAS falla. Solución: usar el
iddegetAssetsByOwner. - Prueba obsoleta: la transacción falla con discrepancia de raíz. Solución: volver a obtener la prueba inmediatamente antes de firmar.
- No hay DAS en RPC público: método faltante. Solución: URL del proveedor con DAS habilitado.
- Saltos de paginación: colección incompleta durante el minteo. Solución: paginar hasta obtener una página vacía después de que termine el minteo.
- Ignorar
seq: problemas raros de actualización concurrente. Solución: incluir el últimoseqdel asset en el constructor de transferencias cuando sea necesario.
Alternativas
| Alternativa | Usar Cuando | No Usar Cuando |
|---|---|---|
| Indexador Merkle autoalojado | Control total | MVP rápido |
| APIs de Helius/Tensor | Conveniencia del SDK del proveedor | DAS estándar es suficiente |
| Lecturas solo en cadena | Imposible para metadatos completos | Productos de cNFT |
Preguntas Frecuentes
¿Por qué DAS para cNFTs?
Las hojas no son cuentas completas; los indexadores reconstruyen el estado y exponen una API unificada.
¿getAsset vs getAssetProof?
Asset: metadatos + campos de compresión. Prueba: hermanos Merkle para transacciones.
¿Con qué frecuencia caducan las pruebas?
Cada vez que cambia la raíz del árbol; volver a obtener por transacción durante períodos activos.
¿Método de consulta de colección?
getAssetsByGroup con clave/valor de agrupación de colección.
¿Soporte en Devnet?
Depende del proveedor; confirmar DAS en devnet en el dashboard.
¿Límites de tasa?
Escalar el nivel de la API; cachear metadatos; minimizar las solicitudes de pruebas.
¿Valor de campo de interfaz?
Típicamente indica el tipo de NFT comprimido en el esquema DAS.
¿Enlace a la página DAS estándar?
Ver rpc-websockets-das-api/the-das-api para configuración general.
¿Orden del array de pruebas?
Seguir la expectativa del SDK de Metaplex al alimentar la transferencia de Bubblegum; usar constructores oficiales cuando sea posible.
¿Asset faltante después del minteo?
Retraso del indexador; reintentar; verificar el éxito de la transacción de minteo en el explorador.
¿Fungibles comprimidos?
Producto diferente; aquí el enfoque es cNFT; DAS cubre múltiples interfaces.
¿Integración con kit 7.0.0?
fetch para DAS; kit para enviar transacciones después de construirlas con Umi/mpl-bubblegum.
Relacionado
- Lectura de NFTs (API DAS) - lecturas generales de NFTs
- Transferencia de cNFTs - usar prueba en tx
- Cómo Funciona la Compresión - teoría de pruebas
Versiones de Stack: 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.