Wie stelle ich eine Schnittstelle zu einem bereitgestellten Ethereum Smart Contract her?

Ich möchte eine Schnittstelle erstellen, um mit meinem Smart Contract zu interagieren. Ich habe ein Beispiel aus dem folgenden Link. Schalter

Bevor ich meinen Vertrag implementiert habe, habe ich versucht, das angegebene Beispiel zu verwenden. Aber es gibt einen Fehler aus - "Web3 kann nicht gefunden werden. Bitte führen Sie MetaMask aus (oder etwas anderes, das Web injiziert). Schalter

Wie genau testen Sie die App? Verwenden Sie eine auf Ihrem Computer gespeicherte HTML-Seite?
Wenn Sie in der Lage sind, ihre dApp korrekt auszuführen (Sie sehen die Meldungen „Injiziertes Web3 gefunden“ und „GetCount-Aufruf korrekt ausgeführt“), bedeutet dies, dass Sie Metamask installiert haben und angemeldet sind. Überprüfen Sie dies für alle Fälle. Schließen Sie die web3-Bibliothek auf die richtige Weise ein? Sehen Sie irgendwelche Fehler in der Browserkonsole (drücken Sie F12 und gehen Sie zur Konsole, wenn Sie Google Chrome verwenden), wenn Sie sie importieren oder Ihren Code ausführen?
@ShawnTabrizi Ich habe den vorhandenen Code kopiert und als HTML-Seite auf meinem PC gespeichert.
@Patricio Ja, ich habe ein Metamask-Konto und bin angemeldet. Ich bin mir bei der web3-Bibliothek nicht sicher. Ich habe web3 nicht auf meinem PC installiert. Aber ich kann web3 auf Geth verwenden. Ich bin mir also nicht sicher, wo von web3. Muss ich web3 separat installieren?
@Patricio Ich habe web3 heruntergeladen und an einem Ort gespeichert. Dann den Ort als angegeben <script src=".\dist\web3.min.js"></script>. Jetzt wird gefundenes web3 angezeigt. Kann aber nicht auf die Funktionen zugreifen.Irgendwo hängengeblieben.Ich werde das Problem überprüfen und meine Zweifel als nächsten Kommentar hinzufügen.Danke.
@ShawnTabrizi und @Patricio Ich habe die Schnittstelle erfolgreich erstellt. Aber ein Problem, mit dem ich konfrontiert bin, ist - Error: authentication needed: password or unlock. Damit muss ich das Konto immer von der Geth-Konsole aus entsperren. Ich habe versucht, web3.personal.unlockAccount(account1,"password")mein Skript hinzuzufügen, aber es funktioniert nicht.
Bitte beachten Sie auch, dass die Konten web3.version.network, web3.eth.ebenfalls nicht funktionierten.
Leider weiß ich nicht genau, wie ich dieses Problem lösen soll, aber ich bin sicher, wenn Sie einen neuen Beitrag mit diesen Details erstellen, kann Ihnen jemand anderes helfen :)
@ Shawn Tabrizi OK. Danke schön. Ich habe noch eine Frage. Jetzt habe ich die Geth geschlossen und eine neue Instanz gestartet, aber ich erhalte nicht den richtigen Wert des Zählers. Es wird immer angezeigt, dass die 0Transaktion funktioniert, aber der Zählerwert wird nicht erhöht.
Haben Sie den Vertrag selbst in einem lokalen Ethereum-Netzwerk bereitgestellt oder verwenden Sie das Hauptnetzwerk? Und wenn Sie das Hauptnetzwerk verwenden, sind Sie schon vollständig synchronisiert?
Lokales ethereum.private-Netz auf meinem PC

Antworten (1)

Leider können Sie Metamask nicht auf lokalen Webseiten verwenden (einfach eine Datei auf Ihrem Computer öffnen). Es ist ausdrücklich eingeschränkt :

🌐 Http(s) - Webserver erforderlich

Aufgrund von Browser-Sicherheitseinschränkungen können wir nicht mit dapps kommunizieren, die auf file:// ausgeführt werden. Bitte verwenden Sie einen lokalen Server für die Entwicklung.

Sie müssen Ihren Code auf einem lokalen Server veröffentlichen, um die MetaMask-Funktionalität zu testen.

Visual Studio Code hat ein großartiges Plugin , um genau dies einfach zu tun.

Metamask wird als Web3-Anbieter verwendet, oder? Gibt es also ein anderes Tool, das als Web3-Anbieter dient? Ob ich Geth verwenden kann? Ich habe den Vertrag mit der Geth-Konsole bereitgestellt.
Ja, Sie könnten so etwas wie Geth verwenden, das über ein entsperrtes Konto und genügend Test-/Echtether verfügt, um eine Transaktion abzuschließen. Sie würden eine Zeile hinzufügen, die so aussieht: wie hierweb3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545")); gezeigt .