Closed7

Hardhat環境構築

kobokobo

下準備

mkdir hardhat-sample
cd hardhat-sample
yarn init
yarn add --dev hardhat
yarn hardhat

Create a TypeScript project

kobokobo

デフォルトで作られているLock.solをVSCodeで開くと以下のようなエラーがでる

コード上は^0.8.9を用いているが、コンパイルしようとしているsolidityのバージョン(solcのバージョン)が0.7.3になってるぞ

というエラーっぽい

node_modules配下のsolcを見てみると確かに0.7.3になっている

検索してみると

Solidity: Change workspace compiler version (Remote)

をすると良いという話が結構出てくる

https://medium.com/michaels-dapp-dev-tips/how-to-change-the-solidity-compiler-in-vs-code-4c2660a856da

けど、うまくいかず

node_modules配下にあるのは、おそらくhardhat(もしくは別のライブラリ)の依存関係にあるsolcのバージョンが古いのではないかと思ったので、package.jsonで依存関係にあるsolcパッケージのバージョンを固定するように設定

json
{
 ...
  "resolutions": {
    "solc": "0.8.9"
  }
}
yarn install

でVSCodeを立ち上げ直したらうまくいった

kobokobo

コンパイル

yarn hardhat compile

Typechainを用いて型定義ファイルも出力してくれてる

感動

Truffleだと結構ここまでくるの大変だった

kobokobo

フォーマッター設定

solのフォーマット

VSCodeを使っているので、プラグインを入れておく

https://marketplace.visualstudio.com/items?itemName=NomicFoundation.hardhat-solidity

recommendationsにも追加

.vscode/extensions.json
{
  "recommendations": [
    "nomicfoundation.hardhat-solidity"
  ]
}

基本的には何もしなくても、prettierと連携して、solファイルのフォーマット系はやってくれるみたい

prettierの設定をカスタムしたい場合は.prettierrc.jsonを置いておけば良いっぽいので、一応置いておく

.prettierrc.json
{
  "overrides": [
    {
      "files": "*.sol",
      "options": {
        "printWidth": 80,
        "tabWidth": 4,
        "useTabs": false,
        "singleQuote": false,
        "bracketSpacing": false,
        "explicitTypes": "preserve"
      }
    }
  ]
}

オートフォーマット

保存時にフォーマッターが効くようにしたいので、設定

.vscode/settings.json
{
  "editor.formatOnSave": true
}

editorconfig

一番下に改行とか入れて欲しいので、editorconfigも追加

.editorconfig
# EditorConfig is awesome: https://EditorConfig.org
root = true

[*]
charset = utf-8
end_of_line = lf
indent_style = space
indent_size = 2
insert_final_newline = true
trim_trailing_whitespace = false

[*.sol]
indent_size = 4
kobokobo

テスト設定

どうやらHardhat for VSCodeとは別に、Mocha Test Explorerというextensionを入れると、テストがよりやりやすくなる模様

なので、recommendationsに追加

.vscode/extensions.json
{
  "recommendations": [
    "nomicfoundation.hardhat-solidity",
    "hbenl.vscode-mocha-test-adapter"
  ]
}

すごくいい感じになった

kobokobo

ESLint周りの設定

いざ開発してみようとすると、TypeScriptのLinter系がなかったので追加

ついでにテストコードで使うmochaのlinterも追加

yarn add -D @typescript-eslint/eslint-plugin @typescript-eslint/parser eslint eslint-config-prettier eslint-plugin-mocha prettier

eslintの設定

eslintrc.json
{
  "extends": ["eslint:recommended", "plugin:mocha/recommended", "prettier"],
  "parser": "@typescript-eslint/parser",
  "parserOptions": {
    "ecmaVersion": 2018
  },
  "env": {
    "es6": true,
    "mocha": true
  },
  "rules": {},
  "plugins": ["@typescript-eslint"]
}

prettierの設定

好みを設定

.prettierrc.json
{
   ...
    {
      "files": "*.ts",
      "options": {
        "semi": false,
        "singleQuote": true
      }
    }
}

VSCode周りの設定

prettierをrecommendationsに追加

.vscode/extensions.json
  "recommendations": [
   ...
    "esbenp.prettier-vscode"
  ]

保存時にprettierが動くようにsettings.jsonを変更

.vscode/settings.json
{
  "editor.formatOnSave": true,
  "editor.defaultFormatter": "esbenp.prettier-vscode",
  "[solidity]": {
    "editor.defaultFormatter": "NomicFoundation.hardhat-solidity"
  },
  "[typescript]": {
    "editor.codeActionsOnSave": {
      "source.fixAll.eslint": true
    }
  }
}

全体のデフォルトフォーマッターをprettierにして、solidityの時だけhardhat-solidityをデフォルトフォーマッターに設定。
あとは、typescriptの時のみeslintでコード修正するように設定

kobokobo

機能紹介

コード補完

エラー表示 & Quick Fix

console.log

これがアツすぎる!
JavaScirptのように、console.logをsolidityに仕込むことができる

solidityで実装されており、トランザクション中にrevertが発生してもログに吐き出される

Truffleだとeventを発火させてデバッグしたり、トランザクションを発火させたのち、truffle debugコマンドを用いてトランザクションをデバッグする
みたいな工夫が必要だったので、これはかなり熱い

VSCodeでテスト実行すると、Outputに吐き出される

このスクラップは2022/10/11にクローズされました