【Vyper】第4章第4回:外部コントラクトとの連携:インターフェースの使用方法

本記事では、Vyperを用いて外部コントラクトと連携する方法について解説します。インターフェースを活用することで、既存のスマートコントラクトとの相互作用が可能になります。
0. 記事の概要
この記事を読むメリット
- 外部コントラクトとの連携方法を理解できる
- インターフェースの作成方法を学べる
- 実際に外部コントラクトを呼び出すスキルを習得できる
1. 外部コントラクトとの連携とは?
Ethereumでは、あるスマートコントラクトが別のスマートコントラクトを呼び出すことが可能です。これにより、異なるコントラクト間でのデータのやり取りや、機能の共有が実現します。
1.1 外部コントラクトを呼び出す仕組み

- インターフェースの定義: 呼び出したいコントラクトの関数を宣言する
- アドレスを指定: コントラクトのアドレスを指定して呼び出す
- 関数の実行: 外部コントラクトの関数を実行する
1.2 インターフェースを使う理由
- セキュリティの向上: コントラクトの設計を分離し、安全性を確保
- コードの再利用: 既存のコントラクトを活用できる
- シンプルなコントラクト設計: 主要な機能を分割し、保守性を向上
2. インターフェースの定義と実装
Vyperでは、外部コントラクトと連携するためにインターフェースを定義します。これにより、外部コントラクトの関数を安全に呼び出せます。
2.1 基本的なインターフェースの定義
interface ERC20:
def transfer(_to: address, _value: uint256) -> bool: view
動作解説
- interface ERC20 – ERC20トークンのインターフェースを定義
- transfer(_to, _value) – トークンを送る関数を定義
2.2 外部コントラクトの関数を実行

@public
def send_tokens(token_address: address, recipient: address, amount: uint256) -> bool:
return ERC20(token_address).transfer(recipient, amount)
動作解説
- ERC20(token_address) – 指定したアドレスのコントラクトを参照
- transfer(recipient, amount) – トークンを送る関数を呼び出し
3. 練習問題
3.1 練習問題

以下の課題に挑戦してください。
- 異なるインターフェースを定義し、外部コントラクトを操作する
- 関数の戻り値を受け取り、処理を行うロジックを追加する
4. まとめ
本記事では、Vyperを使用して外部コントラクトと連携する方法を学びました。次回は、Vyperでのデプロイとテストの実践的な手順について解説します。