fallback
fallback 함수에 대해서 알아보겠습니다.
솔리디티 0.6 이전 버전에서는 무기명 함수로 사용되었던 fallback은
0.6 이후부터 fallback과 receive로 사용 가능하게 되었습니다.
fallback 함수는 무기명 함수로서 다음과 같은 경우에 사용할 수 있습니다.
1. 다른 컨트랙트로부터 이더를 받는다.
2. 이더를 받고 난 후 어떠한 행동을 취할 수 있다.
fallback 함수와 다른 함수와의 차이점은 fallback 함수는 컨트랙트당 1개밖에 가질 수 없습니다.
contract Example {
//0.6 이전
function() external payable {
}
//0.6 이후
fallback() external payable {
}
receive() external payable {
}
}
payable
payable을 컨트랙트에서 이더를 전송할 수 있게 하기 위한 modifier입니다.
솔리디티에서 기본적으로 모든 function은 이더 전송 함수를 모두 reject 시키기 때문에 전송 관련한 함수를 만들려고 한다면 무조건 payable을 선언해주어야 합니다.
이더 전송
이더를 전송하는 메소드는 3가지가 존재합니다.
1. address.send()
2. address.transfer()
3. address.call{value: amount}();
send | transfer | call | |
gas fee | 2300 | 2300 | 유동/ 설정 가능 |
error | bool 값 반환 | 에러 발생 | bool 값 반환 |
send와 transfer는 가스비가 2300으로 제한되어 있으며 call은 가스비 제한 설정이 가능합니다.
하지만 send, transfer는 가스비가 고정되어 있기 때문에 권장되지 않습니다. (가스비는 수시로 변동되기 때문에) 솔리디티에서는 call을 사용해서 이더를 전송하는 것을 권장합니다.
'블록체인 > 이더리움' 카테고리의 다른 글
[SpeedRunEthereum] Challenge 1[Decentralized Staking App] (0) | 2022.05.15 |
---|---|
[SpeedRunEthereum] Challenge 0[Simple NFT Example] (0) | 2022.05.13 |
[Solidity] Scaffold-Eth 설치하기 (0) | 2022.05.11 |
[Hardhat] 컴파일 및 테스트하기 (0) | 2022.05.07 |
[Solidity] 솔리디티 문법 요약 정리 (0) | 2022.05.05 |