このプロジェクトは、ブロックチェーン開発の基礎を学ぶためのハンズオン用リポジトリです。Hardhat 3とviemを使用して、スマートコントラクトの開発からデプロイまでを体験できます。
このプロジェクトには以下が含まれています:
- HelloWeb3.sol: メッセージを保存・更新できるシンプルなコントラクト
- Counter.sol: カウンターを増加させるコントラクト(初期インストール済)
- SimpleNFT.sol: OpenZeppelinを使用したERC721標準のNFTコントラクト
- Viem: 最新のTypeScript向けEthereumライブラリ
- Foundry互換テスト: Solidityで書かれた単体テスト
- Node.js統合テスト:
node:testとviemを使用したテスト - OPチェーン対応: Optimismネットワークのシミュレーション例
以下がインストールされていることを確認してください:
- Node.js: v18以上
- npm: v9以上
- Git: 最新版
git clone <repository-url>
cd hello-contractnpm installこれにより、以下のパッケージがインストールされます:
hardhat: スマートコントラクト開発フレームワークviem: TypeScript向けEthereumライブラリ@nomicfoundation/hardhat-toolbox-viem: Hardhat + Viem統合ツール- その他の開発ツール
Solidityコントラクトをコンパイルします:
npx hardhat compileコンパイルが成功すると、artifacts/ディレクトリにコンパイル結果が生成されます。
npx hardhat testSolidityテストのみ実行:
npx hardhat test solidityNode.jsテストのみ実行:
npx hardhat test nodejs特定のテストファイルを実行:
npx hardhat test test/Counter.tsnpx hardhat run scripts/deploy.tsこのスクリプトは以下を実行します:
- HelloWeb3コントラクトをデプロイ
- 初期メッセージを取得して表示
- メッセージを更新
- 更新後のメッセージを表示
npx hardhat ignition deploy ignition/modules/Counter.ts以下のいずれかの方法で秘密鍵を設定します:
方法A: hardhat-keystoreを使用(推奨)
npx hardhat keystore set SEPOLIA_PRIVATE_KEY方法B: 環境変数を使用
export SEPOLIA_PRIVATE_KEY="your-private-key-here"npx hardhat ignition deploy --network sepolia ignition/modules/Counter.tsシンプルなメッセージ保存コントラクトです。
主な機能:
getMessage(): 保存されているメッセージを取得setMessage(string memory newMessage): メッセージを更新
カウンターを増加させるコントラクトです。
主な機能:
inc(): カウンターを1増加incBy(uint by): カウンターを指定した値だけ増加Incrementイベント: 増加量を記録
OpenZeppelinのERC721を使用したNFTコントラクトです。
主な機能:
safeMint(address to, string memory uri): 新しいNFTをミント(オーナーのみ)getCurrentTokenId(): 現在のトークンIDを取得tokenURI(uint256 tokenId): NFTのメタデータURIを取得- ERC721標準の全機能(転送、承認など)
テストの実行:
npm run test:nftデプロイ:
# ローカルネットワーク
npm run deploy:nft
# Sepoliaテストネット
npm run deploy:nft:sepolia詳細なハンズオン: NFTの実装から発行までの詳しい手順はNFT_HANDS_ON.mdを参照してください。
- Viem統合: ethers.jsに代わる最新のTypeScriptライブラリ
- node:test対応: Node.js標準のテストランナーを使用
- 高速コンパイル: 最適化されたビルドプロセス
npx hardhat clean
npx hardhat compilerm -rf node_modules package-lock.json
npm install