Solidità - Funzione di fallback
La funzione di fallback è una funzione speciale disponibile per un contratto. Ha le seguenti caratteristiche:
Viene chiamato quando una funzione inesistente viene richiamata sul contratto.
È necessario essere contrassegnati come esterni.
Non ha nome.
Non ha argomenti
Non può restituire nulla.
Può essere definito uno per contratto.
Se non contrassegnato come pagabile, genererà un'eccezione se il contratto riceve un semplice ether senza dati.
L'esempio seguente mostra il concetto di una funzione di fallback per contratto.
Esempio
pragma solidity ^0.5.0;
contract Test {
uint public x ;
function() external { x = 1; }
}
contract Sink {
function() external payable { }
}
contract Caller {
function callTest(Test test) public returns (bool) {
(bool success,) = address(test).call(abi.encodeWithSignature("nonExistingFunction()"));
require(success);
// test.x is now 1
address payable testPayable = address(uint160(address(test)));
// Sending ether to Test contract,
// the transfer will fail, i.e. this returns false here.
return (testPayable.send(2 ether));
}
function callSink(Sink sink) public returns (bool) {
address payable sinkPayable = address(sink);
return (sinkPayable.send(2 ether));
}
}