Warum ruft eine leere Nachricht immer noch den Code des Vertrags auf?

Eine leere Nachricht ruft immer noch den Code des Vertrags auf und ist der Mechanismus, der es Solidity ermöglicht, eine Funktion einer Fallback-Funktion pro Vertrag zu implementieren.

Aber wenn msg.dataleer ist, warum muss der Vertragscode trotzdem ausgeführt werden?

Wenn ein Aufrufer msg.dataleer bleibt, d. h. er möchte keine Daten übergeben oder überhaupt keine Funktionen für einen Vertrag aufrufen, warum muss der Vertragscode trotzdem ausgeführt werden?

Antworten (2)

Um das Kernprotokoll von Ethereum einfach und generisch zu halten , hat das Protokoll die Regel, dass eine Nachricht immer den Code eines Kontos ausführt. Einfach und generisch ermöglicht es, dass das kritische Konsensprotokoll kleiner ist und das Risiko von Konsensfehlern verringert.

Das bedeutet, dass ein Detail wie der Ethereum-Vertrag ABI nicht im Ethereum-Kernprotokoll definiert werden muss. Die ABI ist eine Abstraktion und Verbesserungen oder Alternativen zur ABI haben keine Auswirkung auf das Ethereum-Protokoll oder die Ethereum Virtual Machine, EVM. Ohne die Regel, dass "Kontocode immer ausgeführt wird", müsste das Protokoll selbst dann definieren, was den Kontocode oder Teile des Kontocodes zur Ausführung auslöst: Das Protokoll würde das Gegenteil von einfach und generisch werden.

Code wird als Antwort auf eine Transaktion ausgeführt. Dies geschieht immer, wenn Code im Konto vorhanden ist. Dass msg.data leer ist, bedeutet nicht, dass kein Code aufgerufen werden sollte, es gibt keine solche "Regel", es bedeutet nur, dass es keine Eingabe gibt.