Solidity スマートコントラクト開発の基盤スキル。 言語機能(0.8.x)、セキュリティパターン、ガス最適化、Foundry 開発フローを提供する。 ユーザーが "Solidity", "スマートコントラクト", "コントラクト開発", "Foundry", "solidity-core" 等と言った時に使用。
Solidity スマートコントラクト開発における言語ベストプラクティス、セキュリティ、ガス最適化、Foundry テスト戦略を提供する基盤スキル。
foundry.toml の存在をチェックhardhat.config.* が存在する場合は Hardhat プロジェクトとして扱うfoundry.toml の solc_version を読み取るpragma solidity 宣言を Grep で検出するlib/ ディレクトリ(Foundry)または node_modules/ (Hardhat)をスキャンsrc/**/*.sol または contracts/**/*.soltest/**/*.solscript/**/*.sol検証ゲート: foundry.toml または hardhat.config.* が存在し、Solidity バージョンが 0.8.0 以上であること。
タスクに応じて以下のリファレンスを読み込み、該当セクションを選択する:
| ファイル | 用途 | 読み込む条件 |
|---|---|---|
references/language-patterns.md | 言語機能・コーディング規約 | 新規コントラクト作成、コードレビュー時。NatSpec 記法、命名規則、error / event 定義パターンを確認する |
references/security-checklist.md | 脆弱性パターン・防御策 | セキュリティレビュー時、外部呼び出しを含むコード作成時。該当する脆弱性カテゴリを選択する |
references/gas-optimization.md | ガス最適化テクニック | ガスコスト改善要求時、ループ・ストレージ操作を含むコード作成時。適用可能なテクニックを選択する |
references/foundry-workflow.md | Foundry 開発フロー・テスト戦略 | テスト作成、デプロイスクリプト作成、Fuzz/Invariant テスト設計時 |
判断が不明な場合: 複数のリファレンスが関連する場合は全て読み込む。特にセキュリティは常に確認する。
検証ゲート: 少なくとも 1 つのリファレンスファイルが正常に読み込めること。
language-patterns.md に従い、NatSpec・コーディング規約を適用するsecurity-checklist.md の該当パターンを確認し、防御コードを組み込むgas-optimization.md の最適化ポイントを考慮するsecurity-checklist.md で確認するgas-optimization.md で評価するfoundry-workflow.md に従い、forge test の構成を決定する検証ゲート: forge build がエラーなく完了すること。forge test で全テストがパスすること。
コード生成・修正後、security-checklist.md の該当項目で最終確認を行う:
onlyOwner, onlyRole)の使用。OpenZeppelin の Ownable / AccessControl を推奨。unchecked ブロックの安全性。明確にオーバーフローが発生しない場合にのみ使用しているか。call の返り値を確認しているか。require / カスタムエラーで入力値を検証しているか。検証ゲート: セキュリティチェックリストの CRITICAL 項目に該当する問題が 0 件であること。
ユーザー入力: 「Foundry で ERC20 トークンを作りたい」
アクション:
foundry.toml 確認 → Foundry プロジェクト。lib/openzeppelin-contracts の存在を確認language-patterns.md(NatSpec 規約)+ foundry-workflow.md(テスト構成)を読み込みsrc/MyToken.sol — OpenZeppelin ERC20 を継承、NatSpec 付き、ミント関数に onlyOwnertest/MyToken.t.sol — デプロイ、transfer、mint 権限、ゼロアドレスチェックのテストscript/DeployMyToken.s.sol — デプロイスクリプト結果: OpenZeppelin ベースの型安全な ERC20 トークンがテスト付きで生成される。
ユーザー入力: 「このコントラクトのセキュリティをチェックして」
アクション:
security-checklist.md を読み込み、全カテゴリのチェック項目を確認delegatecall / selfdestruct の使用有無を確認結果: 脆弱性の一覧と修正推奨事項が重要度順に出力される。
ユーザー入力: 「このコントラクトのガスを最適化して」
アクション:
forge test --gas-report でベースラインを計測gas-optimization.md を読み込み、適用可能なテクニックを選択immutable / constant の適用unchecked の安全な適用(ループカウンタ等)require(cond, "msg") → if (!cond) revert CustomError())forge test --gas-report で改善量を確認。テストが全件パスすることを確認結果: ガスコストの改善量がベースラインとの比較で表示される。
症状: forge コマンドが見つからない
原因と対策:
curl -L https://foundry.paradigm.xyz | bash && foundryup でインストールを案内する。~/.foundry/bin が PATH に含まれているか確認する。hardhat.config.* が存在する場合は Hardhat ワークフローに切り替える。npx hardhat compile / npx hardhat test を使用。症状: forge build でコンパイルエラー(Source file requires different compiler version)
原因と対策:
foundry.toml の solc_version を pragma solidity のバージョン範囲に合わせる。^0.8.20 を要求することがある。forge install openzeppelin/[email protected] で旧バージョンを指定するか、プロジェクトの Solidity バージョンを上げる。remappings.txt に正しいマッピングが設定されているか確認する。forge remappings > remappings.txt で再生成可能。症状: CompilerError: Stack too deep
原因と対策:
foundry.toml に via_ir = true を追加する。コンパイル時間が長くなるが、stack depth の制限が緩和される。症状: テストが setUp で失敗、または予期しない revert
原因と対策:
--fork-url の RPC エンドポイントがレート制限に引っかかっている。環境変数で有料 RPC を設定する。vm.warp でタイムスタンプを設定していない。時間依存のロジックがある場合は明示的に設定する。vm.prank / vm.startPrank でテスト用のアドレスを設定しているか確認する。症状: forge install がエラー、またはインポートが解決できない
原因と対策:
git submodule update --init --recursive で再初期化する。forge remappings > remappings.txt で remappings を生成する。VS Code の Solidity 拡張もこのファイルを参照する。forge install openzeppelin/[email protected] のようにタグを指定する。unchecked ブロックは明確にオーバーフローが発生しない場合にのみ使用する。solidity-defi、solidity-nft、solidity-governance)を参照する。solidity-crosschain を参照する。web3-frontend を参照する。web3-account-abstraction を参照する。