Skip to content

komeponpon/hello-contract

Repository files navigation

ブロックチェーン開発ハンズオン - Hardhat 3 + Viem

このプロジェクトは、ブロックチェーン開発の基礎を学ぶためのハンズオン用リポジトリです。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: 最新版

1. プロジェクトのクローン

git clone <repository-url>
cd hello-contract

2. 依存関係のインストール

npm install

これにより、以下のパッケージがインストールされます:

  • hardhat: スマートコントラクト開発フレームワーク
  • viem: TypeScript向けEthereumライブラリ
  • @nomicfoundation/hardhat-toolbox-viem: Hardhat + Viem統合ツール
  • その他の開発ツール

3. コンパイル

Solidityコントラクトをコンパイルします:

npx hardhat compile

コンパイルが成功すると、artifacts/ディレクトリにコンパイル結果が生成されます。

🧪 テストの実行

すべてのテストを実行

npx hardhat test

テストを選択的に実行

Solidityテストのみ実行:

npx hardhat test solidity

Node.jsテストのみ実行:

npx hardhat test nodejs

特定のテストファイルを実行:

npx hardhat test test/Counter.ts

📦 デプロイ

ローカルネットワークへのデプロイ

方法1: デプロイスクリプトを使用

npx hardhat run scripts/deploy.ts

このスクリプトは以下を実行します:

  1. HelloWeb3コントラクトをデプロイ
  2. 初期メッセージを取得して表示
  3. メッセージを更新
  4. 更新後のメッセージを表示

方法2: Ignitionモジュールを使用

npx hardhat ignition deploy ignition/modules/Counter.ts

テストネットワーク(Sepolia)へのデプロイ

1. 秘密鍵の設定

以下のいずれかの方法で秘密鍵を設定します:

方法A: hardhat-keystoreを使用(推奨)

npx hardhat keystore set SEPOLIA_PRIVATE_KEY

方法B: 環境変数を使用

export SEPOLIA_PRIVATE_KEY="your-private-key-here"

2. デプロイの実行

npx hardhat ignition deploy --network sepolia ignition/modules/Counter.ts

⚠️ 注意: Sepoliaネットワークへのデプロイには、テストETHが必要です。Sepolia Faucetから取得できます。

📝 コントラクトの説明

HelloWeb3.sol

シンプルなメッセージ保存コントラクトです。

主な機能:

  • getMessage(): 保存されているメッセージを取得
  • setMessage(string memory newMessage): メッセージを更新

Counter.sol

カウンターを増加させるコントラクトです。

主な機能:

  • inc(): カウンターを1増加
  • incBy(uint by): カウンターを指定した値だけ増加
  • Incrementイベント: 増加量を記録

SimpleNFT.sol

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を参照してください。

🛠 開発ツール

Hardhat 3の主な特徴

  • Viem統合: ethers.jsに代わる最新のTypeScriptライブラリ
  • node:test対応: Node.js標準のテストランナーを使用
  • 高速コンパイル: 最適化されたビルドプロセス

参考リンク

🔧 トラブルシューティング

コンパイルエラーが発生する場合

npx hardhat clean
npx hardhat compile

ノードモジュールの問題

rm -rf node_modules package-lock.json
npm install

📖 学習リソース

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published