Solidityで外部コントラクトを呼び出す方法について解説します。
構文
外部コントラクトを呼び出しですが、以下の3つの流れになります。
- 呼び出し元のコントラクトでインターフェースを定義
- そのインターフェースを外部コントラクトのアドレスで初期化
- そのインターフェース(外部コントラクト)からメソッドを呼び出し
それぞれ構文を以下に記します。(※実際のサンプルコードを見た方が理解しやすいと思いますので、以降の「サンプルコード」の章に記載したコードをご覧になりつつお読み下さい)
呼び出し元のコントラクトでインターフェースを定義
コントラクト(contract文)の外にインターフェースを定義します。
インターフェースの中身ですが、外部コントラクトにある呼び出したい関数について、中身以外の定義部分だけを記述します。
interface インターフェース名 {
外部コントラクトにおける呼び出したい関数1(処理の記述は不要);
外部コントラクトにおける呼び出したい関数2(処理の記述は不要);
外部コントラクトにおける呼び出したい関数3(処理の記述は不要);
外部コントラクトにおける呼び出したい関数n(処理の記述は不要);
}
そのインターフェースを外部コントラクトのアドレスで初期化
前章で定義したインターフェースを、呼び出したい外部コントラクトのアドレスで初期化します。
定義したインターフェース名 変数名 = 定義したインターフェース名(外部コントラクトのアドレス);
そのインターフェース(外部コントラクト)からメソッドを呼び出し
前章で定義した変数(インターフェースオブジェクト)でメソッドを呼び出します。
定義した変数(インターフェースオブジェクト).外部コントラクトの関数名(インターフェースで定義した関数)
サンプルコード
外部コントラクトを呼び出すには“インターフェース(interface)”を定義する必要があることを覚えておきましょう。また、インターフェースを初期化する際の外部コントラクトアドレスは、今回は解説のためハードコードしているものの、後で変更可能なよう、設定処理を関数にして外に出しておくのがベターです。(外部コントラクトのアドレスが変更された際に対応できるようにするため)