Skip to content
Solidity

Payable、receive & fallback(ETHフロー)

payable関数とreceive/fallbackフックでETHを受信。

#payable#receive#fallback#ether

Code

solidity
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;

contract EthVault {
    receive() external payable {
        // called on plain ETH transfer (no calldata)
    }

    fallback() external payable {
        // called when no function signature matches
    }

    function deposit() external payable {
        require(msg.value > 0, "send eth");
    }

    function withdraw(uint256 amount) external {
        payable(msg.sender).transfer(amount); // 2300 gas stub, reverts on failure
    }

    function withdrawCall(uint256 amount) external {
        (bool ok, ) = payable(msg.sender).call{value: amount}("");
        require(ok, "transfer failed");
    }

    function balance() external view returns (uint256) {
        return address(this).balance;
    }
}