クリエイターに自信を持って意図する特徴を持った NFT を作成して欲しいと思い書いてみました。
いずれ環境が整備されて、クリエイターは技術の詳細を知らなくても適切に NFT を作成できるようになると思います。しかしながら現時点では、クリエイターがある程度、NFT の技術について知る必要があると思います。
なお、ここでは作成する NFT がどのような特徴を持つべきかについて言及しません。私はクリエイターが意思を持って任意の NFT を作成できれることが望ましいと考えます。
NFT は非常に広範に用いられる言葉ですので、本稿では NFT を Ethereum(あるいは Ethereum と互換性のある) ブロックチェーンに展開された ERC-721 (あるいは ERC-1155)に準ずるスマートコントラクト(以後、コントラクトと記載する)に記述されるトークンのこととします。これらのトークンのユーティリティは多岐に渡りますが、ここではさらに、NFT をイラストなどのデジタルコンテンツと紐づけて売買することを想定しています。
一般に一つのコントラクトには複数の NFT が記録されます。Alice がある NFT を所持することは、その NFT が記録されたコントラクトに Alice がその NFT を持っていることを記録することです。このとき、ブロックチェーンに情報を記録するため、トランザクションを発行します。
ERC-721 や ERC-1155 はコントラクトの規格を表す言葉です。クリエイターにとっては、ERC-1155 は複数の同一のNFTを作成しやすいが、ERC-721 は少しめんどくさいことを知っておくとよいと思います。なお、OpenSea の共用コントラクトは ERC-1155 を準拠します。ERC-721 の方が実装はシンプルなので取り扱いやすく、トランザクション費用も抑えられます。
トランザクションの発行は有償です。特に画像・音楽・動画といった非常に容量の大きいコンテンツを扱う場合は高額な費用が必要です。そのため NFT にコンテンツそのものではなくメタデータへの参照を記録します。メタデータは文字列であり作品のタイトルや説明とともにコンテンツへの参照を記述して、NFT とコンテンツを結びつけます。
なお、本稿では取り扱いませんが、Full on-chain NFT といった名称の NFT はメタデータにコンテンツそのものを記述します。
クリエイターは NFT の作成方法によって、
NFT
メタデータ
コンテンツ
の永続性と非改竄性が異なることを理解してください。ただし、NFT およびコンテンツの永続性や非改竄性を得るには相応のコストがかかることに留意してください。
ブロックチェーンに展開されたコントラクトは、そのブロックチェーンが持続する限りにおいて永続性があります。クリエイターができるだけ永続性の高い NFT を発行したいのであれば、できるだけ永続性の高いブロックチェーンを選ぶ必要があります。未来のことは誰にも分かりませんが、Ethereum のノードは世界中によく分散しているので今後も持続すると期待されます。したがって、現時点では Ethereum を選択するとよいでしょう。
また、NFT の非改竄性はコントラクトによって異なります。コントラクトによってはメタデータを書き換えるものや、所有者を替えるものも存在し得ます。クリエイターが独自コントラクトを利用する場合は、そのコントラクトの仕様が意図するものであるか注意してください。
メタデータやコンテンツの保存方法はプロジェクトごとに異なりますが、ここでは一般的な二つの方法を紹介します。OpenSea の共用コントラクトを利用する場合も以下の二つの方法のいずれかを選びます。
NFT に限らず何らかのコンテンツをインターネットを介して公開するためには、コンテンツをサーバーに保存します。そのコンテンツの保存場所は URL で表現され、その URL を他人と共有することでコンテンツを共有します。この方法でコンテンツを保存する場合は、メタデータにコンテンツの参照として URL を記述します。(たいてい NFT にメタデータの参照として URL を記録します。)

あるコンテンツはそのコンテンツを保存するサーバーが持続する限りにおいて永続性があります。また、そのコンテンツの非改竄性はサーバーの管理者に委ねられることになります。
OpenSea 共用コントラクトの場合は NFT を freeze しない場合に採用される方法です。
一方で、IPFS はコンテンツを 0以上の複数のノードに保存します。他人とコンテンツを共有する場合は、コンテンツから一意に決められる CID という値を共有することでコンテンツを共有します。この方法でコンテンツを保存する場合は、メタデータにコンテンツの参照として CID を記述します。(たいていNFT にはメタデータの参照として CID を記録します。)

この方法では、コンテンツがどのノードに保存されていても CID の値は変わらないので、そのコンテンツは IPFS 全体が持続する限りにおいて永続性があります。また、仮にコンテンツを改竄すると CID そのものが変化していまうことから、コンテンツには非改竄性があるといえます。
クリエイターができるだけ永続性と非改竄性のある NFT を発行したいのであれば、IPFS にコンテンツを保存するとよいでしょう。ただし、あなたのコンテンツをいずれのノードも保有しない場合、そのコンテンツにアクセスすることはできなくなります。IPFS ノードはあなたのコンテンツを保持するインセンティブがないため、何らかの方法で IPFS ノードにコンテンツを保持し続けてもらう必要があります。IPFS にコンテンツを保存する場合、クリエイターはそのオリジナルのコンテンツをバックアップしてください。オリジナルのコンテンツの CID の値は不変なので、仮にあなたのコンテンツを保持する IPFS ノードがすべて無くなっても、別のノードにコンテンツを保持してもらえばよいからです。
OpenSea 共用コントラクトの場合は NFT を freeze する場合に採用される方法です。

よくある誤解について Q&A のスタイルでまとめてみました。
Q1. メタデータとコンテンツが IPFS に保存されていれば NFT は改竄されない?
A1. NFT の非改竄性はコントラクトによって異なります。NFT に記載されたメタデータやメタデータの CID そのものを書き換える NFT も存在します。コンテンツは改竄できませんが、NFT に紐づくコンテンツが書き換えられる可能性があります。
Q2. コンテンツを Centralized な方法で保存するメリットは?
A2. 例えば、意図的にコンテンツを変化させることができます。また、IPFS に保持するよりも安価にコンテンツを保持できる可能性があります。
Q3. Frozen マークがついていれば、コンテンツは IPFS に保存されていると判断できる?
A3. OpenSea 共用コントラクトの場合はそう判断できます。独自コントラクトの場合は判断できません。Frozen マークがついていなくても IPFS に保存されている可能性がありますし、Frozen マークがついていても Centralized な方法で保存されている可能性もあります。
Q4. IPFS ネットワークのコンテンツを閲覧する方法は?
A4. 一般的なブラウザを使用して CID だけからコンテンツを閲覧することはできませんが、IPFS Gateway を利用して閲覧することが可能です。(例えば、Foundation では ipfs.io という IPFS Gateway が使用されています。)

国内の独自コントラクトの多くは、コンテンツやメタデータを IPFS に保存しているにもかかわらず、IPFS Gateway を経由する URL を記述しています。この方法は単一の IPFS Gateway に依存するためベストな方法ではありません。独自コントラクトを展開するクリエイターは、そのコントラクトの仕様をよく検討してください。(IPFS への参照は ipfs:// から始まります。)
