【CryptZombies】レッスン2チャプター11:Interfaceを使用する
Interfaceの使用
チャプター10の例をNumberInterfaceを使って、interfaceを次のように定義します。
contract NumberInterface {
function getNum(address _myAddress) public view returns (uint);
}
これをコントラクト内で使用します。
contract MyContract {
address NumberInterfaceAddress = 0xab38...;
// ここは、イーサリアム上のFavoriteNumberコントラクトのアドレスが入る。
NumberInterface numberContract = NumberInterface(NumberInterfaceAddress);
// `numberContract`という名前のNumberInterfaceは他のコントラクトを指し示すものになっているぞ 。(NumberInterfaceAddressを使って初期化)
function someFunction() public {
// コントラクトから`getNum`を呼び出せるぞ:
uint num = numberContract.getNum(msg.sender);
// ...よし、`num`を操作するぞ。
}
}
こうすれば、イーサリアムブロックチェーン上でほかのコントラクトとやりとりできます。(ただし、関数がpublicやexternalである場合に限る。)
テストの実行
①君のコード中にクリプトキティーズのコントラクトのアドレスを保存しておいた。ckAddressという名前の変数に格納されている。次の行では、kittyContractという名前のKittyInterfaceを作成し、ckAddressを使用して初期化せよ。やり方はnumberContractで実施したのと同じ方法をとればよい。
赤線のとおり、クリプトキティーズのコントラクトアドレスが、ckAddressという名前ですでに格納されています。
次に、青線を見ていきます。
Interfaceの初期化については、オレンジ線のとおり、例題のnumberContractを参考にしてみます。
NumberInterface numberContract = NumberInterface(NumberInterfaceAddress);
// `numberContract`は他のコントラクトを指し示すものになっているぞ
上の例を参考に、kittyContractという名前のKittyInterfaceを作成し、初期化します。
お疲れさまでした!
<参考>
CryptoZombies - イーサリアム上でゲームを開発する方法を学習。Powered by Loom Network