solidity-core

solidity-core: Solidity 開発基盤スキル

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "solidity-core" with this command: npx skills add stanah/dotagents/stanah-dotagents-solidity-core

solidity-core: Solidity 開発基盤スキル

Solidity スマートコントラクト開発における言語ベストプラクティス、セキュリティ、ガス最適化、Foundry テスト戦略を提供する基盤スキル。

対象

  • Solidity 0.8.x 以降のスマートコントラクト開発全般

  • Foundry(forge / cast / anvil / chisel)を使った開発フロー

  • コントラクトのセキュリティレビュー・最適化

ワークフロー

Step 1: プロジェクト構造の確認

  • プロジェクトルートで Foundry プロジェクトか確認する:

  • foundry.toml の存在をチェック

  • hardhat.config.* が存在する場合は Hardhat プロジェクトとして扱う

  • いずれも存在しない場合は AskUserQuestion で開発環境を確認する

  • Solidity バージョンを確認する:

  • foundry.toml の solc_version を読み取る

  • または pragma solidity 宣言を Grep で検出する

  • バージョンが 0.8.0 未満の場合はアップグレードを推奨する

  • 依存関係を確認する:

  • lib/ ディレクトリ(Foundry)または node_modules/ (Hardhat)をスキャン

  • OpenZeppelin、Solmate、Solady 等のライブラリ使用状況を把握する

  • 既存のコントラクト構造を Glob でスキャンする:

  • src//*.sol または contracts//*.sol

  • テストファイル: test/**/*.sol

  • スクリプト: script/**/*.sol

検証ゲート: foundry.toml または hardhat.config.* が存在し、Solidity バージョンが 0.8.0 以上であること。

Step 2: リファレンス読み込み

タスクに応じて以下のリファレンスを読み込み、該当セクションを選択する:

ファイル 用途 読み込む条件

references/language-patterns.md

言語機能・コーディング規約 新規コントラクト作成、コードレビュー時。NatSpec 記法、命名規則、error / event 定義パターンを確認する

references/security-checklist.md

脆弱性パターン・防御策 セキュリティレビュー時、外部呼び出しを含むコード作成時。該当する脆弱性カテゴリを選択する

references/gas-optimization.md

ガス最適化テクニック ガスコスト改善要求時、ループ・ストレージ操作を含むコード作成時。適用可能なテクニックを選択する

references/foundry-workflow.md

Foundry 開発フロー・テスト戦略 テスト作成、デプロイスクリプト作成、Fuzz/Invariant テスト設計時

判断が不明な場合: 複数のリファレンスが関連する場合は全て読み込む。特にセキュリティは常に確認する。

検証ゲート: 少なくとも 1 つのリファレンスファイルが正常に読み込めること。

Step 3: コード生成・レビュー

  • 新規コントラクト作成時:

  • language-patterns.md に従い、NatSpec・コーディング規約を適用する

  • security-checklist.md の該当パターンを確認し、防御コードを組み込む

  • gas-optimization.md の最適化ポイントを考慮する

  • OpenZeppelin コントラクトの継承で実装可能な機能は独自実装を避ける

  • 既存コード修正時:

  • 変更箇所に関連するセキュリティパターンを security-checklist.md で確認する

  • ガスコストへの影響を gas-optimization.md で評価する

  • 変更がインターフェースに影響する場合は NatSpec も更新する

  • テスト作成時:

  • foundry-workflow.md に従い、forge test の構成を決定する

  • 正常系・異常系・境界値のテストケースを網羅する

  • Fuzz テストの適用可否を判断する(数値入力がある関数は原則 Fuzz テスト)

  • Invariant テストの適用可否を判断する(状態を持つコントラクトは推奨)

検証ゲート: forge build がエラーなく完了すること。forge test で全テストがパスすること。

Step 4: セキュリティ最終チェック

コード生成・修正後、security-checklist.md の該当項目で最終確認を行う:

  • Reentrancy: Checks-Effects-Interactions パターンの遵守。外部呼び出しの前に状態を更新しているか。

  • Access Control: 適切な修飾子(onlyOwner , onlyRole )の使用。OpenZeppelin の Ownable / AccessControl を推奨。

  • Integer: unchecked ブロックの安全性。明確にオーバーフローが発生しない場合にのみ使用しているか。

  • External Call: 外部呼び出しの戻り値チェック。call の返り値を確認しているか。

  • Input Validation: require / カスタムエラーで入力値を検証しているか。

検証ゲート: セキュリティチェックリストの CRITICAL 項目に該当する問題が 0 件であること。

使用例

例 1: ERC20 トークンの作成

ユーザー入力: 「Foundry で ERC20 トークンを作りたい」

アクション:

  • Step 1: foundry.toml 確認 → Foundry プロジェクト。lib/openzeppelin-contracts の存在を確認

  • Step 2: language-patterns.md (NatSpec 規約)+ foundry-workflow.md (テスト構成)を読み込み

  • Step 3: 以下を生成:

  • src/MyToken.sol — OpenZeppelin ERC20 を継承、NatSpec 付き、ミント関数に onlyOwner

  • test/MyToken.t.sol — デプロイ、transfer、mint 権限、ゼロアドレスチェックのテスト

  • script/DeployMyToken.s.sol — デプロイスクリプト

  • Step 4: セキュリティチェック → アクセス制御確認、ミント上限の有無を確認

結果: OpenZeppelin ベースの型安全な ERC20 トークンがテスト付きで生成される。

例 2: 既存コントラクトのセキュリティレビュー

ユーザー入力: 「このコントラクトのセキュリティをチェックして」

アクション:

  • Step 1: 対象コントラクトを読み込み、言語バージョン・外部依存を把握

  • Step 2: security-checklist.md を読み込み、全カテゴリのチェック項目を確認

  • Step 3: コントラクトの各関数を検査:

  • external / public 関数のアクセス制御を確認

  • 外部呼び出しの有無と CEI パターンの遵守を確認

  • ストレージ操作の安全性を確認

  • delegatecall / selfdestruct の使用有無を確認

  • Step 4: 発見した問題を重要度別(CRITICAL / WARNING / INFO)に分類して報告

結果: 脆弱性の一覧と修正推奨事項が重要度順に出力される。

例 3: ガス最適化

ユーザー入力: 「このコントラクトのガスを最適化して」

アクション:

  • Step 1: 対象コントラクトを読み込み、forge test --gas-report でベースラインを計測

  • Step 2: gas-optimization.md を読み込み、適用可能なテクニックを選択

  • Step 3: 以下の最適化を検討・適用:

  • storage → memory の読み込み回数削減

  • immutable / constant の適用

  • unchecked の安全な適用(ループカウンタ等)

  • カスタムエラーへの置き換え(require(cond, "msg") → if (!cond) revert CustomError() )

  • ストレージパッキングの最適化

  • Step 4: 最適化後に forge test --gas-report で改善量を確認。テストが全件パスすることを確認

結果: ガスコストの改善量がベースラインとの比較で表示される。

トラブルシューティング

  1. Foundry が検出されない

症状: forge コマンドが見つからない

原因と対策:

  • Foundry 未インストール: curl -L https://foundry.paradigm.xyz | bash && foundryup でインストールを案内する。

  • PATH 未設定: ~/.foundry/bin が PATH に含まれているか確認する。

  • Hardhat プロジェクト: hardhat.config.* が存在する場合は Hardhat ワークフローに切り替える。npx hardhat compile / npx hardhat test を使用。

  1. Solidity バージョン不一致

症状: forge build でコンパイルエラー(Source file requires different compiler version )

原因と対策:

  • pragma と foundry.toml の不一致: foundry.toml の solc_version を pragma solidity のバージョン範囲に合わせる。

  • 依存ライブラリのバージョン制約: OpenZeppelin の最新版は ^0.8.20 を要求することがある。forge install openzeppelin/openzeppelin-contracts@v4.x で旧バージョンを指定するか、プロジェクトの Solidity バージョンを上げる。

  • remappings の不備: remappings.txt に正しいマッピングが設定されているか確認する。forge remappings > remappings.txt で再生成可能。

  1. コンパイルエラー(Stack too deep)

症状: CompilerError: Stack too deep

原因と対策:

  • ローカル変数が多すぎる: 関数内のローカル変数を struct にまとめる。

  • 関数の引数/戻り値が多い: struct を引数/戻り値に使用する。

  • via-ir の有効化: foundry.toml に via_ir = true を追加する。コンパイル時間が長くなるが、stack depth の制限が緩和される。

  1. テストの forge test が失敗する

症状: テストが setUp で失敗、または予期しない revert

原因と対策:

  • fork テストの RPC 問題: --fork-url の RPC エンドポイントがレート制限に引っかかっている。環境変数で有料 RPC を設定する。

  • ブロックタイムスタンプ: vm.warp でタイムスタンプを設定していない。時間依存のロジックがある場合は明示的に設定する。

  • msg.sender の不一致: vm.prank / vm.startPrank でテスト用のアドレスを設定しているか確認する。

  1. 依存関係のインストール失敗

症状: forge install がエラー、またはインポートが解決できない

原因と対策:

  • git submodule の問題: git submodule update --init --recursive で再初期化する。

  • remappings の未設定: forge remappings > remappings.txt で remappings を生成する。VS Code の Solidity 拡張もこのファイルを参照する。

  • バージョン指定: forge install openzeppelin/openzeppelin-contracts@v5.0.0 のようにタグを指定する。

注意事項

  • Solidity 0.8.0 以降は算術オーバーフロー/アンダーフローが組み込みでチェックされるため、SafeMath は不要。

  • unchecked ブロックは明確にオーバーフローが発生しない場合にのみ使用する。

  • DeFi、NFT、ガバナンス等のドメイン固有パターンは、対応する専門スキル(solidity-defi 、solidity-nft 、solidity-governance )を参照する。

  • クロスチェーンパターンは solidity-crosschain を参照する。

  • フロントエンド統合は web3-frontend を参照する。

  • アカウント抽象化は web3-account-abstraction を参照する。

  • OpenZeppelin コントラクトの利用を推奨し、独自実装は避ける。

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Automation

solidity-governance

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

doc-code-sync

No summary provided by upstream source.

Repository SourceNeeds Review
Web3

solidity-crosschain

No summary provided by upstream source.

Repository SourceNeeds Review