問題一覧に戻る
中級関数
問題58: Payable関数とアドレス
SolidityのPayable関数とアドレスを学習します - コントラクトがEtherを受信・送信できるようにします。'payable'でマークされた関数はmsg.value経由でETHを受信できます。address payable型はtransfer、send、callを使用してETHを送信できます。通常のアドレスは明示的にpayableに変換する必要があります。この区別により偶発的なETH転送を防ぎ、支払いフローを明示的にします。payableの理解はDeFiプロトコル、決済システム、ETHを扱うあらゆるコントラクトの構築に重要です。スマートコントラクトでのイーサリアムのネイティブ通貨統合の基礎です。
pragma solidity ^0.8.0;
contract PayableExample {
mapping(address => uint256) public balances;
// Ether受け取り可能
function deposit() public {
balances[msg.sender] += msg.value;
}
// アドレスへ送金
function withdraw() public {
uint256 amount = balances[msg.sender];
balances[msg.sender] = 0;
recipient = payable(msg.sender);
recipient.transfer(amount);
}
}