テック開発者ブログテコテック開発者ブログ読者になるテコテック開発者ブログ2022-12-01Hardhatで始めるDapps開発2どうも、次世代デジタル基盤開発事業部の土田です。去年もトップバッターでした。一年って早いものですね。今回はいつまで経っても終わっていなかったCryptoZombieを終わらせようと思います。タスクの年末大掃除です!CryptoZombieは下記です。cryptozombies.ioこれまでのシリーズは下記の通りです。テック開発者ブログタイトルの通り、前回セットアップしたHardhatを使っていきます。はじめに基本的に各チャプター通りに進めてみましたが、難しいポイントはあまりなかったと思います。(何故か翻訳が一部韓国語になっていたり、ヒントが見れなかったりとサイトに問題はありましたが・・・。)前回からSolidityのバージョンを0.8.9にして進めていたので、0.8.9を使って進めた際にコンパイルエラーになったり、分かりづらく感じたりしたポイントを重点的に記録していこうと思います。ゾンビが人を襲うChapter2では、クリプトキティのアドレスやコードを使用する箇所があります。cryptozombies.ioCryptoZombie側でgetKitty関数を用意してくれているものの、ローカル環境で開発したかったので、下記のように自前でKittyCore.solとして用意しました。genesが取れれば以降のチャプターは問題なく進めることができるはずです。solidity(2018)エラーの通り、viewを指定する必要があります。abstract.solidity(3656)abstractで対応しましたが、interfaceでも構いません。given.solidity(6651)下記でも発生していましたが、メッセージが若干変わっていますかね?今回はmemoryを指定します。以降、このエラーについては割愛します。encoding.solidity(7556)下記でも発生していましたが、keccak256を使用する際にbytesを明示的に指定する必要があります。以降、このエラーについても割愛します。it.solidity(5796)こちらはサンプルで提供されているownable.solの修正になります。今回はコンストラクタにすることで対応しました。"emit".solidity(3132)下記でも発生していましたが、emitを明示的に指定します。以降、このエラーについても割愛します。instead.solidity(7359)解決方法がそのまま記載してありますが、nowが使えなくなったようです。given.solidity(6651)戻り値のほうにも指定する必要があります。member.solidity(3125)上記に対応すると下記も出てきます。"address".solidity(9862)対応方法までしっかり書いてあって親切ですね!それぞれ対応します。encoding.solidity(4323)abi.encodePackedで対応します。function.solidity(1469)こちらは5-4で解決します。uint256.solidity(9582)下記の通り、使用するsolファイル毎にそれぞれusingが必要です。こちらは公式回答に無かったり、サンプルコードにいつのまにか記述されていたりと分かりづらく感じたのでご紹介しておきます。uint16;おわり私が躓いたり分かりづらいと感じたことはこれくらいでした。都度動作確認しながら進めていたので、基本的にはこれらの対応で問題なくChapter5まで終えることができるはずです。CryptoZombieにはまだまだチャプターがありますが、これでSolidity言語での開発は一通り終わりましたので、今回はここまでとします!来年はなにか簡単なDappsを作ってみて、公開までしてみたいなと思います。ありがとうございました。