上記記事は、「トークン名はサブネームスペースに定義して、固有パラメータはモザイク名に定義すればいい」として、NEMでのNFTの作り方を提案されています。
NFTとはなんなのかというと、たとえば
- 整数単位の猫トークンがある
- トークン1単位にはそれぞれ固有の猫遺伝子情報をつける
ようなものです。
ですが上記qiitaの記事の筆者さんと話していて、一番良さげなNFTの作り方を考えました。
とりあえず、今まで出てきたNEMでのNFTのつくりかたをまとめます。
パラメータモザイク名型
上記qiita記事と同様です。
メリット
- 後述のアカウント型と違って他のアセットと同じように管理できる
デメリット
- 64バイト(圧縮したらもうちょいいける)のデータサイズ制限がある
マルチシグアカウント型
連署名者1つだけのマルチシグアカウントをつくり、それをNFTとみなします。
メリット
- モザイク作成料がかからない
デメリット
- ほかのモザイクと同様に管理ができない
アセット名ハッシュを秘密鍵にしたアドレスへのメタデータ送信型
いい名前思いつかん。すまん。
“namespace:mosaic”のハッシュ値を秘密鍵として導出したアドレスへのトランザクションのメッセージで固有データを設定する方式。なんかnem2-sdkの周辺ライブラリ的な感じで作られてるっぽいです。
メリット
- 他のアセットと同じように管理できる
デメリット
- 開発者側としてかなりややこしい
そこで提案。
アドレスモザイク名型
まず、あるネームスペース”namespace”のサブネームスペースとして、アセットの名前をつけて登録します。
“namespace.name”
具体例としては、cat-collection.catみたいな。
今度は、新規に今から使うアドレスを生成します(秘密鍵は捨てていい)。そしてそのアドレスがモザイク名となるモザイクを作成します。
“namespace.name:nxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx”
cat-collection.cat:nxxxxx…みたいな。
そして、アドレス”NXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX”に対し、固有のパラメータを表す転送不可モザイクを送ります。
NXXXXX…に対し、cat-collection.hair:brownを送るとか。
メリット
- 他のアセットと同じように管理できる
- 開発者側としても、モザイク名をハッシュ化するなどといったややこしいことをしなくていいので、直感的である
- ひと目でNFTだとわかる
これならNFTライブラリなんかもいらないし、かなりいいんじゃないですかね。