Symbol でも NFT を作ってみたいんですが、実装はできるだけシンプルにしたい!何か良い方法はないものでしょうか。
3年前の書き出しを、現代ナイズしました。
NIS1で既に行われているのだから、Symbolノードでやらないってほうが不自然でしょう。
ということで、かねてよりやりたそうな顔をしていた有識者 たべさらに声をかけて全面的に協力してもらうことにしました。企画立案から、実装までお付き合いいただけるようで感謝しかありません。
何する
Symbol NFTをもっと身近に。
要するに私がしたいことはトレストさんがすべて言ってくれています。
乾坤一擲の絵をNFTするのもいいですが、スマホで撮った日常の写真がNFTになる、それをSymbolが担うのはいかがですか。という提案です。
ということで、皆さんの手元にある、スマホでNFTをSymbolで実現するにはどうすればいいか、を考えてみました。
設計してみた
フルオンチェーンのNFT 軽く実装を考えてみたら、びっくりするほど簡単に出来そうでした。正直何も難しいことはありません、誰でも作れます。少なくともSymbolにおいては。
ざっとフローを書き出してみます。
- 画像をエンコードする
- それらをトランザクションのメッセージに詰め込む、その際にアグリゲートトランザクションを用いることでトランザクションの内容をまとめる
- 作成したアグリゲートトランザクションを秘密鍵を放棄したアカウントに送る
- 新規でモザイクを発行する
- 発行したモザイクのメタデータに、放棄したアカウントのアドレスを書き込む
以上です。あれ、もしかしてUI/UX拘って作ったとしても5営くらいで出来たりしない…?
下にそれぞれ補足します。
1 画像をエンコードする
テキスト形式でデータを扱う場合には一般的なエンコード形式である Base64
を用います。
先人の知恵に感謝。
2 アグリゲートトランザクションに内容をまとめる
仕様は適当に策定予定ですが、要するにPlainMessageに先ほどエンコードしたBase64形式の画像データをぶち込みます。そしてそれらをアグリゲートトランザクションにまとめます。
オンチェーンNFTでアグリゲートトランザクションを使う利点は2つほど。
- トランザクションの順番の担保
- すべて成功するか、すべて成功しないか、のどちらかしかない
という点です。
3 秘密鍵を放棄したアカウントにトランザクションを実際に送る
秘密鍵を放棄したアカウントに先ほど作成したアグリゲートトランザクションを送ります。
こちらのアカウントのアドレスがデータを持つことになるので データアドレス
と呼ばれるものになります。
オンチェーン上のデータを保有している大事なアカウントです。
Txを飛ばしたりしないように秘密鍵を放棄します。
4,5 モザイクの発行
先ほど作ったデータアドレスのアドレス情報をメタデータに書き込んだモザイクを作成します。
期限や総発行量、初期供給量は用途に合わせて生成します。当然、ユニークなものにしたければ無期限、発行供給はともに1というものになるでしょう。
アプリと組み合わせる
さて、ここまででNFTは完成しました。
早速アプリを作っていきましょう。
とはいえ、今クライアント側にはSDKがないのでFlutterで両OSゼロから作るのは億劫…。ということでTxの作成はサーバーサイドにぶん投げましょう。
整理します。
クライアント側に要求するのは以下です。
- 画像データの送信
- アグリゲートトランザクションに署名
- モザイク作成トランザクションに署名
- 画像表示(デコード)
- Symbolアカウントの管理
- 使いたくなるUI/UX(一番大事)
一方でサーバーサイド側に要求するのは以下です。
- 画像の受け取り
- Base64形式でエンコード
- アドレスの作成、秘密鍵の放棄
- アグリゲートトランザクションの作成
- モザイク作成トランザクションの作成
これだけです。サーバーサイドにDBすら持つ必要がありません。
Symbolアカウントの管理をせずに秘密鍵をベタ打ちするような仕様にすればストアにすら上げられそう。
作る
ということでそのうち一緒に作っていきます。
なんかハッカソンが行われるようなのでそれに合わせて作れればいいな。
それまでに誰かが作ってくれても全然いいです。僕たちのほうがいいモノ作るので、ぜひ争いましょう。
フルオンチェーンNFTを作るのは簡単です。
それをしたうえで何をするか、をもっと考えたほうが建設的ですね。