blockchain-developer について
Blockchain Developerは、スマートコントラクト、dApp、ブロックチェーンセキュリティに取り組むWeb3開発者向けのスキルです。SolidityやRustでの開発、ガス最適化、L2統合の手順と指針を提供します。
主な機能
- 01SolidityおよびRustでのコントラクト開発
- 02スマートコントラクトのセキュリティレビュー指針
- 03ガス最適化のワークフロー
- 04dAppとウォレットの統合パターン
- 05レイヤー2ネットワークの選定指針
活用シーン
- 01ERC-20、ERC-721、ERC-1155コントラクトの構築
- 02リエントランシーやオーバーフローのリスク確認
- 03ガス最適化によるトランザクションコストの削減
- 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年標準)
| コンポーネント | 推奨事項 | 理由 |
|---|---|---|
| フレームワーク | Foundry | Rustベースで、テストが非常に高速、Solidityスクリプトに対応しています。(Hardhatはレガシーです)。 |
| フロントエンド | Wagmi + Viem | 型安全で、Ethers.jsに代わる軽量な選択肢です。 |
| インデックス化 | Ponder / The Graph | イベントのインデックス化に効率的です。 |
| ウォレット | RainbowKit / Web3Modal | 優れたUXで、簡単に統合できます。 |
危険信号 → security-auditor にエスカレーションしてください:
- 監査を受けていないコントラクトが10万ドルを超える価値を保持している
- 信頼できない入力を使って
delegatecallを使用している - 独自の暗号方式を実装している(暗号を独自開発する)
- タイムロックまたはマルチシグガバナンスのないアップグレード可能なコントラクト
4. 主要なワークフロー
ワークフロー 1:スマートコントラクト開発(Foundry)
目標: ホワイトリスト機能付きの安全なERC-721 NFTコントラクトを作成します。
手順:
-
セットアップ
forge init my-nft forge install OpenZeppelin/openzeppelin-contracts -
コントラクト(
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++; } } -
テスト(
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:ガス最適化監査
目標: ユーザーのトランザクションコストを削減します。
手順:
-
ストレージの分析
- 変数をパックします:
uint128 a; uint128 b;は1つのスロット(32バイト)に収まります。 - 固定値には
constantとimmutableを使用します。
- 変数をパックします:
-
コードのリファクタリング
- 文字列の
requireメッセージの代わりにcustom errorsを使用します(約ガスを節約)。 - ループ内で配列の長さをキャッシュします(
unchecked { ++i })。 - 可能な場合は、関数の引数に
memoryではなくcalldataを使用します。
- 文字列の
-
検証
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。
コメント
Markdown 対応