Ist „Überweisung“ eine Transaktion oder ein Anruf/eine Nachricht?

Ich habe mich gefragt, ob die Funktion "transfer ()" ein Aufruf oder eine Transaktion ist.

Wir wissen, dass Verträge nur Nachrichten senden, keine Transaktionen.

Wenn ein DAO-ähnlicher Vertrag eine Variable und einen Schwellenwert hat, wenn die Variable den Schwellenwert erreicht, überweist der Vertrag automatisch etwas Ether auf ein Konto.

Frage : Ist diese Übertragung von Ether (mit transfer() durchgeführt) eine Nachricht oder Transaktion?

Generell würde ich gerne wissen, wie die Übertragung von Ether von einem Vertragskonto auf jemanden in Bezug auf eine Transaktion/Nachricht beschrieben wird.

Antworten (2)

Ethereum-Transaktionen sind auch Nachrichten. Der Unterschied besteht darin, dass Transaktionen signierte Nachrichten sind, da sie von einem Menschen mit einem privaten Schlüssel signiert wurden.

Ethereum-Verträge erstellen „unsignierte Nachrichten“ und Menschen erstellen „signierte Nachrichten“.

Wenn ein Vertrag .send()oder aufruft .transfer(), kann er eine gewisse Menge an Ether übertragen. Dies ist eine unsignierte Nachricht, wird aber auch als „interne Transaktion“ bezeichnet. Ein Beispiel:

https://etherscan.io/tx/0x3f50e8b755fdefceb2dad2854424211c3c1f8a8b085160c5be5c46d57c2ec183#internal

Bei dieser Transaktion ruft der menschliche Besitzer 0xc459...eine vertraglich vereinbarte Funktion auf, 0xe70b...indem er eine signierte Nachricht erstellt. Dann rief der Vertrag dazu .send()auf, eine unsignierte Nachricht zu erstellen, um etwas Ether an zu übertragen 0xc459....

Signierte Nachrichten werden physisch in der Blockchain auf den Festplatten der Ethereum-Knoten gespeichert. Unsignierte Nachrichten werden nicht unbedingt gespeichert, sie werden durch den Ausführungsablauf eines Vertragsfunktionsaufrufs impliziert.

Abschließend:

Signierte Nachrichten sind „Transaktionen“ und werden von Menschen erstellt

Unsignierte Nachrichten sind "interne Transaktionen" und werden von Verträgen mit einem Funktionsaufruf erstellt

Danke für die Antwort, aber es wirft eine andere Frage auf: Wenn in meinem Beispiel die internen Transaktionen nicht in der Blockchain enthalten sind, wie wird dann das Ether-Guthaben des Vertrags reduziert und das Ether-Guthaben des Empfängers erhöht?
@AdrianAd, Jeder Ethereum-Knoten, der der Blockchain von Anfang an folgt, folgt dem Ausführungsfluss jedes Vertragsfunktionsaufrufs. Sie werden alle zum gleichen Schluss kommen: dass eine interne Transaktion stattfinden muss, dass der Saldo des Vertrages reduziert und der Saldo des Empfängers erhöht werden muss. Nachdem die Salden aktualisiert wurden, müssen Sie sich nicht unbedingt merken, wie sie aktualisiert wurden.
Ja dank! Es wäre großartig, Ihre Antwort für andere, die sie lesen, irgendwo hinzuzufügen. Beifall!
Ich habe mich gefragt, ob die interne Transaktion den Zustand eines Vertrags ändern kann?
@Jesbus Wenn ein Vertrag Ether an einen anderen Vertrag (oder einen anderen Benutzer) sendet, was wäre das Datennutzlastfeld? Leer?

Ja, eine interne Transaktion (Message Call) kann definitiv einen Vertragszustand ändern. Sie können das Gaslimit auch angeben, indem Sie .gas() nach dem Funktionsnamen hinzufügen.