일단 이 두 개는 매우 중요한 역할을 합니다. 디파이 만들때 거의 필수로 알아야하는 것 같습니다.
이 두 함수는 컨트랙트가 이더리움을 직접 받거나, 일치하는 함수 서명이 없을때 호출되는 기능을 제공합니다.
receive
함수는 솔리디티 0.6.0버전부터 도입되었습니다.
컨트랙트가 이더리움을 직접 받을 때 (그러니까 데이터 없이 순수하게 이더 전송시에) 자동으로 호출됩니다.
receive 함수는 반드시 external payable
로 선언되어야 합니다.
컨트랙트 내에서 receive
함수는 오직 하나만 존재할 수 있습니다.
별도의 로직없이 이더리움을 받기위한 목적으로 주로 사용됩니다.
pragma solidity ^0.8.10;
contract MyContract{
receive() external payable{
// 이더리움을 직접 받았을 때 실행할 코드
}
}
이더리움 네트워크 초창기부터 존재하는 함수입니다.
컨트랙트에 일치하는 함수 서명이 없을 때 호출됩니다. 즉, 호출하려는 함수가 컨트랙트에 없거나 잘못된 경우 fallback
함수가 실행됩니다.
또한, receive
함수가 정의되어 있지 않은 경우, 순수한 이더 전송에도 fallback
함수가 호출됩니다.
fallback
함수는 external payable
로 선언되어야 합니다.
마찬가지로 fallback
함수도 오직 하나만 존재할 수 있습니다.
pragma solidity ^0.8.0;
contract MyContract {
fallback() external payable {
// 일치하는 함수 서명이 없거나 이더리움을 받았을 때 실행될 코드
}
}
receive
와 fallback
함수 모두 컨트랙트 내에서 단 하나만 존재할 수 있습니다.
두 함수 모두 가스 소비량에 주의해야 합니다. 만약에 호출하는 동안 가스 한도를 초과하면 트랜잭션이 실패하게 됩니다.
이 두함수는 주로 이더리움을 받거나, 예기치 않은 호출을 처리하는데에 사용되므로, 보안에 특히 주의해야합니다.
두 함수를 올바르게 사용한다면, 스마트 컨트랙트가 예기치 않은 상황이나 이더리움 전송을 안전하게 처리할 수 있습니다.
좋은 글이네요. 공유해주셔서 감사합니다.