【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)消費の最適化と管理について詳しく解説します。