Daten von der Blockchain abfragen
Jetzt fragen wir Informationen von der Blockchain ab. Dazu verbinden wir uns mit MetaMask.
- Legen Sie eine neue Datei index_s4_Dapp1_02.html an und fügen Sie dort den Quellcode aus folgender Datei ein: index_s4_Dapp1_02.html.
- Ändern Sie in Ihrer server_s4.js Datei den Dateinamen der Html-Datei zu index_Dapp1_02.html.
- Wechseln Sie zur Konsole.
- Beenden Sie den Server mit Strg + C
- Starten Sie den Server neu: node server_s4.js
- Rufen Sie die Seite erneut auf: localhost:3000
Es sollte sich jetzt MetaMask öffnen. Loggen Sie sich mit Ihrem Passwort ein.
Auf der Website sollte dann die Blocknummer angezeigt werden.
Aufgabe
Lösen Sie die folgenden Aufgaben. Sie haben ca. 5 Minuten dafür Zeit.
- Lassen Sie sich das Guthaben der folgenden Adresse anzeigen: 0x8C968032FC345D599549053498a07dBaE2f4dfab
- Lassen Sie sich das verbrauchte Gas des Blocks Nr. 500000 anzeigen.
- Lassen Sie die das benötigte Gas der folgenden Transaktion anzeigen: 0xf8664d241cfcbb86c6df24ceb0578872c379ecf9d1b509660e05a2ff02698d61
Hilfe:
Nutzen Sie dafür die Dokumentation der RPC-Api:
https://ethereum.org/en/developers/docs/apis/json-rpc/
https://www.quicknode.com/docs/ethereum/eth_accounts
Lösung
<!DOCTYPE html>
<html>
<head>
<script src="https://cdn.jsdelivr.net/npm/web3@latest/dist/web3.min.js"></script>
<!-- web3.js is eine Conveniance-Library, die die RPC-Aufrufe wrappt -->
<script>
// Muss von einem Server ausgeliefert werden, sonst reagiert MetaMask nicht.
// Opt in: https://docs.metamask.io/guide/rpc-api.html#permissions
window.addEventListener("load",(event) => {
if(window.ethereum){
ethereum.request({method:'eth_requestAccounts'}).then(function(res){
console.log(res);
// Get Block number
ethereum.request({method: "eth_blockNumber", params: []}).then(function(blknr){
console.log(parseInt(blknr));
document.getElementById("blocknumber").innerHTML = parseInt(blknr);
});
// Get Block Balance of address
ethereum.request({method: "eth_getBalance", params: ["0xBc6b2C1c358EcA7AA07e61954060584f382DDA81", "latest"]}).then(function(balance){
console.log(balance);
document.getElementById("balance").innerHTML = balance;
// gibt das Guthaben in Wei in Hexadezimaldarstellung zurück
});
// Alternative Methode mittels web3.js
window.web3 = new Web3(window.ethereum);
web3.eth.getBlock(500000).then(function(block){
console.log(block);
document.getElementById("block").innerHTML = block["hash"];
})
web3.eth.getTransaction("0x013aa823a7a80754b1676ee826c89de9a6afd629a3c4426e1fe3919aae11ede1").then(function(transaction){
console.log(transaction);
document.getElementById("transaction").innerHTML = transaction.gas;
})
});
}else{
return false;
}
})
</script>
</head>
<body>
<h1>My First Dapp</h1>
<div>Blocknummer: </div>
<div id = "blocknumber"></div>
<br>
<div>Balance: </div>
<div id = "balance"></div>
<br>
<div>Block:</div>
<div id = "block" ></div>
<br>
<div>Transaction:</div>
<div id = "transaction" ></div>
</body>
</html>
Eine Musterlösung finden Sie in der Datei index_s4_Dapp01_03.html
Der Block wird auf der Browserkonsole ausgegeben.
Vergessen Sie nicht, den Dateinamen im Server zu aktualisieren und den Server neu zu starten.