25일 - 폴백 및 함수 수신

특사-VC / 30일의 견고함


스마트 계약 개발을 배우기 위한 30일간의 Solidity 단계별 가이드.




Solidity Series의 25 중 Day30입니다.
오늘 저는 Fallback에 대해 배웠고 Solidity에서 함수를 받습니다.

다른 함수가 함수 식별자와 일치하지 않거나 함수 호출과 함께 제공된 데이터가 없는 경우 견고성 폴백 함수가 실행됩니다. 하나의 이름 없는 기능만 계약에 할당할 수 있으며 계약이 데이터 없이 일반 Ether를 받을 때마다 실행됩니다. 이더를 받아 계약의 총 잔액에 추가하려면 폴백 기능을 지불 가능으로 표시해야 합니다. 그러한 기능이 없으면 컨트랙트는 정상적인 트랜잭션을 통해 Ether를 받을 수 없으며 예외를 발생시킵니다.

폴백 함수의 속성:
  • 이름이나 인수가 없습니다.
  • 지불 가능으로 표시되지 않은 경우 데이터 없이 일반 에테르를 받는 경우 계약에서 예외가 발생합니다.
  • 아무 것도 반환할 수 없습니다.
  • 계약당 한 번 정의할 수 있습니다.
  • 호출자가 사용할 수 없는 함수를 호출하려는 경우에도 실행됩니다
  • .
  • 외부로 표시해야 합니다.
  • 다른 함수에서 호출할 때 2300 가스로 제한됩니다. 이 함수 호출을 가능한 한 저렴하게 만들기 위한 것입니다.

  • // SPDX-License-Identifier: MIT
    pragma solidity ^0.8.7;
    
    contract Receiver{
        mapping(address => uint) public addressToAmount;
    
        receive() external payable {
            addressToAmount[msg.sender] += msg.value;
        }
    }
    
    contract Sender {
        uint amount = 1 ether;
        address payable _receiver = payable(0xcD6a42782d230D7c13A74ddec5dD140e55499Df9);
        function sendEther() public payable {
            _receiver.transfer(amount);
        }
    }
    


    폴백()

    이 기능은 일반 Ether 전송을 제외하고 이 계약으로 전송되는 모든 메시지에 대해 호출됩니다(수신 기능 외에 다른 기능은 없음). 이 계약에 대한 비어 있지 않은 호출 데이터가 있는 모든 호출이 실행됩니다.

    받다()

    이 함수는 일반 Ether 전송, 즉 빈 calldata가 있는 모든 호출에 대해 호출됩니다.

    좋은 웹페이지 즐겨찾기