이름 그대로 대비책 함수
특징
1. 먼저 무기명 함수, 이름이 없는 함수
2. external 필수
왜 쓰는가 ?
1. 스마트 컨트랙이 이더를 받을 수 있게 한다.
2. 이더 받고 난 후 어떠한 행동을 취하게 할 수 있다.
3. call 함수로 없는 함수가 불려질때, 어떠한 행동을 취하게 할 수 있다.
UseCase
솔리디티 0.6 버전 이후 fallback은 recevie와 fallback 으로 두가지 형태로 나뉘게 되었다.
//SPDX-License-Identifier: MIT
pragma solidity >= 0.8.0 <0.9.0;
import "hardhat/console.sol";
contract FallbackAndReceive{
uint public data = 0;
constructor() {
data = 1;
}
function order() external payable {
data = 2;
}
// 사용자가 존재하지 않는 함수를 호출할때
// msg.data가 비어있지 않은 경우
fallback() payable external {
revert();
}
// receive는 순수하게 이더만 받을때 작동한다.
// msg.data가 비어있는 경우
receive() payable external {
revert();
}
}
receive: 순수하게 이더만 받을때 작동
fallback: 스마트 컨트렉트에 존재하지 않는 함수를 호출하거나 또는 이더를 보낼 때 fallback 함수가 디폴트로 실행된다. Solidity에서 하나의 컨트렉트는 하나의 fallback
함수를 가질 수 있다.