Was ist eine Fallback-Funktion bei der Verwendung von address.send(...)?

Dieser Code steht in meinem Vertrag:

 contract A {
      address x = 0x1234...;
      x.send(10);
 }

Wie würde die Fallback-Funktion im Vertrag bei Adresse 0x1234... aussehen?

 contract B {
     ...
 }

Ich kann keine Informationen zu diesen Fallback-Funktionen finden, außer hier :

Geben Sie hier die Bildbeschreibung ein

Antworten (1)

Yay, habe es in Solidity -Dokumenten im FAQ-Bereich gefunden:

Was hat es mit function () { ... }Solidity-Verträgen auf sich? Wie kann eine Funktion keinen Namen haben?

Diese Funktion wird als „Fallback-Funktion“ bezeichnet und aufgerufen, wenn jemand gerade Ether an den Vertrag gesendet hat, ohne Daten anzugeben, oder wenn jemand die Typen durcheinandergebracht hat, sodass er versucht hat, eine Funktion aufzurufen, die nicht existiert.

Das Standardverhalten (wenn keine Fallback-Funktion explizit angegeben ist) in diesen Situationen besteht darin, eine Ausnahme auszulösen.

Wenn der Vertrag Ether mit einfachen Überweisungen erhalten soll, sollten Sie die Fallback-Funktion wie folgt implementieren:

function() payable { }

Eine weitere Verwendung der Fallback-Funktion besteht darin, z. B. zu registrieren, dass Ihr Vertrag Ether erhalten hat, indem Sie ein Ereignis verwenden.

Achtung: Wenn Sie die Fallback-Funktion einsetzen, achten Sie darauf, dass sie so wenig Gas wie möglich verbraucht, da send()nur eine begrenzte Menge geliefert wird.

Eventuell auch brauchbar:

Ist es möglich, Argumente an die Fallback-Funktion zu übergeben?

Die Fallback-Funktion kann keine Parameter übernehmen.

Unter besonderen Umständen können Sie Daten senden. Wenn Sie darauf achten, dass keine der anderen Funktionen aufgerufen wird, können Sie auf die Daten zugreifen, indem Sie msg.data.

Weitere Informationen hier auf Github:

Fallback-Funktionen werden ausgelöst, wenn die Funktionssignatur mit keiner der verfügbaren Funktionen in einem Solidity-Vertrag übereinstimmt. Wenn Sie dies beispielsweise tun , versucht der EVM, " " unter dieser Adresse address.call(bytes4(bytes32(sha3("thisShouldBeAFunction(uint,bytes32)"))), 1, "test")anzurufen . thisShouldBeAFunctionWenn es nicht vorhanden ist, wird die Fallback-Funktion ausgelöst.

send()gibt eine leere Funktionssignatur an und löst daher immer die Fallback-Funktion aus, falls vorhanden.

Notwendige Fallback-Funktionen payablewaren eine Breaking Change, die mit Solidity Version 0.4.0 eingeführt wurde .