Wie man eine eigene web3-Version bündelt und Metamask verwendet

Ich bin ein bisschen ein Javascript-Noob und habe einige Fragen zur Verwendung von web3js und Metamask.

Mein Ziel (vorerst) ist es, die Etherbilanz so anzuzeigen, wie sie auf meiner Metamask (wo ich eingeloggt bin) angezeigt wird.

Aus den FAQ der Metamask-Entwickler habe ich einen Codeschnipsel genommen und einige Änderungen vorgenommen. Ich kann die richtige Adresse abrufen, aber das Guthaben ist null .

Hier ist der vollständige Code:

<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>

Der obige Code wird in der Konsole angezeigt (nachdem Sie auf die Schaltfläche geklickt haben):

Using web wallet
address = 0x4b6efab615a5e2c4002d23318b891d7bf673e1d34
balance=null

Frage 1 : Warum funktioniert der obige Code nicht? Ich erhalte keine Syntax- oder "Async"-Fehler und Metamask zeigt mein Guthaben korrekt an ... ?

Frage 2 : Aus den Best Practices geht hervor, „die Version von web3 zu bündeln, die während der Entwicklung verwendet wird“. Also habe ich web3.min.js heruntergeladen und "gebündelt" (siehe Kommentar im obigen Code). Jetzt bin ich mir nicht sicher, ob diese Implementierung tatsächlich unter der Haube verwendet wird. Kann ich sicher sein, kann ich die web3-Version oder so ausdrucken?

Antworten (1)

Frage 1:

Die Callback-Funktion, an die Sie übergeben, akzeptiert getBalancezwei Argumente. Das erste ist der aufgetretene Fehler und das zweite das Ergebnis. Da Sie also vorerst nur einen Parameter für Ihre Funktion haben, geben Sie tatsächlich den Fehler aus (der null ist).

Versuche dies:

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

Frage 2:

Ich würde sagen, wenn Sie den Code gebündelt haben, wird er den Code verwenden, den Sie gerade dort übergeben, denn woher sollte er sonst die Abhängigkeit abrufen ... Aber um sicherzugehen, können Sie anrufen web3.version.apiund sich vergewissern.

Hoffe das beantwortet deine Fragen!

Punkt zu Frage 1 , danke! Zu Frage 2 jedoch: Die obige "Bündelung" scheint nicht zu greifen. Denn wenn ich eine andere web3js-Version herunterlade und diese explizit "bündele", dann meldet die web3.version.api immer noch die vorherige Version, wenn ich sie an der Konsole anmelde ... Bleibt also die Frage: Wie bündele ich meine eigene Version ? Vielleicht (hoffentlich) übersehe ich nur etwas ganz Einfaches ...
Tatsächlich verdient meine zweite Frage einen eigenen Thread, also habe ich diesen hier erstellt: ethereum.stackexchange.com/questions/48729/… Ich werde diesen Thread so belassen, wie er ist, um die Konsistenz mit der Frage und den Kommentaren zu wahren. Moderatoren dürfen gerne weiterleiten.
schön zu hören, dass ich die erste Frage beantworten konnte. Über den zweiten bin ich noch etwas verwirrt, weil ich mir ziemlich sicher bin, dass Ihre Bündelung korrekt ist, aber wahrscheinlich liegt das Problem darin, dass Sie den eventListener zum Fenster hinzufügen - können Sie versuchen, einen weiteren Aufruf außerhalb hinzuzufügen und zu überprüfen Version da? Leider kann ich mich gerade nicht testen... akzeptiere die Antwort für diesen Thread, wenn du einen anderen erstellt hast :)