es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

React, Web3.js y Metaplex: No se puede importar `programs.metadata.Metadata` de @metaplex/js

Problema

Intentando seguir el ejemplo de ‘tu primera solicitud’ aquí: https://docs.metaplex.com/sdk/js/getting-started#your-first-request

El módulo al que se hace referencia en los ejemplos no contiene los datos necesarios.

Para dar contexto, estoy utilizando este ejemplo para desarrollar la solución explicada en el paso 5 de estas instrucciones: https://gist.github.com/creativedrewy/9bce794ff278aae23b64e6dc8f10e906

Pasos para replicar

Paso 1) Instalo el paquete @metaplex/js a través de: yarn add @metaplex/js

Paso 2) Importo programs desde el módulo colocando import { programs } from '@metaplex/js';.

Paso 3) Intento desempaquetar Metadata de programs a través de: const { Metadata } = programs.metadata;

En esta etapa, si ejecuto npm run start o yarn run start, veo el error de que la propiedad Metadata de programs.metadata es indefinida. Cuando veo en node_modules/@metaplex/js/, veo que el error es correcto.

La única mención de metadata en el módulo es la función utilizada para buscar metadatos una vez que tienes la URL. La etapa en la que me encuentro es intentar recuperar la URL, por lo que este paquete no es útil, a pesar de ser el único mencionado en la documentación.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Solución

    Parece que el módulo @metaplex/js ha cambiado desde que se creó la documentación, y la propiedad Metadata ya no está disponible en programs.metadata.

    Para obtener la URL de los metadatos, en su lugar puedes utilizar la función getMetadata del módulo @metaplex/js. Aquí tienes un ejemplo:

    import { WalletAdapterNetwork, getNodeURL } from "@solana/wallet-adapter-base";
    import { Connection, PublicKey } from "@solana/web3.js";
    import { Metadata, METADATA_PROGRAM_ID } from "@metaplex/js";
    
    async function retrieveMetadataURL(tokenMintAddress) {
      const connection = new Connection(getNodeURL(WalletAdapterNetwork.Devnet));
    
      // Recupera la cuenta de token asociada para la dirección dada de la emisión
      const mintAddress = new PublicKey(tokenMintAddress);
      const metadataAddress = await Metadata.findProgramAddress([mintAddress.toBuffer()], METADATA_PROGRAM_ID);
    
      // Recupera los metadatos
      const metadata = await Metadata.load(connection, metadataAddress[0]);
      return metadata?.data?.uri;
    }
    

    En este ejemplo, pasamos la dirección de la emisión del token a la función retrieveMetadataURL, y esta devuelve la URL de los metadatos para ese token.

    Ten en cuenta que también deberás instalar los paquetes @solana/wallet-adapter-base y @solana/web3.js.

Comments are closed.