🛠️

[solidity]devcontainer×foundry を使って再配布可能なコントラクト開発環境を構築するでござるの巻

2022/10/29に公開

foundry で再配布可能な開発環境のテンプレ的なモノが欲しかったので作った。
明日の自分のために簡単にメモを残しておく。
(コントラクトやfoundry 周りに関しては別記事で解説しようと思います。)

作成した環境は github に上げている。(やさしく使ってやってくださいm_m)

https://github.com/Polonity/foundry_on_devcontainer_template

こんな方へおすすめ

  • チーム内のコントラクト開発環境構築をお手軽に終わらせたい方
  • コントラクトを solidity で一貫して開発&試験したい方

環境を使うのに必要なモノ

この環境でできること

  • 1click でお手軽にコントラクト開発環境を構築&再配布
  • solidity のビルド
  • solidity による solidity のためのテスト
  • ローカルノードによるテスト
  • コントラクトのデプロイ

ディレクトリ構成

以下がディレクトリ構成。基本的にfoundry と vscode で必要なファイル類が配置されている。

foundry_devcontainer_env
├── .devcontainer # devcontainer の設定
├── .vscode # vscode の設定
├── script # デプロイやテスト環境構築のためのスクリプト
├── src # コントラクトの実装
├── test # コントラクトに対するテストコード
├── .env  # コントラクトのデプロイおよびデプロイしたコントラクトの実行のための設定
├── .env.local # ローカルノード用の設定(ノード起動スクリプトで自動で設定を書込んでいる)
├── .prettierrc # Prettier(linter) の設定
├── .solhint.json # solhint(formatter) の設定
├── .foundry.toml # foundry の設定
├── Makefile # コマンド実行用 Makefile
├── local.mk # ローカルノード向けコマンド実行用 Makefile
└── remappings.txt # foundry 環境でライブラリパスをマングルするためのファイル

コマンド

コマンドは以下の通り。
初めての動作確認にはmake init && make test をどうぞ。

# 環境の初期設定をする
make init

# foundry を更新する
make update

# コントラクトをビルドする
make build

# コントラクトのテストコードを実行する
make test

# ビルド生成物を削除する
make clean

# 推定のガス代を表示する
make gas

# lint を実行する
make lint

# 静的解析を実行する
make staticcheck

# ローカルノード(anvil)を開始する
make startnode

# ローカルノード(anvil)を停止する
make stopnode

# コントラクトをデプロイする
make deploy-contract

# コントラクトをベリファイする
make verify-contract

# コントラクトをローカルノードにデプロイする
make deploy-local-contract

# コントラクトをローカルノード上でテストする
make test-local

課題

管理者用 wallet を AWS KMS などから引っ張れていない

現状、.env ファイルに wallet のprivate key を書き込む必要があるため、
admin用 wallet の管理をやりずらい。foundryの課題なので、デプロイは別スクリプトでやるべきかなぁと思っています。

Discussion