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.

window.solana no encontrado en web3js

Quiero conectar una billetera de Solana (phantom u otra) a una aplicación web usando la biblioteca web3js. He leído la documentación de la mayoría de las billeteras y parece que es tan simple como await window.solana.request({ method: "connect" }); pero en mi caso window.solana está indefinido.

Cuando hago console.log(window) puedo ver el valor de Solana con todas sus claves y valores correspondientes.

¿Cómo puedo hacer esto?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para conectar una billetera Solana como Phantom o cualquier otra a una aplicación web utilizando la biblioteca web3js, puedes usar el siguiente código:

    // Verificar si el usuario tiene instalada una billetera Solana
    if ("solana" in window) {
      // Conectar a la billetera
      await window.solana.connect();
    
      // Obtener la clave pública de la billetera actual
      const publicKey = await window.solana.publicKey.toString();
    
      // Utilizar la clave pública en tu aplicación
      console.log(`Conectado a la billetera ${publicKey}`);
    } else {
      // El usuario no tiene una billetera Solana instalada
      console.log("No se detectó una billetera Solana");
    }
    

    En algunos casos, el objeto window.solana puede no estar definido incluso si el usuario tiene instalada una billetera Solana. Esto puede ocurrir si tu código se ejecuta antes de que el script de la billetera haya terminado de cargarse. Para solucionarlo, puedes esperar al evento load antes de conectarte a la billetera:

    window.addEventListener("load", async () => {
      // Esperar a que se defina la billetera Solana
      while (!("solana" in window)) {
        await new Promise((resolve) => setTimeout(resolve, 100));
      }
    
      // Conectar a la billetera
      await window.solana.connect();
    
      // Obtener la clave pública de la billetera actual
      const publicKey = await window.solana.publicKey.toString();
    
      // Utilizar la clave pública en tu aplicación
      console.log(`Conectado a la billetera ${publicKey}`);
    });
    

    Este código espera a que se dispare el evento load y luego verifica si el objeto window.solana está definido cada 100 milisegundos hasta que lo esté. Una vez que la billetera está definida, se conecta a ella y obtiene la clave pública.

Comments are closed.