blockchain-web3 について
Solidity コントラクトやブロックチェーンアプリを開発する人向けの Web3 開発スキルです。コントラクトの安全性、開発ツール、フロントエンド連携、DeFi のパターン、ガス最適化を扱います。
主な機能
- 01Solidity コントラクトの構造と安全性
- 02Hardhat と Foundry のワークフロー
- 03ethers.js v6 と viem の連携
- 04DeFi の設計パターン
- 05ガス最適化の手法
活用シーン
- 01コントラクトの安全性パターンの確認
- 02Hardhat または Foundry のコマンド選定
- 03フロントエンドとブロックチェーンの接続
- 04DeFi コントラクトの仕組みの検討
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ travisjneuman/ .claude --skill blockchain-web3インストール後、Claude Code で/blockchain-web3を入力して読み込まれたか確認します。
詳細
ブロックチェーンと Web3 開発
スマートコントラクト開発(Solidity)
コントラクトの構造
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
contract MyToken is ERC20, Ownable {
constructor() ERC20("MyToken", "MTK") Ownable(msg.sender) {
_mint(msg.sender, 1000000 * 10 ** decimals());
}
}
セキュリティパターン
- チェック・効果・相互作用: 検証 → 状態を更新 → 外部呼び出し
- リエントランシーガード: OpenZeppelin の
ReentrancyGuardまたはnonReentrantを使用します - アクセス制御:
Ownable、AccessControl、またはカスタム修飾子を使用します - 整数の安全性: Solidity 0.8 以降には、オーバーフローのチェック機能が組み込まれています
- プッシュよりプル: 資金を送金するのではなく、ユーザーが引き出せるようにします
よくある脆弱性
| 脆弱性 | 防止策 |
|---|---|
| リエントランシー | nonReentrant 修飾子、CEI パターン |
| フロントランニング | コミット・リビール方式、flashbot による保護 |
| オラクル操作 | Chainlink の使用、スポット価格ではなく TWAP の使用 |
| 戻り値の未チェック | 常に transfer() の戻り値を確認するか、safeTransfer を使用します |
| Delegatecall インジェクション | ユーザー指定のアドレスに対して delegatecall を決して実行しないでください |
開発ツール
Hardhat
npx hardhat init
npx hardhat compile
npx hardhat test
npx hardhat deploy --network sepolia
Foundry
forge init
forge build
forge test -vvv
forge script script/Deploy.s.sol --rpc-url $RPC --broadcast
フロントエンド統合(ethers.js v6 / viem)
// viem (recommended for new projects)
import { createPublicClient, http } from 'viem'
import { mainnet } from 'viem/chains'
const client = createPublicClient({ chain: mainnet, transport: http() })
const balance = await client.getBalance({ address: '0x...' })
// wagmi hooks (React)
import { useAccount, useBalance, useContractWrite } from 'wagmi'
const { address } = useAccount()
const { data: balance } = useBalance({ address })
DeFi パターン
- AMM: 定積公式(x * y = k)、集中流動性
- レンディング: 過剰担保ローン、清算メカニズム、金利モデル
- ステーキング:
rewardPerTokenの累積パターンによる報酬の分配 - ガバナンス: トークン保有量に応じた投票、タイムロックコントローラー、提案のライフサイクル
ガス最適化
- 読み取り専用のパラメーターには
memoryよりcalldataを使用します - 構造体をパックします(スロットを効率的に使えるよう、小さい型をまとめます)
- 安全な算術演算には
uncheckedブロックを使用します - ストレージの読み書きを最小限に抑えます(メモリにキャッシュします)
- オンチェーンでの参照が不要なデータには、ストレージの代わりにイベントを使用します
コメント
Markdown 対応