mcpField
S
solidity-development

solidity-development

github.com/pluginagentmarketplace開発1208 回インストール43 週間前に更新
リポジトリ

solidity-development について

スマートコントラクト開発者向けのSolidity開発スキルです。言語機能、設計パターン、テスト、アップグレード手法を、コード例とトラブルシューティングとともに扱います。

主な機能

  1. 01Solidity 0.8.xの言語機能
  2. 02コントラクト設計パターン
  3. 03FoundryとHardhatでのテスト
  4. 04コントラクトのアップグレード手法
  5. 05セキュリティチェックと問題調査

活用シーン

  1. 01Solidityの言語機能の学習
  2. 02コントラクト設計パターンの選択
  3. 03ファジーテストと不変条件テスト
  4. 04よくあるコンパイルやセキュリティ問題の調査

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/pluginagentmarketplace/custom-plugin-blockchain --skill solidity-development

インストール後、Claude Code で/solidity-developmentを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

assets/
config.yaml
schema.json
references/
GUIDE.md
PATTERNS.md
scripts/
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.02025-01Foundry とパターンを導入した本番環境向けの品質
1.0.02024-12初回リリース

コメント