Ether senden

Published by Mario Oettler on

Bisher haben wir nur Informationen abgefragt. Jetzt wollen wir über ein kleines, selbstgebautes Webinterface ein paar Ether schicken.

  • Legen Sie eine Datei namens index_s4_Dapp2_01.html an und fügen Sie folgenden Code ein. Sie können den Code auch in der Datei index_s4_Dapp2_01.html finden

<!DOCTYPE html>
<html>
    <head>
        <script src="https://cdn.jsdelivr.net/npm/web3@latest/dist/web3.min.js"></script>
        <script>
            window.addEventListener("load",(event) => {
                if(window.ethereum){
                    console.log("Ethereum ist da");
                    // https://docs.metamask.io/guide/rpc-api.html#permissions
                    ethereum.request({method:'eth_requestAccounts'}).then(function(res){
                        console.log(res);
                        window.web3 = new Web3(window.ethereum);
                        
                        document.getElementById("sendButton").addEventListener("click", (e) => {
                            var amount    = document.getElementById("amount").value; // Mit "." z. B. 1.4 als String
                            var recipient = document.getElementById("recipient").value;
                            var sender    = document.getElementById("sender").value;
                            console.log(web3.utils.fromDecimal(web3.utils.toWei(amount, "ether")));
                            console.log(amount);
                            console.log(web3.utils.toWei(amount, "ether"));

                            var parameter = [{
                                "from": sender, 
                                "to": recipient, 
                                "value": web3.utils.fromDecimal(web3.utils.toWei(amount, "ether")),
                                "data": ""
                              }];
                            
                            ethereum.request({method:"eth_sendTransaction", params: parameter}).then(function(tx){
                                console.log(tx);
                                document.getElementById("transaction").innerHTML = tx;
                            });
                        });
                     });
                }else{
                    return false;
                }
            })
        </script>
    </head>
        <body>
            <h1>My First Dapp</h1>
            <label for = "text">Betrag in ETH: </label>
            <input type = "text" id = "amount">
            <br>
            <label for = "text">Empfänger: (Account 2)</label>
            <input type = "text" id = "recipient">
            <br>
            <label for = "text">Sender: (Account 1)</label>
            <input type = "text" id = "sender">
            <br>
            <button type = "button" id = "sendButton">Senden</button>
            <br>
            <div>Transaction-Hash: </div>
            <div id = "transaction"></div>
        </body>
</html>
  • Wählen Sie in MetaMask Ihr Hardhat-Netzwerk und schicken Sie sich selbst einen Betrag an ETH.

Aufgabe

Bisher mussten wir die Adresse des Senders immer manuell eingeben. Das ist problematisch, wenn wir zwischendurch in MetaMask den Account wechseln und den neuen Account nutzen wollen.

Ändern Sie die Datei so, dass der Sender stets automatisch angegeben wird.

Ethereum.request({method:'eth_requestAccounts'})

Die obere Zeitle liefert ein Array mit Accounts zurück. Hieraus kann ein Account für den ersten Sender ausgewählt werden.

Nutzen Sie bei einem Accountwechsel das folgende Event

window.ethereum.on('accountsChanged', function(accounts){

// Code here

})

Lösung

Categories: