Sui ブロックチェーン上で動作する NFT マーケットプレイスのサンプル実装です。
このプロジェクトは、Sui の標準 Kiosk インフラを活用した分散型 NFT マーケットプレイスです。以下の機能を提供します:
- NFT の mint: WorkshopNft の発行
- 出品機能: mint と同時に Kiosk へ出品(
mint_and_list) - TransferPolicy 初期化: Kiosk での売買を可能にする
.
├── contract/ # Sui Move コントラクト
│ ├── sources/
│ │ └── workshop_nft.move
│ ├── tests/
│ │ └── workshop_nft_tests.move
│ └── Move.toml
├── frontend/ # Next.js フロントエンド(予定)
└── openspec/ # OpenSpec 仕様
- Sui Move (Move 2024 仕様準拠)
- Kiosk 標準: place / list / purchase API による NFT 取引
- TransferPolicy 標準: 型
Tのトレード可否制御 - Display 標準: NFT メタデータのフロント表示サポート
- Sui CLI のインストール
- Sui wallet の設定
- リポジトリのクローン
git clone <repository-url>
cd nft_marketplace_sample- 依存関係の取得
cd contract
sui move buildcd contract
sui move testcd contract
sui client publish --gas-budget 100000000デプロイ結果から以下の情報を記録してください:
- Package ID: デプロイされたパッケージの ID
- Publisher Object ID: Publisher オブジェクトの ID
デプロイ後、必ず以下のコマンドを実行して TransferPolicy を初期化してください。 これにより、WorkshopNft が Kiosk で売買可能になります。
sui client call \
--package <PACKAGE_ID> \
--module workshop_nft \
--function init_transfer_policy \
--args <PUBLISHER_OBJECT_ID> \
--gas-budget 10000000実行結果から以下を記録してください:
- TransferPolicy Object ID: 共有された TransferPolicy の ID
- TransferPolicyCap Object ID: 今後のポリシー更新に使用
sui client call \
--package <PACKAGE_ID> \
--module workshop_nft \
--function mint \
--args "My NFT" "A cool NFT" "https://example.com/nft.png" \
--gas-budget 10000000まず、Kiosk を作成します:
sui client call \
--package 0x2 \
--module kiosk \
--function default \
--gas-budget 10000000実行結果から以下を記録してください:
- Kiosk Object ID: 作成された Kiosk の ID
- KioskOwnerCap Object ID: Kiosk の所有権証明
次に、NFT を mint して出品します:
sui client call \
--package <PACKAGE_ID> \
--module workshop_nft \
--function mint_and_list \
--args <KIOSK_ID> <KIOSK_OWNER_CAP_ID> "Listed NFT" "An NFT for sale" "https://example.com/sale.png" 1000000000 \
--gas-budget 10000000価格は MIST 単位で指定します(1 SUI = 1,000,000,000 MIST)。
このプロジェクトは Move 2024 の可視性ポリシーに準拠しています:
- 実処理:
public(package)関数で実装 - 外部インターフェース:
entry関数(薄い実装) - PTB 呼出対象:
entry/publicのみ
entry fun mint(): NFT を mint して呼び出し元に転送public(package) fun mint_nft(): NFT 作成の実処理
entry fun init_transfer_policy(): TransferPolicy の初期化(デプロイ後 1 回実行)
entry fun mint_and_list(): mint と Kiosk 出品を一括実行public(package) fun place_and_list_core(): Kiosk 出品の実処理
エラー: TransferPolicy<WorkshopNft> が見つかりません
解決策: デプロイ後に init_transfer_policy を実行してください。
エラー: 想定外の価格で出品されました
解決策: 価格は MIST 単位で指定します。1 SUI = 1,000,000,000 MIST
エラー: 依存関係の解決に失敗しました
解決策:
rm -rf ~/.move
sui move buildMIT