#4: Crowdfunding ContractFallback & Receive Functions

Fallback và Receive Function trong Solidity

Receive Function

receive là một hàm đặc biệt được giới thiệu trong Solidity 0.6.0, được sử dụng để nhận Ether khi một giao dịch không có dữ liệu được gửi đến hợp đồng.

Đặc Điểm

  • Không có tên hàm.
  • Không có tham số.
  • Không trả về giá trị.
  • Có thể có từ khóa payable.

Cú Pháp

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
 
contract Example {
    event Received(address, uint);
 
    // Hàm receive để nhận Ether
    receive() external payable {
        emit Received(msg.sender, msg.value);
    }
}

Fallback Function

fallback là một hàm đặc biệt được gọi khi một giao dịch không khớp với bất kỳ hàm nào khác trong hợp đồng hoặc khi không có hàm receive và giao dịch có dữ liệu.

Đặc Điểm

  • Không có tên hàm.
  • Không có tham số.
  • Không trả về giá trị.
  • Có thể có từ khóa payable nếu bạn muốn nó có thể nhận Ether.

Cú Pháp

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
 
contract Example {
    event FallbackCalled(address, uint);
 
    // Hàm fallback để xử lý các giao dịch không khớp
    fallback() external payable {
        emit FallbackCalled(msg.sender, msg.value);
    }
}

Sử Dụng Cả Hai

Bạn có thể sử dụng cả receivefallback trong cùng một hợp đồng để xử lý các trường hợp khác nhau:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
 
contract Example {
    event Received(address, uint);
    event FallbackCalled(address, uint);
 
    // Hàm receive để nhận Ether khi không có dữ liệu
    receive() external payable {
        emit Received(msg.sender, msg.value);
    }
 
    // Hàm fallback để xử lý các giao dịch không khớp
    fallback() external payable {
        emit FallbackCalled(msg.sender, msg.value);
    }
}

Kết Luận

  • Receive Function: Được sử dụng để nhận Ether khi giao dịch không có dữ liệu.
  • Fallback Function: Được sử dụng khi giao dịch không khớp với bất kỳ hàm nào khác hoặc khi không có hàm receive và giao dịch có dữ liệu.

Sử dụng receivefallback giúp bạn kiểm soát cách hợp đồng của bạn xử lý các giao dịch Ether không khớp hoặc không có dữ liệu, đảm bảo rằng hợp đồng của bạn hoạt động đúng như mong đợi trong mọi tình huống.