Hardhat環境構築
下準備
mkdir hardhat-sample
cd hardhat-sample
yarn init
yarn add --dev hardhat
yarn hardhat
Create a TypeScript project
デフォルトで作られているLock.sol
をVSCodeで開くと以下のようなエラーがでる
コード上は^0.8.9
を用いているが、コンパイルしようとしているsolidityのバージョン(solcのバージョン)が0.7.3になってるぞ
というエラーっぽい
node_modules
配下のsolcを見てみると確かに0.7.3になっている
検索してみると
Solidity: Change workspace compiler version (Remote)
をすると良いという話が結構出てくる
けど、うまくいかず
node_modules配下にあるのは、おそらくhardhat(もしくは別のライブラリ)の依存関係にあるsolcのバージョンが古いのではないかと思ったので、package.jsonで依存関係にあるsolcパッケージのバージョンを固定するように設定
{
...
"resolutions": {
"solc": "0.8.9"
}
}
yarn install
でVSCodeを立ち上げ直したらうまくいった
コンパイル
yarn hardhat compile
Typechainを用いて型定義ファイルも出力してくれてる
感動
Truffleだと結構ここまでくるの大変だった
フォーマッター設定
solのフォーマット
VSCodeを使っているので、プラグインを入れておく
recommendationsにも追加
{
"recommendations": [
"nomicfoundation.hardhat-solidity"
]
}
基本的には何もしなくても、prettierと連携して、solファイルのフォーマット系はやってくれるみたい
prettierの設定をカスタムしたい場合は.prettierrc.json
を置いておけば良いっぽいので、一応置いておく
{
"overrides": [
{
"files": "*.sol",
"options": {
"printWidth": 80,
"tabWidth": 4,
"useTabs": false,
"singleQuote": false,
"bracketSpacing": false,
"explicitTypes": "preserve"
}
}
]
}
オートフォーマット
保存時にフォーマッターが効くようにしたいので、設定
{
"editor.formatOnSave": true
}
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
テスト設定
どうやらHardhat for VSCodeとは別に、Mocha Test Explorerというextensionを入れると、テストがよりやりやすくなる模様
なので、recommendationsに追加
{
"recommendations": [
"nomicfoundation.hardhat-solidity",
"hbenl.vscode-mocha-test-adapter"
]
}
すごくいい感じになった
ESLint周りの設定
いざ開発してみようとすると、TypeScriptのLinter系がなかったので追加
ついでにテストコードで使うmochaのlinterも追加
yarn add -D @typescript-eslint/eslint-plugin @typescript-eslint/parser eslint eslint-config-prettier eslint-plugin-mocha prettier
eslintの設定
{
"extends": ["eslint:recommended", "plugin:mocha/recommended", "prettier"],
"parser": "@typescript-eslint/parser",
"parserOptions": {
"ecmaVersion": 2018
},
"env": {
"es6": true,
"mocha": true
},
"rules": {},
"plugins": ["@typescript-eslint"]
}
prettierの設定
好みを設定
{
...
{
"files": "*.ts",
"options": {
"semi": false,
"singleQuote": true
}
}
}
VSCode周りの設定
prettierをrecommendationsに追加
"recommendations": [
...
"esbenp.prettier-vscode"
]
保存時にprettierが動くように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でコード修正するように設定
機能紹介
コード補完
エラー表示 & Quick Fix
console.log
これがアツすぎる!
JavaScirptのように、console.logをsolidityに仕込むことができる
solidityで実装されており、トランザクション中にrevertが発生してもログに吐き出される
Truffleだとeventを発火させてデバッグしたり、トランザクションを発火させたのち、truffle debugコマンドを用いてトランザクションをデバッグする
みたいな工夫が必要だったので、これはかなり熱い
VSCodeでテスト実行すると、Outputに吐き出される