【Solidity】第5章第1回:コントラクトのインターフェース(interface)の基本

本記事では、Solidityにおけるインターフェース(interface)の基本的な定義と使用方法を解説します。インターフェースを利用することで、スマートコントラクト間の相互作用を簡潔に記述でき、コードの再利用性が向上します。
0. 記事の概要
この記事を読むメリット
- インターフェースの基礎理解:インターフェースの役割と使い方を学べます。
- コントラクト間の連携スキル向上:複数のコントラクトを効率的に連携させる方法を習得します。
- コードの再利用性向上:インターフェースを活用して、より保守性の高いコントラクトを設計できます。
この記事で学べること
- インターフェースの基本構文
- インターフェースを使ったコントラクト間通信の実例
- インターフェースの活用時の注意点
1. インターフェース(interface)とは?

1.1 インターフェースの概要
インターフェースとは、コントラクト間の通信を簡略化するための抽象的な構造です。インターフェースを使うことで、他のコントラクトが提供する関数を呼び出す際に、その内部の詳細を意識せずに操作できます。
1.2 インターフェースの基本構文
// インターフェースの基本例
interface IToken {
function transfer(address to, uint256 amount) external;
function balanceOf(address account) external view returns (uint256);
}
動作解説
このコードでは、IToken
というインターフェースを定義し、transfer
関数とbalanceOf
関数を外部から呼び出せるようにしています。
2. インターフェースを使ったコントラクト間通信

2.1 他のコントラクトを呼び出す
// 他のコントラクトを呼び出す例
contract TokenInteraction {
address public tokenAddress;
constructor(address _tokenAddress) {
tokenAddress = _tokenAddress;
}
function checkBalance(address account) public view returns (uint256) {
return IToken(tokenAddress).balanceOf(account);
}
function sendTokens(address to, uint256 amount) public {
IToken(tokenAddress).transfer(to, amount);
}
}
動作解説
このコードでは、IToken
インターフェースを使用して、指定したトークンコントラクトの関数を呼び出しています。
3. インターフェースの活用例
3.1 データ取得用コントラクト
// データ取得用インターフェースの例
interface IDataContract {
function getData(uint256 id) external view returns (string memory);
}
contract DataRetriever {
address public dataContractAddress;
constructor(address _dataContractAddress) {
dataContractAddress = _dataContractAddress;
}
function fetchData(uint256 id) public view returns (string memory) {
return IDataContract(dataContractAddress).getData(id);
}
}
動作解説
このコードでは、IDataContract
インターフェースを使用して、外部のデータ取得コントラクトから情報を取得しています。
4. よくあるエラーとその解決策
4.1 インターフェースとアドレスの一致
インターフェースを使用する際に、指定するアドレスが正しいコントラクトを指していないと、エラーが発生します。デプロイ後にアドレスを確認することが重要です。
4.2 未定義関数の呼び出し
インターフェースに定義されていない関数を呼び出すとエラーになります。呼び出したい関数がインターフェースに含まれていることを確認してください。
5. 練習問題

以下の課題に挑戦してみましょう:
- ERC20トークンの送金と残高確認を行うスマートコントラクトを作成してください。
- 他のコントラクトからデータを取得するためのインターフェースを作成してください。
6. まとめ
本記事では、Solidityのインターフェースの基本的な使い方とその活用例について学びました。インターフェースを活用することで、コントラクト間の通信を効率化し、コードの再利用性を高めることができます。