LoginSignup
9
6

More than 3 years have passed since last update.

【Solidity】Payable関数とWithdraw関数

Posted at

コントラクトに対して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の受け取り、送金の関数を実装することができます。

9
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
6