【Solidity】Ether(ETH)を受け取るには?

SolidityでEther(ETH)を受け取る方法について解説します。

構文

SolidityでEther(ETH)を受け取るには、receive関数またはfallback関数を使用します。

また、Etherを受金可能にするための関数修飾子“payable”も付与する必要があります。

それぞれ解説します。

receive関数

receive関数は、msg.dataが空の場合に呼ばれます。

1つのコントラクトにつき、1つのreceive関数を持つことができます。

receive() アクセス修飾子 payable {
    処理
}

fallback関数

fallback関数は、msg.dataに値がある場合、またはreceive関数を含めマッチする関数が無い場合に呼ばれます。

receive関数と同様、1つのコントラクトにつき、1つのfallback関数を持つことができます。

fallback() アクセス修飾子 payable {
    処理
}

サンプルコード

// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.7.0 <0.9.0;

contract Test {

    receive() external payable {
        require(msg.value > 0, "Send some ETH to receive.");
    }
    
    fallback() external payable {
        require(msg.data.length == 0, "Do not call this contract with data");
        require(msg.value > 0, "Send some ETH to receive.");
    }

    function getMyBalance() public view returns(uint) {
        return address(this).balance;
    }

}

サンプルコードはあくまで最小限の受金処理です。実際には、セキュリティや不正操作対策などの兼ね合いもあり、様々な中間処理を挟む必要があります。

タイトルとURLをコピーしました