Cómo empaquetar su propia versión web3 y usar Metamask

Soy un poco novato en javascript y tengo algunas preguntas sobre el uso de web3js y Metamask.

Mi objetivo (por ahora) es mostrar el saldo de éter como se muestra en mi Metamask (donde estoy conectado).

De las preguntas frecuentes de los desarrolladores de Metamask , tomé un trozo de código e hice algunos cambios. Puedo obtener la dirección correcta, pero el saldo es nulo .

Aquí está el código completo:

<html>
  <body>

    <button id="buttonBalance">Click to get balance</button>

    // Bundling my version of web3
    <script type="text/javascript" src="scripts/web3.min.js"></script>
    <script type="text/javascript">

      window.addEventListener("load", function() {

      if (typeof web3 === "undefined") {

          console.log("No web3 provider found");

      } else {

          web3 = new Web3(web3.currentProvider);
          console.log("Using web wallet");

          console.log("address = " + web3.eth.coinbase);

          button = document.getElementById("buttonBalance")
          button.onclick = function tmp()
          {
              web3.eth.getBalance(
                  web3.eth.coinbase,
                  function tmp2 (balance)
                  {
                    console.log("balance=" + balance);
                  });
          };
      }

      })  </script>
  </body>
</html>

El código anterior se muestra en la consola (después de hacer clic en el botón):

Using web wallet
address = 0x4b6efab615a5e2c4002d23318b891d7bf673e1d34
balance=null

Pregunta 1 : ¿Por qué no funciona el código anterior? No recibo errores de sintaxis o "asincrónicos" y Metamask muestra mi saldo correctamente... ?

Pregunta 2 : De las mejores prácticas se establece "agrupar la versión de web3 que se usa durante el desarrollo". Así que descargué web3.min.js y lo "empaquetado" (vea el comentario en el código anterior). Ahora no estoy seguro de si esa implementación se usa realmente bajo el capó. ¿Puedo estar seguro, puedo imprimir la versión web3 más o menos?

Respuestas (1)

Pregunta 1:

La función de devolución de llamada a la que pasa getBalancetoma dos argumentos. El primero es el error que ocurrió y el segundo el resultado. Entonces, por ahora, dado que solo tiene un parámetro para su función, en realidad imprime el error (que es nulo).

Prueba esto:

web3.eth.getBalance(
     web3.eth.coinbase,
     function tmp2 (error, balance)
     {
         if (error) console.log("error" + error);
         console.log("balance=" + balance);
     });

Pregunta 2:

Diría que si incluye el código, usará el que acaba de pasar allí, porque de dónde más debería obtener la dependencia ... Pero para asegurarse de que puede llamar web3.version.apiy asegurarse.

¡Espero que esto responda a tus preguntas!

En el clavo sobre la pregunta 1 , ¡gracias! Sin embargo, sobre la pregunta 2 : el "empaquetado" anterior no parece tener efecto. Porque cuando descargo una versión diferente de web3js y la "agrego" explícitamente, web3.version.api aún informa la versión anterior cuando lo registro en la consola ... Entonces, la pregunta sigue siendo: ¿ Cómo agrego mi propia versión? ? Tal vez (con suerte) me esté perdiendo algo muy simple...
En realidad, mi segunda pregunta merece un hilo propio, así que lo creé aquí: ethereum.stackexchange.com/questions/48729/… Dejaré este hilo como está para mantener la coherencia con la pregunta y los comentarios. Moderadores, siéntanse libres de redirigir.
Es bueno saber que pude responder a la primera pregunta. Sobre el segundo, todavía estoy un poco desconcertado porque estoy bastante seguro de que su agrupación es correcta, pero probablemente el problema se deba a que está agregando eventListener a la ventana. ¿Puede intentar agregar otra llamada fuera de ella y verificar? versión allí? Desafortunadamente, no puedo probarme a mí mismo en este momento... siéntete libre de aceptar la respuesta para este hilo si creaste otro :)