Vyper

【Vyper】第4章第2回:VyperでのEtherの送受信方法

本記事では、Vyperを使用してEther(ETH)の送受信を行う方法について解説します。スマートコントラクト内でのEtherの管理方法を理解し、安全な取引を実装できるようになりましょう。

0. 記事の概要

この記事を読むメリット

  • VyperでのEtherの送受信方法を理解できる
  • スマートコントラクトの資金管理の基礎を学べる
  • 安全な送金処理を実装できる

1. Etherの送受信とは?

Ethereumでは、スマートコントラクトを介してEtherを送受信できます。Vyperでは、payable関数を使用してEtherの送受信を処理します。

1.1 payable関数とは?

payable関数は、スマートコントラクトがEtherを受け取れるようにする特別な関数です。これがないと、コントラクトにEtherを送信できません。


        @public
        @payable
        def deposit():
            pass  # 受け取るだけの関数
        

動作解説

  • @payable – Etherを受け取れるようにする修飾子
  • pass – 何も処理をしないが、受け取りは可能

1.2 受け取ったEtherの管理

コントラクト内で受け取ったEtherの総額を管理するには、self.balanceを使用します。


        @public
        @payable
        def deposit():
            self.balance += msg.value
        

動作解説

  • msg.value – 送信されたEtherの金額
  • self.balance – コントラクト内の残高を管理

2. Etherの送信

Vyperでは、send関数を使用してEtherを送信できます。

2.1 基本的なEtherの送信


        @public
        def withdraw(amount: uint256, recipient: address):
            assert self.balance >= amount, "残高不足"
            send(recipient, amount)
        

動作解説

  • assert self.balance >= amount – 送金前に残高チェック
  • send(recipient, amount) – 指定のアドレスに送金

2.2 セキュアな送金処理


        @public
        def safe_withdraw(amount: uint256, recipient: address):
            assert self.balance >= amount, "残高不足"
            success: bool = send(recipient, amount)
            assert success, "送金に失敗しました"
        

動作解説

  • success: bool = send(…) – 送金の成否を変数に格納
  • assert success – 送金が成功したか確認

3. 練習問題

3.1 練習問題

以下の課題に挑戦してください。

  • 送金履歴を記録するイベントを実装する
  • 送金可能な最小金額を設定する機能を追加する

4. まとめ

本記事では、Vyperを使用したEtherの送受信方法について解説しました。次回は、ガス(Gas)消費の最適化と管理について詳しく解説します。