Senden von Ether oder Nachrichten an Adressen, die nicht existieren

Ich lese das Ethereum-Whitepaper und brauche Klarheit im folgenden Snippet:

Überweisen Sie den Transaktionswert vom Konto des Absenders auf das Konto des Empfängers. Wenn das empfangende Konto noch nicht existiert, erstellen Sie es. Wenn es sich bei dem empfangenden Konto um einen Vertrag handelt, führen Sie den Code des Vertrags entweder bis zum Abschluss aus oder bis die Ausführung leer ist.

  • Bedeutet dies, dass der Anruf erfolgreich wäre, wenn Sie eine Nachricht / Transaktion an eine Adresse senden, die nicht existiert?
  • Wie funktioniert die Schlüsselverwaltung?
  • Gibt es einen Anwendungsfall, der dies absichtlich tun würde?
  • Was ist der Grund für diese Designentscheidung, denn ich hätte gedacht, dass das Auslösen eines Fehlers der richtige Weg gewesen wäre.

Antworten (3)

Das Senden einer Transaktion an eine zufällige Adresse ist gleichbedeutend mit dem „Brennen“ oder „Zerstören“ der Token.

Dies ist tatsächlich etwas, das bereits häufig mit der Adresse „0“ und 0x000000000000000000000000000000000000dEaD.

Lesen Sie hier nach: Transaktionsempfänger - Mastering Ethereum

Ethereum validiert dieses Feld nicht weiter. Jeder 20-Byte-Wert wird als gültig angesehen. Wenn der 20-Byte-Wert einer Adresse ohne entsprechenden privaten Schlüssel oder ohne entsprechenden Vertrag entspricht, ist die Transaktion dennoch gültig. Ethereum hat keine Möglichkeit zu wissen, ob eine Adresse korrekt von einem öffentlichen Schlüssel (und damit von einem privaten Schlüssel) abgeleitet wurde.

WARNING: Ethereum cannot and does not validate recipient addresses in a
transaction. You can send to an address that has no corresponding
private key or contract, thereby "burning" the ether, rendering it
forever unspendable. Validation should be done at the user interface
level.

Das Senden einer Transaktion an eine ungültige Adresse verbrennt den gesendeten Ether und macht ihn für immer unzugänglich (nicht auszugeben), da keine Signatur generiert werden kann, um ihn auszugeben. Es wird davon ausgegangen, dass die Validierung der Adresse auf der Ebene der Benutzeroberfläche erfolgt (siehe [eip-55] oder [icap]). Tatsächlich gibt es eine Reihe triftiger Gründe für das Verbrennen von Ether, einschließlich als spieltheoretische Abschreckung gegen Betrug in Zahlungskanälen und anderen intelligenten Verträgen.

Beachten Sie, dass es einen Unterschied zwischen "zufälligen" Adressen (vermutlich als solche definiert, für die Sie den privaten Schlüssel nicht kennen) und der Finanzierung eines "neuen" Kontos gibt. Das Brennen von Token ist ein Anwendungsfall für ersteres, aber nicht für letzteres (viel häufiger).

Bedeutet dies, dass der Anruf erfolgreich wäre, wenn Sie eine Nachricht / Transaktion an eine Adresse senden, die nicht existiert?

Ja.

Wie funktioniert die Schlüsselverwaltung?

Ich bin mir nicht sicher, ob ich die Frage verstehe. Für Ethereum-Konten wird ein privater Schlüssel zufällig generiert, daraus ein öffentlicher Schlüssel und daraus eine Adresse abgeleitet. Wenn Sie den privaten Schlüssel haben, der einer Adresse entspricht, können Sie Transaktionen von dort senden.

Gibt es einen Anwendungsfall, der dies absichtlich tun würde?

Sicher. Wenn Sie ein neues Konto erstellen (neuer privater Schlüssel), müssen Sie das Konto dann irgendwie aufladen. Sie tun dies, indem Sie ihm Ether schicken. Das Konto „existiert“ noch nicht in irgendeiner persistenten Form in der Blockchain, weil es noch keinen Saldo hat. Es wird also "erstellt", wenn Sie zum ersten Mal Ether an es senden.

Was ist der Grund für diese Designentscheidung, denn ich hätte gedacht, dass das Auslösen eines Fehlers der richtige Weg gewesen wäre.

Das Auslösen eines Fehlers würde es unmöglich machen, ein neues Konto zu verwenden.

Danke dafür!! Die Antwort ist zwar eine gute Antwort, die andere Antwort erklärt sie jedoch besser

Was dies beschreibt, ist, was die virtuelle Maschine von Ethereum tun sollte, wenn eine Transaktion ausgeführt wird.

Standardmäßig hat jede Adresse 0 Ether. Dies bedeutet, dass der Status aller Ethereum-Adressen bequem als 0 dargestellt werden kann ... es sei denn, es war an einer Transaktion beteiligt (in diesem Fall ist es etwas komplizierter). Darauf bezieht sich das „Erstellen“. Also, ja, das bedeutet, dass in diesem Fall kein Fehler vorliegen kann (das heißt, der Anruf würde erfolgreich sein, es sei denn, Ihnen geht das Benzin aus).

Ich bin mir nicht sicher, was Sie mit "Schlüsselverwaltung" meinen. Es ist unwahrscheinlich, dass jemand Schlüssel für eine zufällige Adresse hat (also nichts zu verwalten). Jeder Ether in diesem Konto ist unzugänglich, bis jemand einen entsprechenden privaten Schlüssel generiert. Aber wenn jemand bereits einen Satz privater Schlüssel hat und eine Kontoadresse teilt, existiert das Konto, soweit es Ethereum betrifft, nicht im praktischen Sinne (dh wird nicht erstellt), bis Sie Ether dorthin senden.

Das Senden von Ether an eine zufällige Adresse kann als Beweis für das Verbrennen verwendet werden (wie das Verbrennen einer physischen Währung, um sie unbrauchbar zu machen). Dies kann aus Gründen wie einer Strafe für eine schlechte Handlung (als Teil eines Smart Contracts) erfolgen, obwohl es bessere Möglichkeiten gibt, einen Proof-of-Burn durchzuführen . Man könnte Proof-of-Burn auch verwenden, um für etwas zu bezahlen, ohne einen expliziten Zahlungsempfänger zu haben. Zum Beispiel könnte ich verlangen, dass jemand, der mir eine E-Mail schickt, etwas Ether verbrennt. Auf diese Weise kann ich zeigen, dass ich nicht wirklich etwas gewinne, wenn ich Leute E-Mails schicken lasse (der Wert aller verbleibenden Ether steigt leicht aufgrund des geringeren Angebots und einer erhöhten Nachfrage nach Ether, um das Brennen zu bezahlen) und die Kosten eines Spammers sind gestiegen, wenn er es versucht um Millionen von Nachrichten zu versenden.

Ein Grund, warum das Verhalten des Akzeptierens aller Adressen wichtig ist, ist, weil sonst jemand das Netzwerk spammen und sagen könnte: "Dieses Konto erstellen" und "Dieses Konto erstellen" ohne Kosten (zumindest in Bezug auf Ether). Und da es Ethereum-Knotenressourcen kostet, nachzuverfolgen, welche Konten vorhanden sind, könnte dies ein Angriff auf das Netzwerk sein. Stattdessen muss man tatsächlich Ether senden, was a) etwas Ether zum Senden und b) eine Transaktionsgebühr (oder alternativ Mining-Power, um die Transaktion selbst durchzuführen) erfordert.