[Solidity] receive & fallback

냐옹·2023년 8월 9일
0

Solidity

목록 보기
11/13
post-thumbnail

receive, fallback

일단 이 두 개는 매우 중요한 역할을 합니다. 디파이 만들때 거의 필수로 알아야하는 것 같습니다.

이 두 함수는 컨트랙트가 이더리움을 직접 받거나, 일치하는 함수 서명이 없을때 호출되는 기능을 제공합니다.

receive 함수

  • receive함수는 솔리디티 0.6.0버전부터 도입되었습니다.

  • 컨트랙트가 이더리움을 직접 받을 때 (그러니까 데이터 없이 순수하게 이더 전송시에) 자동으로 호출됩니다.

  • receive 함수는 반드시 external payable로 선언되어야 합니다.

  • 컨트랙트 내에서 receive함수는 오직 하나만 존재할 수 있습니다.

  • 별도의 로직없이 이더리움을 받기위한 목적으로 주로 사용됩니다.

pragma solidity ^0.8.10;

contract MyContract{
	receive() external payable{
    	// 이더리움을 직접 받았을 때 실행할 코드
    }
}

fallback 함수

  • 이더리움 네트워크 초창기부터 존재하는 함수입니다.

  • 컨트랙트에 일치하는 함수 서명이 없을 때 호출됩니다. 즉, 호출하려는 함수가 컨트랙트에 없거나 잘못된 경우 fallback함수가 실행됩니다.

  • 또한, receive 함수가 정의되어 있지 않은 경우, 순수한 이더 전송에도 fallback함수가 호출됩니다.

  • fallback함수는 external payable로 선언되어야 합니다.

  • 마찬가지로 fallback함수도 오직 하나만 존재할 수 있습니다.

pragma solidity ^0.8.0;

contract MyContract {
    fallback() external payable {
        // 일치하는 함수 서명이 없거나 이더리움을 받았을 때 실행될 코드
    }
}

주의 사항

  • receivefallback 함수 모두 컨트랙트 내에서 단 하나만 존재할 수 있습니다.

  • 두 함수 모두 가스 소비량에 주의해야 합니다. 만약에 호출하는 동안 가스 한도를 초과하면 트랜잭션이 실패하게 됩니다.

  • 이 두함수는 주로 이더리움을 받거나, 예기치 않은 호출을 처리하는데에 사용되므로, 보안에 특히 주의해야합니다.

  • 두 함수를 올바르게 사용한다면, 스마트 컨트랙트가 예기치 않은 상황이나 이더리움 전송을 안전하게 처리할 수 있습니다.

1개의 댓글

comment-user-thumbnail
2023년 8월 9일

좋은 글이네요. 공유해주셔서 감사합니다.

답글 달기