こんばんは、技術書典Web, API担当の@vvakameです。
技術書典13の開催からかなり日が過ぎ、いまさらですが技術書典13参加記念のNFTを発行してみたいのでしました。
NFTは一般的にはまだ浸透しておらず、金銭が絡む(≒詐取などに注意しましょう)可能性があることもあり、案内のブログを書くことにしました。
ちょっと長くなると思いますがお付き合いください。
- 発行の目的の説明
- TL;DR(ブロックチェーンに明るい人向けの説明)
- NFTに関する技術的説明
- NFTの取得方法の説明
- NFTをモバイルアプリで表示するまでの説明(初心者向け)
という順番でやっていこうと思います。
発行の目的の説明
ブロックチェーンやNFTが我々技術者の話題にのぼることはあれど、実際にやったことがある人は少ないです。
そこで、筆者の技術的興味を満たすためにNFTを配ってみることにしました。
技術書典という枠を借りてではありますが、個人の実験プロジェクトに近いです。
実際に運用をしてみてどういうことになるか、正確に予測することは難しいですが、技術のお祭りの一貫として笑って楽しんでいただければと思います。
参加記念NFTがもらえる人
NFTの発行が受けられるのは、次の条件のいずれかに該当する人です。
- 技術書典13の参加(当選)サークルのオーナーである
- サークルチケットを使ってオフライン会場に入場した
- 一般入場整理券を使ってオフライン会場に入場した
- 技術書典13オフラインイベントでかんたん後払いを利用し支払いを終えた
- 技術書典13開催期間中にオンラインマーケットで本を入手した
TL;DR(ブロックチェーンに明るい人向けの説明)
EthereumのサイドチェーンであるPolygonネットワーク上で配布します。
なぜならば価格が安いので…!
技術書典13になんらかの形で参加している人はエアドロップがうけられます。
配布サイトで技術書典アカウントでログインした後、自身のウォレットを接続、UIに従ってリクエストしてください。
NFTに関わるすべての費用は運営側で負担するため、操作の途中でGAS代を含むいかなる代金も発生しません。
操作を行うと翌朝のバッチ処理でNFTをエアドロップします。
エアドロップが完了したらメールでお知らせします。
今回利用するコントラクトアドレスは0x2DA88641B7caB448E2b2Fdb9e3F22dAB1507DC7dです。
ERC1155準拠です。
ウォレットはGoogle Chrome+MetaMaskでのみ動作確認をしています。
実験的運用になりますので運営側で運用を中止したりburnしたりする場合があります。
また、利用中に発生したいかなる損害・トラブルについても責任は負いかねますので自己責任でお願いします。
利用方法に関する個別のお問い合わせには回答できません。
NFTに関する技術的説明
Ethereumと呼ばれるブロックチェーンを利用します。
Ethereumにはスマートコントラクトという分散環境で実行できるアプリケーション(dapps)がデプロイできます。
NFTを発行するコードをデプロイしてあるので、みなさんはそこからNFTを受け取ります。
NFTはNon-Fungible Tokenの略で、代替不可能なトークンと呼ばれるものです。
ブロックチェーン上の通貨はこれに対してFungible Tokenと呼ばれます。
ざっくり、混ぜたら困るものと混ぜても困らないもの、という理解でとりあえずよいでしょう。
たとえば、現実世界にたとえると金メダルはNFTに近いものです。
○○選手と☓☓選手の金メダルは、メダルという意味合いでは同じカテゴリにありますが、区別されています。
ちょっと取り替えっこしてみてよ!と言ったら両選手は怒るでしょう。
対して、日本円はNFTではありません。
100円玉5枚と500円玉1枚で両替して、もとのお金じゃなくなった!と怒る人がいないのと似ています。
今回は、技術書典13に参加してくれた人に記念としてNFTを配ってみます。
まさに、参加したよ!というメダルを貰えるイメージです。
今回はPolygonというEthereumのサイドチェーン上でNFTを配ることにしました。
Ethereum本体は必要な費用が少々お高く、遊びの範疇でやるには大変です。
今回は安価で、かつ有名なサイドチェーンとしてPolygonを選んだ形です。
具体的に、EthereumメインネットのETHは1ETH=197,000円強、PolygonのMATICは1MATIC=160円強で、100倍以上の差があります。
メインネットでやろうと思ったらゲームハード1台が余裕で買えるくらいのコストがかかります。
通常、スマートコントラクトにwriteを伴う形でアクセスすると、ガス代というランニングコストを徴収されます。
今回はスマートコントラクトへの発行依頼は技術書典側のAPIから行うため、みなさん側に費用は発生しません。
こうすることでNFTを発行してもらうために仮想通貨を調達する、という手間を省いています。
NFTを発行したらuint256の値が1つ払い出されます。
スマートコントラクトのアドレス+uint256の値で全世界的にユニークな値となります。
今回作成したスマートコントラクトはERC1155に準拠した形になります。
これは、ブロックチェーン上に記録されるため、どのアドレスがNFTを貰ったかが見た人すべてにわかる形で記録されます。
今回でいうと、技術書典13参加記念NFTを貰っているのでこのアドレスの持ち主は技術書典13に参加したのだな、とわかります。
参加したことを内緒にしておきたい人は、もらわないほうがよいかもしれません。
今回利用するコントラクトアドレスは0x2DA88641B7caB448E2b2Fdb9e3F22dAB1507DC7dです。
ウォレットはGoogle Chrome+MetaMaskでのみ動作確認をしています。
一部、Android版MetaMaskでも動作確認を行っていますが、この界隈に明るくない人はGoogle Chrome+MetaMaskで試すことをおすすめします。
実験的運用になりますので運営側で運用を中止したりburnしたりする場合があります。
また、利用中に発生したいかなる損害・トラブルについても責任は負いかねますので自己責任でお願いします。
NFTについて、色々疑問があると思うのでFAQ形式で代表的であろうと思われるものに答えていきます。
Q. NFTって儲かるの?
A. 今回の記念NFTは運営側・貰う側ともになにも儲からないと思います。
Q. NFTをもらうって、具体的に何をもらうの?
A. uint256の値を1つ払い出します。画像やメタデータなどは技術書典運営事務局が管理するサーバ上でホストされます。
Q. もらったNFTって何に使うの?
A. 特に用途はありませんし、計画していません。誰か面白い遊びを思いつく人はいるのかもしれません。
Q. NFTを貰うとみんなにそれとわかるの?
A. Ethereum上のすべてのデータは公開されているので、どのアドレスがNFTを貰ったかはわかります。アドレスと持ち主が紐付けできるかはわかりません。
Q. NFTをもらうのってお金がかかるの?
A. 今回の我々の設計では不要です。スマートコントラクト上のデータを操作しようとするとお金がかかりますが、その部分は我々のAPI側から行います。
Q. NFTをもらうのには何が必要ですか?
A. Ethereum用のウォレットが必要です。貰うのは比較的簡単ですが、もらったNFTを表示するのは結構面倒です。
Q. ウォレット上でネットワークの追加や切り替えを要求されました。
A. Polygonネットワークの追加と切り替えなので、内容を確認した上で要求に応えてください。
Q. 操作していったらなにかの署名を求められました。
A. Ethereumのアドレスをあなたが本当に所持しているか確認するためのものです。固有のテキストに署名してもらい、API側で署名を検証しアドレスを確認しています。
Q. NFTをもらったけど、この画像を好きにしていいってことですか?
A. NFTのアートワークに使われている画像のなんらかの権利が与えられたわけではありません。常識の範囲でお願いします。物理本配送の梱包材のようなものだと思ってください。たとえば「技術書典13 参加記念NFTもらった!」という喜びの声を画像付きでツイートしても構いません。
NFTの取得方法の説明
配布サイトで技術書典アカウントでログインした後、自身のウォレットを接続、署名してリクエストしてください。
ここでは、PC版Google ChromeでMetaMask(Ethereumウォレット)が入っていない状態からの操作を説明します。
配布サイトにアクセスする
配布サイトにアクセスしてください。
注意事項を読み、同意する
NFTを配布するにあたり注意事項がいくつかあるので確認してください。
実験的なものなので注意してね、という主旨です。
確認後、問題なければ注意事項を理解した上で同意する
を押してください。
技術書典アカウントでログインする
https://techbookfest.org/で使っているメールアドレスとパスワードを入力してください。
技術書典はIDPを(まだ)持ってないのでOAuth 2とかでかっこよく連携はできないのでした。
ログアウト
と表示されていた場合は、既にログイン済みですので、このステップはスキップして構いません。
Setup Wallet を押す
Setup Wallet
を押してください。
MetaMask(Ethereumウォレット)がインストールされていない場合、Chrome拡張のMetaMaskのインストールが案内されます。
インストールする過程でシークレットリカバリーフレーズの扱いなどについて説明があるので、読み飛ばさないほうがよいです。
MetaMaskで、NFTを受け取るための新規ウォレットを作成してください。
指示に従って操作していけばセットアップが完了するはずです。
Connect Wallet を押す
Ethereumウォレットの機能にアクセスできる必要があります。
再び技術書典NFT特設サイト(https://nft.techbookfest.org/)を開いて、今度は Connect Wallet
を押してください。
MetaMaskを使用して接続
と表示されたら、先ほどウォレットを作ったアカウントを選択して 次へ
を押します。
どういった権限がサイトに許されるか説明があります。
しっかり確認しましょう。
アドレス、アカウント残高、アクティビティを表示してトランザクションを開始
と書いてあるはずで、ユーザの許可なく費用が発生する操作をしたり残高を移動したりはできないことがわかります。
問題なければ 接続
を押してください。
ネットワークを切り替える を押す
デフォルトではEthereumメインネットであるChainID 1がMetaMask上で選択されています。
今回はPolygonを使うので、ChainID 137に切り替える必要があります。
ネットワークを切り替える
を押してください。
MetaMaskはChainID 137を初期設定では知らないので、 このサイトにネットワークの追加を許可しますか?
というダイアログを出します。
これはサイト側から指定されたネットワークの設定なので、内容が不当なものではないか確認する必要があります。
通常、MetaMaskが把握している情報と食い違いがある場合、ダイアログ上に警告が出ますので、それがないことを確認すればとりあえずは問題ないでしょう。
チェーンIDが137であることを確認し、ネットワークの内容に問題がなければ 承認
を押します。
ついで、MetaMask上で選択されているネットワークを切り替える旨の確認が出るので ネットワークを切り替える
を押します。
Ethereumアドレスの登録 を押す
技術書典NFT特設サイトに表示された Ethereumアドレスの登録
を押してください。
MetaMask上でサイトから提示されたメッセージに署名するかどうか確認されます。
ここでは、技術書典でのユーザとEthereumアカウントを紐付けるため、固有の情報が含まれたメッセージが提示されています。
メッセージに署名すると、技術書典Webサイト側ではログインセッション+Ethereumアドレスに紐づく秘密鍵による署名によって、2つを紐付けることができます。
内容に問題がなければ 署名
を押してください。
一般的に任意のメッセージへの署名は慎重に行ってください。
Ethereumアドレスの秘密鍵を用いた署名は”秘密鍵所有者の同意”を意味します。
技術書典参加記念NFT発行をリクエストする を押す
これで記念NFTをもらう準備ができました。
技術書典参加記念NFT発行をリクエストする
を押してください。
リクエストが通れば翌朝にはNFTが発行され、通知メールが来るはずです。
ご参加ありがとうございました!
発行後、特設サイトを見ると詳細を確認することができます。
モバイルアプリ版MetaMaskでNFTコレクションとして表示することにも挑戦してみてください。