LoginSignup
1
0

More than 1 year has passed since last update.

NFT はもうよく聞いていると思いますが、今年からはおそらく「転送不可な NFT」というお話も聞いたことがあると思います。
この辺の試みの1つ NTT についてちょっと紹介したいと思います。

NTT:転送不可な NFT

NTT は、もちろんあの企業のことではありません。「Non-Transferable Non-Fungible Token」もしくは「Non-tradable Token」の略語であり、「転送不可のNFT」のことです。
NFT または ERC 20 などのトークン系は、取引をメインの目的としていますが、取引ではなく、バッジまたは卒業証書・オンライントレーニング修了証のようなものでしたら、そもそも取引というか、転送の必要もないので、このような提案が上がられました

ERC 1238 github issues

Non-transferable tokens
Simple Summary
A badge is a token that once assigned it cannot be transferred. Badges can be accumulated through time and put at stake. Simply speaking, badges are statements about a public key, they can be quantitative (e.g. reputation, experience) or qualitative (badges, titles).

  • 2018 年 7 月提案され、バッチにフォーカスしている内容になります
  • 正式な EIP プロセスにのってないので、実際どの段階まで議論できたかは分かりませんが、 Pull Request 自体は既にクローズされています

EIP-4671: Non-Tradable Tokens Standard

A standard interface for non-tradable tokens, aka badges or souldbound NFTs.

  • 2022 年 1 月に「取引不可トークン」として提案され、現時点ではステータスがまだ Draft です。
  • 「大学の卒業証書、オンライントレーニングの修了証、政府発行の書類(国民ID、運転免許証、ビザ、結婚式など)、ラベルなど、本来は個人所有のもの(物質・非物質)を表します。」ように NTT を定義しています。
  • 上記の目的であるため、設計としては
    • 1つのコントラクトで単一の書類を管理することになります。
    • 削除・転送はできないが、管理ロールは、書類を発行・無効にすることができます

他の実装方法

できるだけ ERC721 / ERC1155 との互換性を守りたいため、既存の規約を拡張するやり方もあります。
OpenZeppelin Contracts v3.0.0 から新しい機能として openzeppelin hooks 仕組みを導入されています。
転送系の処理(_mint / _transfer / _burn) に全部処理の最初にこの hook を呼び出しているため、ここで拒否すれば「転送不可」の意図は実現できます。

function _beforeTokenTransfer(
    address from,
    address to,
    uint256 tokenId
) internal pure override {
    // mint の場合のみは許可する
    require(from == address(0));
    ...
}

まとめ

バッチや政府発行の書類など、取引目的ではない場合、転送不可 NTT を使いたいが、どう実装すべきかは迷いますね。
似ている概念として SBT もあるので、また紹介します。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0