Ich habe einen einfachen HelloWorld Solidity-Vertrag auf einem der Ethereum-Testnetze namens Rinkeby mit MyEtherWallet bereitgestellt und natürlich kann ich damit interagieren. Jetzt möchte ich mit diesem Vertrag über web3.js-API-Methoden interagieren, wenn möglich, in Javascript-Code. Ich habe Google dies, konnte aber keine Ahnung bekommen, wo ich anfangen soll.
Hier möchte ich die getWord()- Funktion in Javascript über die web3.js-API aufrufen.
pragma solidity ^0.4.0
contract HelloWorld{
string word = "Hello world";
function getWord() constant returns(string){
return word;
}
}
Zuerst müssen Sie das web3.js-Modul in Ihrem Projekt haben. Sie können sich hier auf eine Anleitung beziehen.
Sobald Sie web3 hinzugefügt haben, können Sie das web3-Objekt verwenden, um mit einem Ethereum-Netzwerk zu interagieren, indem Sie einen lokalen Knoten ausführen oder über injiziertes web3 mit Diensten wie metamask .
Beispiel-Code-Snippet zum Überprüfen auf Metmask oder zum Herstellen einer Verbindung mit einem lokalen Knoten ist:
// Checking if Web3 has been injected by the browser (Mist/MetaMask)
if (typeof web3 !== 'undefined') {
// Use Mist/MetaMask's provider
window.web3 = new Web3(web3.currentProvider);
} else {
console.log('No web3? You should consider trying MetaMask!')
// fallback - use your fallback strategy (local node / hosted node + in-dapp id mgmt / fail)
window.web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
}
Weitere Informationen finden Sie in den Metamask-FAQ und in diesem Beitrag .
Beachten Sie, dass zu verwenden,
window.web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"))
Sie müssen einen Knoten haben, der lokal mit aktiviertem RPC an Port: 8545 ausgeführt wird. Sie können dies tun, indem Sie den folgenden Befehl ausführen:
geth --rpc --rpcaddr <ip> --rpcport <portnumber>
mit dem <ip>
Sein localhost
und <portnumber>
Sein 8545
.
Da Sie sich speziell mit dem Rinkeby-Netzwerk verbinden möchten, können Sie hier nachlesen, wie Sie einen vollständigen Knoten mit Rinkeby synchronisieren, und wenn Sie Metamask verwenden, können Sie das Netzwerk aus der Dropdown-Liste auswählen, die mit der Plugin-Benutzeroberfläche verfügbar ist.
Und mit dem initialisierten web3-Objekt können Sie die JavaScript-Web3-API verwenden, um mit dem Ethereum-Netzwerk zu interagieren, wie hier dokumentiert .
Hoffe das hilft!
Achala Dissanayake
Hafiz Atif