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