ContractGate
トークン管理情報について
NFTマーケットプレイスを彩るアートやゲームなどで使われるNFTのパラメータですが、
これらはコントラクトからtokenURI() という関数を使用して表示するようになっています。
OpenSeaなどに表示される画像は以下のような流れで取得されています。
実際に画像が取得されて表示されるまでの流れは以下の通りです。
画像やパラメータなどのデータを、すべてブロックチェーン上に格納するとトランザクション手数料が上がってしまいます。
このため、ある資産 (トークン) のための明確な統一資源識別子 (URI) をトークンごとに設定し、
ブロックチェーン「外」からトークンに関する管理情報 (Metadata) を取得して利用します。
これらの情報は、自身のシステムやクライアントアプリ側で利用する他に、
対象の資産を外部サイト (OpenSeaなど) で取り扱う場合にも参照されることがあります。
このトークン管理情報を取り扱うためのERCや標準的な規格について、簡単に紹介します。
【目次】
ERC-721 Non-Funginable Token (NFT) におけるMetadata (メタデータ)
もっとも利用されているであろうERC-721のERC上では、以下のようなインターフェースが定義されています。
interface ERC721Metadata { function name() external view returns (string _name); function symbol() external view returns (string _symbol); function tokenURI(uint256 _tokenId) external view returns (string); }
ここから取得できるURIからJSONを取得することになります。 ただし、ERC721で規定されているJSONスキーマの情報は以下の3つのみです。
image | このNFTが表すアセットを表すMIMEタイプimageのリソースを指し示すURI。 画像は、幅320〜1080ピクセル、アスペクト比1.91:1〜4:5が推奨。 |
description | このNFTが表す資産の概要。 |
name | このNFTが表す資産の名称。 |
ERC-1155 Multi Token StandardにおけるMetadata
ERC-1155では複数のタイプのトークンを管理する関係上、より拡張されたJSONスキーマが定義されています。 追加されているのは以下の3つです。
properties | 任意のプロパティ。値は文字列、数値、オブジェクト、配列のいずれでもよい。 |
decimals | トークン量を表示する小数点以下の桁数。 例えば18の場合、トークン量を1,000,000,000,000,000,000で割ってユーザー表示にすることを意味する。 |
localization | トークン詳細情報の内容を言語によって分ける際に使用する。 |
propertiesは自由度が高い設定項目ですが、以下のようなデータを格納します。
localizationは、言語ごとにuri() で取得したJSONデータの属性を上書きするようなファイルを作成しておき、 ブラウザ側の言語設定などによって言語切替が可能なようにデータを定義します。
またERC20では、トークンコントラクト全体の設定であったdecimalsは、1つのコントラクトで多数のタイプの トークンを取り扱うERC-1155の性質上、コントラクトで管理する値からMetadata側で管理する値に扱いが変わっています。
ERC-4906 Metadata Update Extension
ERC-4906はmetadata本体の定義ではなく、 各NFTマーケットサイトなどでキャッシュしたメタデータを更新するかどうかを判定するためのSolidityイベント定義です。 OpenSeaなどは手動でmetadataの更新を指示することも可能ですが、 本イベントの発行を検知してmetadata部分の更新を行います。
OpenSeaにおけるmetadata標準
メタデータ標準:
https://docs.opensea.io/docs/metadata-standards
NFTオープンマーケット大手のOpenSeaでは、
ERC標準に定められていない追加のプロパティを受けつけられるようになっています。
サイトの表示に直結したいくつかの属性が存在し、
ある程度の範囲で任意に対象のトークンに対する情報表示のカスタマイズが可能です。
image | アイテムの画像へのURLです。 あらゆる種類の画像 (SVGを含む。OpenSeaによってPNGにキャッシュされる) を使用でき、 IPFS URLまたはパスを使用できます。 350 x 350 の画像を使用することをお勧めします。 |
image_data | その場で画像を生成したい場合 (非推奨) SVGの生画像データです。 imageパラメータを含まない場合のみ使用します。 |
external_url | OpenSea上のアセットの画像の下に表示されるURLです。 ユーザーがOpenSeaを出て、あなたのサイトでアイテムを見ることができるようにします。 |
description | 項目に関する人間が読める説明文です。 Markdownがサポートされています。 |
name | アイテムの名前です。 |
attributes |
アイテムの属性で、アイテムのOpenSeaページで表示されます。 (下記、「図5 OpenSea独自属性とWeb画面への反映」参照) |
background_color | OpenSea上のアイテムの背景色です。 6文字の16進数で、プリペイドの「#」を含まない形式で指定します。 (例:FFFFFF, 66B0EF) |
animation_url | アイテムのマルチメディア添付ファイルのURLです。 ファイル拡張子 GLTF、GLB、WEBM、MP4、M4V、OGV、OGG に加え、 音声のみの拡張子 MP3、WAV、OGA がサポートされています。 Animation_url は HTMLページもサポートしており、 JavaScript canvasやWebGLなどを使用したリッチな体験やインタラクティブなNFTを構築できます。 スクリプトとHTMLページ内の相対パスがサポートされるようになりました。 ただし、ブラウザの拡張機能へのアクセスはサポートされていません。 |
youtube_url | YouTubeの動画へのURLを指定します。 |
まとめ
NFTマーケットプレイスを彩るアートやゲームなどで使われるNFTの画像やデータを、
ブロックチェーン「外」からトークンに関する管理情報 (Metadata) として利用します。
-
ERC-721 Non-Funginable Token (NFT) におけるMetadata
ERC-721で定義されているインターフェースで取得できるJSONスキーマの情報は、 image, description, nameの3つです。 -
ERC-1155 Multi Token StandardにおけるMetadata
複数のタイプのトークンを管理するため、JSONスキーマ情報として properties, decimals, localizationが追加されます。 -
ERC-4906 Metadata Update Extension
各NFTマーケットサイトなどでキャッシュしたメタデータを更新するかどうかを判定するための Solidityイベント定義です。 -
OpenSeaにおけるmetadata標準
NFTオープンマーケット大手のOpenSeaでは、ERC標準に定められていない追加のプロパティを 受け付けるようになっています。
NTTテクノクロスでは、このようなブロックチェーンを活用したビジネスの検証サービスとして ContractGate PoC Service PUSH! をご提供しております。
執筆者紹介
兼松 和広(かねまつ かずひろ)
高度専門人材 / テックリード
2002年NTTテクノクロス(旧NTTソフトウェア)に入社。
さまざまなシステム開発や保守運用を担当しながら、データベースの専門家として
技術支援や研修講師を担い、数々の表彰を受賞。
2015年からブロックチェーンやweb3についての自らの知見や技術力を活用し、
多くのプロジェクトに参画。
2023年に高度専門人材として社内で任命される。
ブロックチェーンの団体であるEthereum Enterprise Alliance Japanのイーサリアム性能評価ワークショップに参加し、
ブロックチェーンのビジネス利用に必要な性能評価観点【ETHTerakoya × Blockchain EXE 】の発表等も実施。
日々、専門性を高めるべく自身を磨き続けている。
ContractGate製品についてのお問い合わせ、ブロックチェーン導入にあたってのご相談など
お気軽にお問い合わせください。
「5分でわかるシリーズ」
ホワイトペーパーのお申し込みはこちらです。