solidity-development について
スマートコントラクト開発者向けのSolidity開発スキルです。言語機能、設計パターン、テスト、アップグレード手法を、コード例とトラブルシューティングとともに扱います。
主な機能
- 01Solidity 0.8.xの言語機能
- 02コントラクト設計パターン
- 03FoundryとHardhatでのテスト
- 04コントラクトのアップグレード手法
- 05セキュリティチェックと問題調査
活用シーン
- 01Solidityの言語機能の学習
- 02コントラクト設計パターンの選択
- 03ファジーテストと不変条件テスト
- 04よくあるコンパイルやセキュリティ問題の調査
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ pluginagentmarketplace/ custom-plugin-blockchain --skill solidity-developmentインストール後、Claude Code で/solidity-developmentを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
assets/config.yamlschema.jsonreferences/GUIDE.mdPATTERNS.mdscripts/validate.py詳細
Solidity 開発スキル
設計パターン、テスト戦略、本番環境でのベストプラクティスを活用して、Solidity スマートコントラクト開発を習得します。
クイックスタート
# Invoke this skill for Solidity development
Skill("solidity-development", topic="patterns", solidity_version="0.8.24")
対象トピック
1. 言語機能(0.8.x)
最新の Solidity の基本事項:
- データ型:値型、参照型、マッピング
- 関数:可視性、修飾子、オーバーロード
- 継承:ダイヤモンド問題、C3 線形化
- カスタムエラー:ガス効率の高いエラー処理
2. 設計パターン
実績のあるパターン:
- CEI:Checks-Effects-Interactions
- Factory:コントラクトのデプロイパターン
- Proxy:アップグレード可能なコントラクト
- Access Control:RBAC、Ownable
3. テスト
包括的なテスト戦略:
- ユニットテスト:Foundry、Hardhat
- ファズテスト:プロパティベーステスト
- 不変条件テスト:システム全体のプロパティ
- フォークテスト:メインネットのシミュレーション
4. アップグレード機能
安全なアップグレードパターン:
- UUPS:自己アップグレード型プロキシ
- Transparent:管理者の分離
- Beacon:共有実装
- Diamond:複数のファセット
コード例
CEI パターン
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;
contract SecureVault {
mapping(address => uint256) public balances;
error InsufficientBalance();
error TransferFailed();
function withdraw(uint256 amount) external {
// 1. CHECKS
if (balances[msg.sender] < amount) revert InsufficientBalance();
// 2. EFFECTS
balances[msg.sender] -= amount;
// 3. INTERACTIONS
(bool ok,) = msg.sender.call{value: amount}("");
if (!ok) revert TransferFailed();
}
}
Factory パターン
contract TokenFactory {
event TokenCreated(address indexed token, address indexed owner);
function createToken(
string memory name,
string memory symbol
) external returns (address) {
Token token = new Token(name, symbol, msg.sender);
emit TokenCreated(address(token), msg.sender);
return address(token);
}
}
Foundry テスト
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;
import "forge-std/Test.sol";
contract VaultTest is Test {
Vault vault;
address alice = makeAddr("alice");
function setUp() public {
vault = new Vault();
vm.deal(alice, 10 ether);
}
function test_Deposit() public {
vm.prank(alice);
vault.deposit{value: 1 ether}();
assertEq(vault.balances(alice), 1 ether);
}
function testFuzz_Withdraw(uint256 amount) public {
amount = bound(amount, 0.01 ether, 10 ether);
vm.startPrank(alice);
vault.deposit{value: amount}();
vault.withdraw(amount);
vm.stopPrank();
assertEq(vault.balances(alice), 0);
}
function test_RevertWhen_InsufficientBalance() public {
vm.prank(alice);
vm.expectRevert(Vault.InsufficientBalance.selector);
vault.withdraw(1 ether);
}
}
パターンリファレンス
| パターン | 用途 | 複雑さ |
|---|---|---|
| CEI | すべての状態変更 | 低 |
| Factory | 複数のインスタンス | 低 |
| Clone (1167) | ガス効率の高いコピー | 中 |
| UUPS | アップグレード可能 | 中 |
| Diamond | 無制限のサイズ | 高 |
よくある落とし穴
| 落とし穴 | 問題 | 解決策 |
|---|---|---|
| スタックが深すぎる | 変数が16個を超える | 構造体またはヘルパーを使用する |
| コントラクトが大きすぎる | 24KB を超える | ライブラリに分割する |
| 再入可能性 | 呼び出し後の状態 | CEI パターンを使用する |
| アクセス制御の欠如 | 誰でも呼び出せる | 修飾子を追加する |
トラブルシューティング
「Stack too deep」
// Solution 1: Use struct
struct Params { uint256 a; uint256 b; uint256 c; }
// Solution 2: Block scoping
{ uint256 temp = x + y; }
// Solution 3: Internal function
function _helper(uint256 a) internal { }
「Contract size exceeds limit」
# Check contract sizes
forge build --sizes
解決策:ライブラリに分割するか、Diamond パターンを使用します。
セキュリティチェックリスト
- すべての引き出しで CEI パターンを使用する
- 管理者関数にアクセス制御を設定する
- 入力を検証する(ゼロアドレス、範囲)
- 外部呼び出しに再入可能性ガードを設定する
- 状態変更時にイベントを発行する
- ガス効率のためにカスタムエラーを使用する
CLI コマンド
# Development workflow
forge init # New project
forge build # Compile
forge test -vvv # Run tests
forge coverage # Coverage report
forge fmt # Format code
forge snapshot # Gas snapshot
関連項目
- Bonded Agent:
03-solidity-expert - 関連スキル:
ethereum-development、smart-contract-security
バージョン履歴
| バージョン | 日付 | 変更内容 |
|---|---|---|
| 2.0.0 | 2025-01 | Foundry とパターンを導入した本番環境向けの品質 |
| 1.0.0 | 2024-12 | 初回リリース |
コメント
Markdown 対応