yamaの気ままに
yamaの気ままに

【Hardhat】Solidity + TypeScriptの環境構築 編

※ 画像・動画等のコンテンツが上手く生成されないことがあります。その際はお手数ですが、ページの更新を複数回お願いします。

目次
  1. 実行環境
  2. VScode拡張機能の用意
  3. solidity
  4. インストール各種
  5. Hardhat (TypeScript,hardhat-toolbox含む)
  6. バージョンの確認
  7. コンパイル確認
  8. 【エラー】Solidityのバージョンに対応するコンパイラーがない?
  9. エラーの対処
  10. テストの確認

実行環境

Shell

$ node --version v18.18.2 $ npm --version 9.8.1 PC: macOS 13.5.1 editor: VScode Directory:任意の新しいディレクトリ

VScode拡張機能の用意

solidity

solidityのコードをいい感じに読みやすくしてくれるやつ

Shell

ID: JuanBlanco.solidity 説明: Ethereum Solidity Language for Visual Studio Code バージョン: 0.0.172 パブリッシャー: Juan Blanco

インストール各種

Hardhat (TypeScript,hardhat-toolbox含む)

Hardhatは、Ethereumネットワーク上でスマートコントラクトを開発、テスト、デプロイするためのフレームワークやツールセットを提供してくれるツールボックス。

Shell

$ npm install --save-dev hardhat $ npx hardhat ✔ What do you want to do? · Create a TypeScript project ✔ Hardhat project root: · /Users/yama/dev/dex/HelloSolidity # 任意 ✔ Do you want to add a .gitignore? (Y/n) · y # 任意 ✖ Help us improve Hardhat with anonymous crash reports & basic usage data? (Y/n) · y # 推奨 ✔ Do you want to install this sample project's dependencies with npm (@nomicfoundation/hardhat-toolbox)? (Y/n) · y # テストとかテンプレとか用意してくれる↑

バージョンの確認

TypeScript

// ./hardhat.config.ts import { HardhatUserConfig } from "hardhat/config"; import "@nomicfoundation/hardhat-toolbox"; const config: HardhatUserConfig = { solidity: "0.8.24", // これ }; export default config; // ./package.json "@nomicfoundation/hardhat-toolbox": "^4.0.0", "hardhat": "^2.20.1"

コンパイル確認

【エラー】Solidityのバージョンに対応するコンパイラーがない?

いざ./conract/Lock.sol とか開いてみると、、

どうやら、このファイルのSolidityのバージョン(0.8.24)をコンパイルするには、今のコンパイラーバージョンだと厳しく劣っているとのこと。

ちなみに、soldityのコンパイルにはsolcと呼ばれるコンパイラが必要だが、それはhardhatをインストールしたタイミングで一緒に追加されている。

とりま一旦コンパイルしてみることに。

Shell

$ npx hardhat compile ✖ Help us improve Hardhat with anonymous crash reports & basic usage data? (Y/n) · y

なんか0.8.24が新たにダウンロードされた!?

VScodeをcmd + shift + pで開発者:ウィンドウの再読み込み して確認すると まだ同じエラー出てる。。

ちなみにコンパイル自体は成功している模様。。Successfully generated 6 typings!

エラーの対処

鬱陶しいのでエラー消したい。。

hardhat.config.ts にて、利用するsolidityのversionを修正できるので、現行の最大にしとく 。

TypeScript

// hardhat.config.ts const config: HardhatUserConfig = { solidity: '0.8.9', }; // contract/Lock.sol // SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.9;

Shell

$ npx hardhat compile Downloading compiler 0.8.9 Generating typings for: 1 artifacts in dir: typechain-types for target: ethers-v6 Successfully generated 6 typings! Compiled 1 Solidity file successfully (evm target: london).

これでエラーは消え、コンパイルも無事に通った。

テストの確認

./testにあるLock.solをテストしてみる。

Shell

$ npx hardhat test Lock Deployment ✔ Should set the right unlockTime (1870ms) ✔ Should set the right owner ✔ Should receive and store the funds to lock ✔ Should fail if the unlockTime is not in the future (65ms) Withdrawals Validations ✔ Should revert with the right error if called too soon ✔ Should revert with the right error if called from another account ✔ Shouldn't fail if the unlockTime has arrived and the owner calls it Events ✔ Should emit an event on withdrawals Transfers ✔ Should transfer the funds to the owner 9 passing (2s)

通った。