mcpField
B
blockchain-developer

blockchain-developer

github.com/404kidwiz開発162 回インストール
リポジトリ

blockchain-developer について

Blockchain Developerは、スマートコントラクト、dApp、ブロックチェーンセキュリティに取り組むWeb3開発者向けのスキルです。SolidityやRustでの開発、ガス最適化、L2統合の手順と指針を提供します。

主な機能

  1. 01SolidityおよびRustでのコントラクト開発
  2. 02スマートコントラクトのセキュリティレビュー指針
  3. 03ガス最適化のワークフロー
  4. 04dAppとウォレットの統合パターン
  5. 05レイヤー2ネットワークの選定指針

活用シーン

  1. 01ERC-20、ERC-721、ERC-1155コントラクトの構築
  2. 02リエントランシーやオーバーフローのリスク確認
  3. 03ガス最適化によるトランザクションコストの削減
  4. 04dAppとウォレット、インデクサーの連携計画

インストール

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

$npx skills add https://github.com/404kidwiz/claude-supercode-skills --skill blockchain-developer

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

詳細

ブロックチェーン開発者

目的

スマートコントラクト(Solidity/Rust)、分散型アプリケーション(dApp)のアーキテクチャ、ブロックチェーンセキュリティを専門とするWeb3開発の専門知識を提供します。安全なスマートコントラクトを構築し、ガス使用量を最適化して、レイヤー2スケーリングソリューション(Arbitrum、Optimism、Base)と統合します。

使用する場面

  • スマートコントラクト(ERC-20、ERC-721、ERC-1155)の作成とデプロイ
  • セキュリティの脆弱性(リエントランシー、オーバーフロー)についてコントラクトを監査
  • dAppフロントエンドとウォレット(MetaMask、WalletConnect、RainbowKit)の統合
  • DeFiプロトコル(AMM、レンディング、ステーキング)の構築
  • アカウント抽象化(ERC-4337)の実装
  • ブロックチェーンデータのインデックス化(The Graph、Ponder)


2. 意思決定フレームワーク

ブロックチェーンネットワークの選択
Which chain fits the use case?
│
├─ **Ethereum L1**
│  ├─ High value transactions? → **Yes** (Max security)
│  └─ Cost sensitive? → **No** (High gas fees)
│
├─ **Layer 2 (Arbitrum / Optimism / Base)**
│  ├─ General purpose? → **Yes** (EVM equivalent)
│  ├─ Low fees? → **Yes** ($0.01 - $0.10)
│  └─ Security? → **High** (Inherits from Eth L1)
│
├─ **Sidechains / Alt L1 (Polygon / Solana / Avalanche)**
│  ├─ Massive throughput? → **Solana** (Rust based)
│  └─ EVM compatibility? → **Polygon/Avalanche**
│
└─ **App Chains (Cosmos / Polkadot / Supernets)**
   └─ Need custom consensus/gas token? → **Yes** (Sovereignty)
開発スタック(2026年標準)
コンポーネント推奨事項理由
フレームワークFoundryRustベースで、テストが非常に高速、Solidityスクリプトに対応しています。(Hardhatはレガシーです)。
フロントエンドWagmi + Viem型安全で、Ethers.jsに代わる軽量な選択肢です。
インデックス化Ponder / The Graphイベントのインデックス化に効率的です。
ウォレットRainbowKit / Web3Modal優れたUXで、簡単に統合できます。

危険信号 → security-auditor にエスカレーションしてください:

  • 監査を受けていないコントラクトが10万ドルを超える価値を保持している
  • 信頼できない入力を使って delegatecall を使用している
  • 独自の暗号方式を実装している(暗号を独自開発する)
  • タイムロックまたはマルチシグガバナンスのないアップグレード可能なコントラクト


4. 主要なワークフロー

ワークフロー 1:スマートコントラクト開発(Foundry)

目標: ホワイトリスト機能付きの安全なERC-721 NFTコントラクトを作成します。

手順:

  1. セットアップ

    forge init my-nft
    forge install OpenZeppelin/openzeppelin-contracts
    
  2. コントラクト(src/MyNFT.sol)

    // SPDX-License-Identifier: MIT
    pragma solidity ^0.8.20;
    
    import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
    import "@openzeppelin/contracts/access/Ownable.sol";
    import "@openzeppelin/contracts/utils/cryptography/MerkleProof.sol";
    
    contract MyNFT is ERC721, Ownable {
        bytes32 public merkleRoot;
        uint256 public nextTokenId;
    
        constructor(bytes32 _merkleRoot) ERC721("MyNFT", "MNFT") Ownable(msg.sender) {
            merkleRoot = _merkleRoot;
        }
    
        function mint(bytes32[] calldata proof) external {
            bytes32 leaf = keccak256(abi.encodePacked(msg.sender));
            require(MerkleProof.verify(proof, merkleRoot, leaf), "Not whitelisted");
            
            _safeMint(msg.sender, nextTokenId);
            nextTokenId++;
        }
    }
    
  3. テスト(test/MyNFT.t.sol)

    function testMintWhitelist() public {
        // ヘルパーでMerkle Treeを生成...
        bytes32[] memory proof = tree.getProof(user1);
        
        vm.prank(user1);
        nft.mint(proof);
        
        assertEq(nft.ownerOf(0), user1);
    }
    


ワークフロー 3:ガス最適化監査

目標: ユーザーのトランザクションコストを削減します。

手順:

  1. ストレージの分析

    • 変数をパックします:uint128 a; uint128 b; は1つのスロット(32バイト)に収まります。
    • 固定値には constant と immutable を使用します。
  2. コードのリファクタリング

    • 文字列の require メッセージの代わりに custom errors を使用します(約ガスを節約)。
    • ループ内で配列の長さをキャッシュします(unchecked { ++i })。
    • 可能な場合は、関数の引数に memory ではなく calldata を使用します。
  3. 検証

    • forge test --gas-report を実行します。


4. パターンとテンプレート

パターン 1:Checks-Effects-Interactions(セキュリティ)

使用例: リエントランシー攻撃の防止。

function withdraw() external {
    // 1. Checks
    uint256 balance = userBalances[msg.sender];
    require(balance > 0, "No balance");

    // 2. Effects (Update state BEFORE sending ETH)
    userBalances[msg.sender] = 0;

    // 3. Interactions (External call)
    (bool success, ) = msg.sender.call{value: balance}("");
    require(success, "Transfer failed");
}
パターン 2:Transparent Proxy(アップグレード可能性)

使用例: 状態とアドレスを維持しながら、コントラクトのロジックをアップグレードします。

// Implementation V1
contract LogicV1 {
    uint256 public value;
    function setValue(uint256 _value) external { value = _value; }
}

// Proxy Contract (Generic)
contract Proxy {
    address public implementation;
    function upgradeTo(address _newImpl) external { implementation = _newImpl; }
    
    fallback() external payable {
        address _impl = implementation;
        assembly {
            calldatacopy(0, 0, calldatasize())
            let result := delegatecall(gas(), _impl, 0, calldatasize(), 0, 0)
            returndatacopy(0, 0, returndatasize())
            switch result
            case 0 { revert(0, returndatasize()) }
            default { return(0, returndatasize()) }
        }
    }
}
パターン 3:マークルツリーのホワイトリスト(ガス効率が高い)

ユースケース: 10,000 人のユーザーをオンチェーンに保存せずにホワイトリストに登録します。

  • オフチェーン: すべてのアドレスをハッシュ化 → ルートハッシュ。
  • オンチェーン: ルートハッシュのみを保存します(32 バイト)。
  • 検証: ユーザーがプルーフ(ルートまでのパス)を提示します。コストは O(log n) で、非常に低く抑えられます。


6. 統合パターン

バックエンド開発者:
  • 引き継ぎ:ブロックチェーン開発者が ABI とコントラクトアドレスを提供し、バックエンドは Alchemy/Infura を使ってイベントをリッスンします。
  • 連携:インデックス作成戦略(The Graph とカスタム SQL インデクサーのどちらを使うか)。
  • ツール:Alchemy Webhooks、Tenderly。
フロントエンド UI/UX エンジニア:
  • 引き継ぎ:ブロックチェーン開発者が wagmi フックを提供し、フロントエンドが UI を構築します。
  • 連携:読み込み状態、トランザクションの確認、「ユーザーがリクエストを拒否しました」というエラートーストへの対応。
  • ツール:RainbowKit。
セキュリティ監査担当者:
  • 引き継ぎ:ブロックチェーン開発者がコードを凍結し、監査担当者がレビューします。
  • 連携:指摘事項(Critical/High/Medium)の修正。
  • ツール:Slither、Mythril。

コメント