コントラクトに対してEtherを送金することができます。
また、送金されたコントラクトは、受け取ったEtherを別のアドレス(例えばコントラクトを作成した人のアドレス)に送金することもできます。
送金を受け取る関数がPayable、送金するのがWithdraw関数になります。
それぞれの例は以下の通りです。
contract ManagementEther {
address public owner;
// コンストラクタ
function ManagementEther() public {
owner = msg.sender;
}
// payable修飾子を付けることでetherを受け取れるようになる
function receiveEther() external payable {
// 送金されたetherの値は`msg.value`で取得可能
// 何かしらの処理を行う
}
// withdraw関数
function withdraw() external onlyOwner {
// オーナーのみ実行可能
require(msg.sender == owner);
// コントラクトのオーナーのアドレスにこのコントラクトのetherの残高を送金する
owner.transfer(this.balance);
}
}
この例ではreceiveEtherがpayable関数になります。
関数にpayable修飾子を付けます。
送金されたetherはmsg.valueで取得することができます。
withdraw関数はそのままwithdrawという名称の関数を作成します。
ここではこのコントラクトを作成したオーナーのみ実行可能にしています。
this.balanceでこのコントラクトに蓄積されているetherの残高を取得できます。
ここでは、オーナーのアドレスに全残高を送金しています。
このようにSolidityでは簡単にetherの受け取り、送金の関数を実装することができます。