コンテンツにスキップ

ミント

ミントは、ゲームアイテムをNFTとして発行する機能です。Hive コンソールでは、ブロックチェーン > XPLA > NFT メニューのユーザー発行タブにある設定された詳細に基づいてNFTを発行します。

ミント機能の実装フロー

以下は、Mint機能の実装プロセスです。Mint機能を実装するには、以下のフローチャート画像とガイドコンテンツに従って、ゲームクライアント(Hive SDK、ゲームクライアント)およびゲームサーバーエリアにコードを実装してください。以下の画像で青いアスタリスクでマークされた部分が、開発者が作業する必要がある部分です。主なタスクの詳細については、以下のガイドを参照してください。

Note

準備を完了した後、Mint機能を実装する必要があります。

Note

Mint機能を実装するには、Hive SDKを使用しなければなりません。

hive SDKでのログインの実装

ゲームクライアントにコードを実装して、ユーザーがHive SDK認証機能を使用してIdPログインでログインできるようにします。Webログインもログイン方法としてサポートされています。

NFTミントボタンの実装

ゲームクライアントにユーザーがNFT発行ページを開くことを可能にするUIを実装します。例えば、ユーザーがゲームにアクセスした後、キャラクターインベントリからアイテムを選択すると、アイテムをNFTに変換ボタンが表示されるべきです。このボタンが押されると、以下の内容に従ってNFT発行ページが開かれるべきです。

アイテムをNFTに変換するリクエスト

ゲームクライアントからゲームサーバーにユーザーゲームアイテムのNFT発行をリクエストするコードを実装しています。これは、ユーザーがNFT発行ボタンを選択したときのアクションを実装するためです。ゲームサーバーがゲームクライアントからのリクエストを受け取ると、NFTとして発行されるゲームアイテムを確認し、次にNFT発行ページのリンクを作成するAPIを呼び出してアイテムをNFTとして発行します。

NFT発行ページは、ユーザーが所有するアイテムをNFTに変換できるウェブページです。このウェブページは、Hive ブロックチェーンサーバーによって提供されています。ゲームサーバーは、リンク生成APIを呼び出してこのウェブページのURL(webLinkUrl)を取得します。ユーザーがこのウェブページにアクセスすると、ゲーム内アイテムをブロックチェーン上でNFTとしてミントすることができます。

ノート

API呼び出しを行う際の開発者向けの注意事項は以下の通りです。

ゲームサーバーのURL

gameServerUrl は、Hive ブロックチェーンサーバーがゲームサーバーに呼び出す API の リクエスト URL として使用されます (アイテム検証 API結果確認 API)。

ゲームサーバーURLとトークン

Hiveブロックチェーンサーバーがアイテム検証APIまたは結果確認APIを呼び出すと、ゲームサーバーはAPI呼び出しのために認証トークン(ヘッダー パラメータ)を使用できます。これは開発者にとってオプションです。ゲームサーバーがAPI呼び出しのために認証トークンを使用することを選択した場合、NFT発行ページリンク生成APIを呼び出す際に、この認証トークンをtoken(クエリパラメータ)としてHiveブロックチェーンサーバーに事前に送信する必要があります。以下に例を示します。

"gameServerUrl": "https://api.com2us.com/hive?token=sInR5cCI6IkpXVC..."

属性

attributes は、Hive ブロックチェーンサーバーがゲームサーバーに アイテム検証API結果確認API を呼び出す際にリクエストボディとして使用されます。

attributesに含まれるアイテムのユニークコードを使ってAPIを呼び出すと、ユニークコードを結果確認APIのリクエストボディattributesに含めることもできます。この場合、対応するユニークコードでアイテムのステータスを更新できます。

NFT発行ページリンクの有効期限

一度作成されたページへのリンクは、最初にアクセスされたセッションに基づいてのみ10分間有効です

リクエストURL

アイテム
ライブURL https://bc-platform-api.withhive.com/web3/v1/web-link
サンドボックスURL https://sandbox-bc-platform-api.withhive.com/web3/v1/web-link
HTTPメソッド POST
コンテンツタイプ application/json

ヘッダーパラメータ

フィールド名 説明 タイプ 必須
Authorization API呼び出しのための認証トークン 文字列 Y

リクエストボディ

フィールド名 説明 タイプ 必須
type MINT 文字列 Y
playerId プレイヤーID 数字 Y
characterId キャラクターID 文字列 Y
gameServerUrl アイテム検証および機能実行後の成功/失敗結果を受信するためのアドレス。アイテム検証/結果確認APIヘッダーのために認証トークンをtokenクエリパラメータとして送信します 文字列 Y
data タイプに応じたリクエストパラメータ情報 json N

データオブジェクト

フィールド名 説明 必須
itemId ユーザーNFTテンプレート識別子(コンソール登録) 文字列 Y
attributes トークンごとに適用される追加メタデータプロパティ(例:ユニークアイテムコード、強さ、敏捷性など、NFTに含めるプロパティ) json配列 N
attributes.traitType 属性を構成するアイテム名 文字列 N
attributes.value 特性値 文字列 N

リクエストサンプル

curl -X 'POST' \
  'https://sandbox-bc-platform-api.withhive.com/web3/v1/web-link' \
  -H 'accept: application/json' \
  -H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJrZXlObyI6NiwiaWQiOiIvVWpXN....' \
  -H 'Content-Type: application/json' \
  -d '{
  "type": "MINT",
  "playerId": 1276814678,
  "characterId": "zeratu",
  "gameServerUrl": "https://api.com2us.com/hive" //인증 토큰 전송 시: "gameServerUrl": "https://api.com2us.com/hive?token=sInR5cCI6IkpXVC..."
  "data": {
    "itemId": "HIVE",
    "attributes": [
        {
          "traitType": "item_id",
          "value": "sward-3283272101239"
        },
        {
          "traitType": "strength",
          "value": "50"
        },
        {
          "traitType": "agility",
          "value": "10"
        }
      ]
  },
}'

応答

フィールド名 説明
code API呼び出し結果コード、0: 成功 数値
message 結果メッセージ 文字列
data APIレスポンスデータ json
data.webLinkId ウェブリンクID (UUID) 文字列
data.webLinkUrl 生成されたワンタイムウェブリンク (URL) 文字列
data.expiration ウェブリンクの有効期限 (ISO 8601) 文字列

レスポンスサンプル

{
  "code": 0,
  "message": "success",
  "data": {
    "webLinkid": "b6d2ca1b-b43a-4129-bf54-9a189e3aa664",
    "webLinkUrl": "https://sandbox-xpla-platform.withhive.com/api/v1/web-link/redirect?token=b256c85c-aee8-4837-b54d-9a03fe8a7435.f94140b71c9ebf058956547753131adde9968a0266f208d7e3059bbb6dd0c7bc",
    "expiration": "2024-08-05T08:33:15.448Z"
  }
}

Hive SDKを使用したNFT発行ページの実装

NFT発行ページリンク作成API レスポンスとして受け取ったウェブページのURLは、Hive SDKを使用して外部ブラウザに公開されます。


以下はNFT発行ページの例です。

発行されるNFTのアイテム情報


NFT発行ページを開くと、X-PLANETウォレットまたはXLPA Vaultにログインするためのウィンドウが表示されます。ユーザーは、X-PLANETウォレットまたはXLPA Vaultにログインした後、MintまたはBurnを実行するために特定のウォレットアドレスを選択する必要があります。

Note

XPLA Vaultは2025年6月にサポートされる予定です。

X-PLANET XPLA Vault

NFTミント(ミントの実行)

NFT発行ページで、ユーザーはアイテムを選択し、その後ミントを実行します。

NFTを発行する前にコミッションを確認してください

アイテム検証APIコール (ハイブブロックチェーンサーバー → ゲームサーバー)

Note

このAPIはゲームサーバーがHiveブロックチェーンサーバーを呼び出すAPIではなく、Hiveブロックチェーンサーバーがゲームサーバーを呼び出すAPIです。したがって、ゲームサーバーはHiveブロックチェーンサーバーが望む形式でAPIエンドポイントを設定する必要があります。

ゲームアイテムをNFTに変換する前に、Hive ブロックチェーンサーバーはゲームサーバーからアイテムの検証を要求します。Hive ブロックチェーンサーバーは、ゲームサーバーから提供された応答からアイテム情報を検証した後、ブロックチェーン上でNFTを発行します。アイテムの検証が失敗した場合、Hive ブロックチェーンサーバーはNFTを発行しません。

Note

ゲームサーバーでは、結果確認APIを介してNFT発行結果が受信されるまで、ゲーム内で確認されたアイテムの使用を制限する必要があります。

ノート

APIエンドポイントを構成する際の開発者向けの考慮事項は以下の通りです。

ゲームサーバーURL

このAPIは、NFT発行ページリンク作成APIから要求されたgameServerUrlを使用して、ゲームサーバーからの検証をリクエストします。

認証ヘッダー

NFT発行ページリンク作成APIから要求されたgameServerUrltokenクエリパラメータが存在する場合は、このtoken値をBearer形式で使用してください。

属性

NFT発行ページリンクを生成するためのAPIリクエストボディにattributesを含めます。

リクエストURL

ゲームサーバーで準備する必要があるAPIエンドポイント情報は以下の通りです。

アイテム
URL {gameServerUrl}/items/validate
HTTP メソッド POST
コンテンツタイプ application/json

ヘッダーパラメータ

フィールド名 説明 タイプ 必須
Authorization NFT発行ページAPIのgameServerUrltokenクエリパラメータとして送信される認証トークン。Bearer ${token}の形式で呼び出されます。 Bearer N
User-Agent HiveBlockchain/1.0 string Y

リクエストボディ

フィールド名 説明 タイプ 必須
type MINT 文字列 Y
itemId NFTアイテム識別コード 文字列 Y
playerId プレイヤーID 数字 Y
characterId キャラクターID 文字列 N
webLinkId ウェブリンクID (UUID) 文字列 Y
tokenId NFT ID 文字列 N
attributes トークンごとに適用される追加のメタデータプロパティ (例えば、ユニークアイテムコード、強さ、敏捷性など、NFTに含まれるプロパティ) json配列 N
attributes.traitType 属性を構成するアイテム名 文字列 N
attributes.value 特性値 文字列 N

リクエストサンプル

curl -X 'POST' \
  'https://api.com2us.com/hive/items/validate' \
  -H 'accept: */*' \
  -H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoieHBsYS13ZWJ2aWV3IiwiYXBwIjoiY29tLmdjcC5zdGVwYnlzdGVwLnBjd2ViLmJs...' \ // 인증 토크 사용   -H 'User-Agent: HiveBlockchain/1.0' \
  -d '{
    "type": "MINT",
    "itemId": "HIVE",
    "playerId": 2319123897,
    "characterId": "zeratu",
    "webLinkId": "b6d2ca1b-b43a-4129-bf54-9a189e3aa664",
    "attributes": [ // NFT 발행 페이지 링크 생성 시 attributes
        {
          "traitType": "item_id",
          "value": "sward-3283272101239"
        },
        {
          "traitType": "strength",
          "value": "50"
        },
        {
          "traitType": "agility",
          "value": "10"
        }
      ]
  }'

レスポンス

HTTPステータスコードは次のとおりです。

  • 成功
    • 200
  • 失敗
    • 4xx: 不正なリクエストのエラーステータスコード
    • 5xx: サーバーエラーのエラーステータスコード

結果確認API呼び出し (ハイブブロックチェーン → ゲームサーバー)

Note

このAPIは、ゲームサーバーがHiveブロックチェーンサーバーを呼び出すAPIではなく、Hiveブロックチェーンサーバーがゲームサーバーを呼び出すAPIです。したがって、ゲームサーバーはHiveブロックチェーンサーバーが望む形式でAPIエンドポイントを設定する必要があります。

Hiveブロックチェーンサーバーがリクエストボディ内でNFT発行結果をゲームサーバーに送信すると、ゲームサーバーはアイテムがゲームで使用できないように処理し、その後APIを通じて結果をHiveブロックチェーンサーバーに返します。


ゲームサーバーが発行結果に基づいて実行するアクションは次のとおりです。

  • NFT発行成功
    • ゲーム内でアイテムを使用不可にするプロセス(例:ゲームユーザーのインベントリからアイテムを削除)
  • NFT発行失敗
    • ゲーム内でアイテムを使用可能にするプロセス(例:アイテムを再びゲームユーザーのインベントリで使用できるように使用制限を解除)
    • ユーザーがNFT発行をキャンセルした場合や、一定の時間制限を超えた場合にNFT発行失敗結果を送信
Warning

ゲームサーバーで対応するアイテムの使用を制限し、NFT発行結果を受け取るまで待つ必要があります。


以下は、ゲームサーバーが成功したNFT発行で応答したときのNFT発行ページ画面の例です。

ノート

APIエンドポイントを設定する際の開発者への考慮事項は以下の通りです。

属性

attributesにユニークアイテムコードを含め、NFT発行ページリンク作成APIを呼び出すことで、リクエストボディattributesにもユニークコードを含めることができます。この場合、対応するユニークコードでアイテムのステータスを更新できます。

認証ヘッダー

NFT発行ページリンク作成APIから要求されたgameServerUrltokenクエリパラメータが存在する場合は、このtoken値をBearer形式で使用してください。

リクエストURL

アイテム
URL {gameServerUrl}/items/callback
HTTPメソッド POST
コンテンツタイプ application/json

ヘッダーパラメータ

フィールド名 説明 タイプ 必須
Authorization NFT発行ページリンク作成APIのgameServerUrlにおいて、tokenクエリパラメータとして送信される認証トークン。Bearer ${token}の形式で呼び出されます。 Bearer N
User-Agent HiveBlockchain/1.0 文字列 Y

リクエストボディ

フィールド名 説明 タイプ 必須
type MINT 文字列 Y
itemId NFTアイテム識別コード 文字列 Y
playerId プレイヤーID 数字 Y
characterId キャラクターID 文字列 N
webLinkId ウェブリンクID (UUID) 文字列 Y
tokenId NFT ID (成功した場合に含まれる) 文字列 N
status トランザクション結果 (成功、失敗) 文字列 Y
attributes トークンごとに適用する追加のメタデータプロパティ (例: ユニークアイテムコード、強さ、敏捷性など、NFTに含まれるプロパティ) json配列 N
attributes.traitType 属性を構成するアイテムの名前 文字列 N
attributes.value 特性値 文字列 N

リクエストサンプル

curl -X 'POST' \
  'https://api.com2us.com/hive/items/callback' \
  -H 'accept: */*' \
  -H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoieHBsYS13ZWJ2aWV3IiwiYXBwIjoiY29tLmdjcC5zdGVwYnlzdGVwLnBjd2ViLmJs...' \  // 인증 토크 사용   -H 'User-Agent: HiveBlockchain/1.0' \
  -d '{
    "type": "MINT",
    "itemId": "HIVE",
    "playerId": 2319123897,
    "characterId": "zeratu",
    "webLinkId": "b6d2ca1b-b43a-4129-bf54-9a189e3aa664",
    "tokenId": "HIVE#348",
    "status": "success",
    "attributes": [ // NFT 발행 페이지 링크 생성 시 attributes
        {
          "traitType": "item_id",
          "value": "sward-3283272101239"
        },
        {
          "traitType": "strength",
          "value": "50"
        },
        {
          "traitType": "agility",
          "value": "10"
        }
      ]
  }'

応答

HTTPステータスコードは次のとおりです。

  • 成功
    • 200
  • 失敗
    • 4xx: 不正なリクエストのエラーステータスコード
    • 5xx: サーバーエラーのエラーステータスコード