Wie man web3.js zum Laufen bringt

Ich bin ein neuer Lernender. Ich bin verwirrt darüber, wie man web3.js auf einem Shared Hosting zum Laufen bringt. Der Benutzer, der die Funktion verwendet, muss Metamask installiert haben.

Da ich Shared Hosting verwende, kann ich den Knoten oder Geth nicht auf dem Shared Hosting installieren.

Ich habe die web3.js von https://github.com/ethereum/web3.js/ heruntergeladen und die Dateien auf das Shared Hosting hochgeladen und dann mit der HTML-Datei verknüpft.

<script src="assert/dist/web3.js></script>

Ich folge der Anleitung in diesem Beitrag. Ist es möglich, web3.js-API-Methoden zu verwenden, um mit einem auf Rinkeby bereitgestellten Vertrag zu interagieren?

und fügen Sie den Code zum Tag hinzu

Ich verwende eine Domain mit https://

Ich verwende den Google Chrome-Browser.

Ich habe Metamask installiert und mich angemeldet, verbunden mit dem Rinkeby Test Network.

Geben Sie hier die Bildbeschreibung ein

Ich lade die folgende HTML-Datei auf den gemeinsam genutzten Hosting-Server hoch und führe sie aus, erhalte aber den Fehler

Unten ist der vollständige HTML-Code, den ich zum Testen verwendet habe.

<!doctype>
<html>
<head>
<meta charset="UTF-8">
<title>Hello Project</title>
<script src="assets/dist/web3.js"></script>
<script>
    var Web3 = require('web3');
    var web3 = window.web3;

    if(typeof web3 !== 'undefined') {
        console.log("Using web3 detected from external source like Metamask");
        web3 = new Web3(web3.currentProvider);
    } else {
        console.log("Using localhost");
        web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
    }

    var account = web3.eth.accounts[0];
    console.log(account);
</script>
</head>
<body><p>Hello Project</p></body>
</html>

Geben Sie hier die Bildbeschreibung ein

Das HTML web3.js kann das Rinkeby Test Network nicht als Anbieter erkennen.

Was habe ich vermisst? Ratschläge werden sehr geschätzt. Danke

Antworten (4)

Das Hauptproblem hierbei ist, dass Sie einen Knoten angeben localhost:8545, der einem lokalen Knoten auf Ihrem Computer entsprechen sollte.

Wenn Ihr Benutzer über Metamask verfügt, müssen Sie ein Web3-Objekt nicht selbst instanziieren, Metamask erledigt dies bereits, indem Sie die web3-Instanz in Ihren Browser einfügen window.web3. Metamask fängt dann die Transaktionen ab, wenn diese Instanz zum Tätigen von Anrufen verwendet wird, und verlässt die Transaktion – wenn sie vom Benutzer akzeptiert wird – auf das aktuell verbundene Netzwerk.

OK. Danke für den Ratschlag. Nachdem ich Ihre Kommentare gelesen habe. Ich habe jetzt die Antwort und es funktioniert. Ich werde den Arbeitscode auf der Post posten.

Ich gehe davon aus, dass MetaMask in dem Browser, den Sie zum Testen verwenden, installiert ist und ausgeführt wird.

Wenn ja, ist es schwer mit Sicherheit zu sagen, aber ich vermute, dass Sie zu window.web3früh nachsehen (bevor MetaMask die Möglichkeit hatte, es zu injizieren).

Ich würde auf das Fensterladeereignis warten, bevor ich nach suche window.web3.

Danke smarx und Asone für die Beratung. Ich habe es jetzt mit folgendem Code zum Laufen gebracht:

  • Verwenden Sie Google Chrome
  • Metamaske installiert
  • Verwenden Sie einen Shared-Hosting-Server
  • Keine Notwendigkeit, Geth oder einen anderen Client zu installieren
  • Nachteil – Der Benutzer MUSS MetaMask installiert haben oder MIST verwenden, um mit dem Netzwerk zu interagieren, da kein lokaler Server vorhanden ist oder kein eigener VPS-Knoten ausgeführt wird

.

<html>
   <head>
      <title>Hello Project</title>
      <script src="assets/dist/web3.js"></script>
   </head>
   <body>
      <p>Hello Project</p>
      <div id="err_msg_box"></div>

      <script>
          window.onload = function(){
              if (typeof web3 === 'undefined'} {
                 $('#err_msg_box').html('You need <a href="htps://metamask.io">MetaMask</a> browser plugin to run this example');
              } else {
                 // Here the code to execute the project
                 // No need to set Provider, use web3.eth directly
                 // web3.eth.getAccounts(function(err,res){ console.log(res);});
              }
         }
     </script>
     <script src="assets/js/jquery-1.10.2.min.js"></script>
   </body>
</html>
Nur ein Hinweis, Ihre Antwort entspricht eher dem, was @smarx erwähnt hat.

im http-anbieter könnten sie infura.io verwenden - sie bieten zugriff auf die virtuelle ethereum-maschine, sie müssen sich nur dort registrieren und ihre url-schlüssel erhalten