このリポジトリは、用意済みの Move コントラクト(Package ID 0xffb17d198be1636f5bc710a45581e78c52b0592db19b966c974fec737c30350d)を使って、Sui Testnet 上で NFT をミントするハンズオン用フロントエンドを提供します。参加者はコントラクトをデプロイする必要はなく、Testnet でミントと確認を体験できます。
- Chrome 等のブラウザ
- Sui Wallet など Testnet に切り替え可能なウォレット拡張(Testnet SUI を取得しておく)
- Node.js 18 以上 + pnpm(ローカルで起動する場合)
- または VS Code + Dev Container(Docker 環境、推奨)
- リポジトリをクローンし、VS Code で開きます。
- 「Dev Container で再度開く」を選択します。
- Sui CLI、Node.js 22、pnpm が自動的にセットアップされます。
- Sui Move の拡張機能も自動的にインストールされます。
- コンテナ起動後、
app/.envの設定を確認してください(Package ID は固定済み)。 - 開発サーバを起動します。
cd app pnpm dev -- --host
- 依存関係をインストールします。
cd app pnpm install app/.envファイルを確認します(Package ID は固定済み)。※VITE_SUI_NETWORK=testnet VITE_PACKAGE_ID=0xffb17d198be1636f5bc710a45581e78c52b0592db19b966c974fec737c30350d VITE_MODULE=nft VITE_FN_MINT=mint
.envファイルはリポジトリに含まれていますが、必要に応じて値を変更できます。- 開発サーバを起動します。
cd app pnpm dev -- --host
- 表示された URL をブラウザで開き、Sui Wallet を Testnet に切り替えた状態で接続します。
- 名前・説明・画像 URL を入力し、「NFT をミント」を押してウォレットで署名します。
- 画面下部に Tx Digest と Object ID が表示されます。その値を控えて次の確認手順に進みます。
- Sui Vision (Testnet)
Codeタブでnft::mintとinitを確認できます。Objectsタブに Display オブジェクトが発行者に転送されていることも確認できます。
- Sui Vision を開きます。右上が Testnet になっていることを確認してください。
- ミント画面で控えた ID を検索欄に貼り付けて確認します。
Tx Digest: トランザクション詳細が表示され、イベントやガス代を確認できます。Object ID: ミントした NFT オブジェクトの所有者・フィールド (name,description,image_url) が表示されます。
- 必要に応じてウォレットの
Objectsタブでも所有状態を確認してください。
- Move コードは contracts/sources/nft.move にあります。
- ワークショップ向けに日本語コメントが充実しており、学習しやすい構成になっています。
WorkshopNFT構造体が NFT 本体で、keyとstore能力を持ちます。mint関数でミントし、public_transferでウォレットに転送します。
- publish 時に
init関数が実行され、Display のテンプレート(name/description/image_url/link)が自動登録されます。 - Display オブジェクトは
public_transferで発行者に直接転送されます(以前はpublic_share_objectで共有していました)。
- フロントエンドは
app/srcにあり、@mysten/dapp-kitでウォレット接続とmove_callを行います。 - React + TypeScript + Vite で構成されています。
.devcontainer/に Dev Container の設定があり、VS Code で簡単に開発環境を構築できます。- Sui CLI は起動時に自動的に最新版に更新されます。
- pnpm は corepack で自動的に有効化されます。
これで Testnet 上での NFT ミント体験が完結します。ウォレットが Testnet になっていることと、Tx Digest / Object ID を正しく控えることに注意してください。