Solidez - Função Fallback
A função de fallback é uma função especial disponível para um contrato. Possui os seguintes recursos -
É chamado quando uma função inexistente é chamada no contrato.
É necessário ser marcado como externo.
Não tem nome.
Não tem argumentos
Não pode devolver nada.
Pode ser definido um por contrato.
Se não estiver marcado como pagável, ele lançará uma exceção se o contrato receber o plain ether sem dados.
O exemplo a seguir mostra o conceito de uma função de fallback por contrato.
Exemplo
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));
}
}