+++ date = "2022-05-25" tags = ["nft"] title = "nftをやってみた" slug = "nft" +++ ### nftとは nftを理解するには、まず仮想通貨から理解する必要があります。 あくまで仮想通貨の個人理解を説明します。 あまり詳しくないので、間違っているところはあるかもしれませんが、気になる方は自分で調べるようにしてください。 #### bitcoin 仮想通貨には、bitcoin, ethereumなどがあります。nftでは主にeth(ethereum)が利用されているようです。 仮想通貨の本質は、ブロックチェーンではありません。 なぜなら、人々がブロックチェーンを求め、ブロックチェーンを欲しがったとは思えないからです。 では人々は何を求めていたのでしょう。 人々が求めていたのは、自分で銀行口座を作ったり、口座から送金や振込みを自分で行えることだったのではないかと思います。 それを実現するのが仮想通貨でありブロックチェーンだったというわけです。ブロックチェーンが欲しかったわけではありません。 今までは銀行に頼むことでしか、これらのことは行なえませんでした。銀行に書類を提出し、審査を通ることでしか口座を作ることはできなかったし、送ることも振り込まれることもできなかった。 世界中の国々では政府や銀行が腐敗しているケースも多く、市民が手軽に口座を開設できないような場合も多く存在しています。 そんな中、仮想通貨は、今まで銀行に頼むことでしか作れなかった口座や送金、振込を可能にしました。 これを可能にした技術がブロックチェーンであり、ブロックチェーンというのは、簡単に言うと改竄が困難な台帳のことです。 お金の流れは全て共有される台帳に刻まれます。これによって、銀行が行っていた業務を個人でも行えるようになりました。 #### nft nftとは、このブロックチェーンを何かしらのコンテンツ情報と紐付けることで、その所有や唯一性、検索性、履歴性を担保しようとしたのだと思います。 この仕組みが一般化するかはわかりません。 しかし、例えば、今までにあった美術品などの問題は一部で解消される余地があるかもしれないと個人的には思っています。 美術品の価値、及び所有や作者の問題は、関係者を悩ませる問題でもありました。 これは本当にゴッホの絵なのかどうなのか、あるいは、ゴッホの絵に数億の価値は本当にあるのだろうか、絵の真の所有者は誰なのだろう、ゴッホの絵は作者が死んでから価値が出たけど(それまでは無価値だった)なぜだろうとか。 このへんの話をすると長くなるので割愛しますが、nftは、今までの美術品に取って代わるものとして期待されている側面があるのかもしれません。そんな風に感じています。 次に、現在のnftを構成する要素をいくつか説明します。 #### opensea https://opensea.io まずはマーケットです。 openseaがそれにあたります。マーケットでは、主に、ブロックチェーンに書かれた特定のmetadataフォーマットからコンテンツを表示します。ここでは所有権を売買できるようです。 #### metamask https://metamask.io 次にウォレットです。metamaskが有名です。新しい認証の仕組みで公開鍵と秘密鍵を使った認証を行います。 ethでの支払いやtestnetを使う際にもウォレットでの認証を経なければなりません。ウォレットは署名の役割も担います。 #### eth https://ethereum.org 仮想通貨のethereumの略で、nftでは、ガス代などの支払いにethが使われます。マーケットに出品する場合は、mintしなければならず、その処理に必要です。 ガス代を使わないようにする場合は、openseaのtestnet上で独自コントラクトを接続する方法があります。 この際、metamask-rinkeby(testnet)でtest用のethを使います。 test用のethは[こちら](https://faucet.rinkeby.io/)からもらえます。例えば、mintする際にrinkebyのtestnet(eth-address)を指定してください。 #### openzeppelin https://wizard.openzeppelin.com 自分でブロックチェーンのネットワークにdeployすることを独自コントラクトといいます。 もちろん、マーケットもコントラクトを持っていますが、それを使用すると、nftのowner(所有)はマーケットになり、口座もマーケットとの共有になります。 ですから、自身のowner権限で`metadata.json`を発行し、自身の口座を指定したい場合は、独自コントラクトしたものを(接続)する必要があります。 この際にも当然、ウォレット認証や署名が必要になってきます。 独自コントラクトを立ち上げるなら、openzeppelinが便利です。`trufflesuite`もおすすめらしい。 https://trufflesuite.com ### 実践nft 今回は、openseaのtestnetと独自コントラクトを接続し、画像をマーケットに置くまでをやってみます。 まず、[openzeppelin](https://wizard.openzeppelin.com)でテンプレート(コード)を書きます。といっても、基本的に`openzeppelin`で吐かれたコードをそのまま使用しても動作します。 `erc721`を選択して、baseuriを設定します。これは画像urlと同じドメインを指定するようにしてください。baseuriにはwebに置いたmetadata.jsonを指定します。 例えば、`example.com/meta/0`にjsonファイル、`example.com/test/0.jpg`に画像ファイルを置きます。 - baseuri : `https://example.com/meta/` - metadata : `/meta/0` ```json { "tokenId": "1", "name": "test 1", "description": "test NFT", "image": "https://example.com/test/0.jpg" } ``` - file : `/test/0.jpg` `Open in Remix`ボタンをクリックして、`remix`を起動します。`remix`はIDE(web)です。 この`remix`で先程のコードをcomplileします。 その後、deploy(ethアイコンのやつ)するわけですが、ここではまず、envでweb3(injected)を選択して、metamask(rinkeby)のeth-addressとリンクします。これはtestnetのものを使用します。 ![](https://raw.githubusercontent.com/syui/img/master/other/nft_metamask_rinkeby_testnet_0004.png) contractに先程作ったmetadataを参照します。ここでは`MyToken`という名前になります。 ![](https://raw.githubusercontent.com/syui/img/master/other/nft_metamask_rinkeby_testnet_0001.png) `deploy`ボタンを押すと、しばらくして詳細が出てきます。そこにある`safemint`にrinkeby-testnetのaddressを入力し`safemint`ボタンを押します。 ![](https://raw.githubusercontent.com/syui/img/master/other/nft_metamask_rinkeby_testnet_0003.png) これでopensea-testnetで独自コントラクトが参照され、画像が表示されます。 https://testnets.opensea.io/syui openseaの本番マーケットに出品する場合、ガス代をethなどで支払う必要があります。これはmintしたときに必要になります。 わざわざ独自コントラクトを作って接続する理由は、(1)自身のowner権限で`metadata.json`を作成できること、(2)自身の口座を設定できることです。 ### nftやweb3は流行るのか nftやweb3は流行るのか、一般化するのかについて、個人的な考えを書いていきたいと思います。 ここではweb3に統一して書きますが、web3が流行るのかどうかについては、私にはわからないということです。 web3は絶対に流行らない、一般化するわけがない、web3は詐欺であり、よくないものだ。web3はダメなものだ、胡散臭いと言われているのを私は知っています。 確かに、そういった側面もあると思います。 しかし、よく考えてみてほしいのですが、例えば、ゴッホの絵にどれほどの価値があるのでしょうか。 多くの一般人にとって、ゴッホの絵に価値などありません。 というのもゴッホの生前には言ってみれば価値はありませんでした。いくらでも安く買えたような代物で、もしかしたらタダでも手に入ったかもしれません。 しかし、長い年月を経て、作者が亡くなってから、有名になり、ゴッホの絵の価値は上がりました。 これを詐欺だ、胡散臭い、絶対におかしい、無価値だなんて言いません。 物の価値というのは、一概には言えないところがあります。その将来においての価値というのは、評価が難しい。評価不能と言ってもいいでしょう。 それを前提にnftにもそういったものが今後出てくるかもしれません。nftを買う人の中には、そういった流れを見越して買っている人もいるかもしれません。 これについては様々な意見があるものの、最も多い意見としては、詐欺だ、あんなものに価値はないという意見です。その気持ちもわかりますが、個人的には、どうなるかはわからないと思っています。先程述べた理由からそんな風に考えている。 次に話していきたいのは、流行や一般化についてです。 人間の歴史を見ていくと、流行や一般化したものについては、実に奇妙な経緯をたどります。 今で言うGAFAですが、googleやapple, microsoftやamazonなども当初行っていた事業は、実は虚業のようなものだったりします。 例えば、microsoftが作りはじめたosですが、当初は、技術からおもちゃだと笑われ、実際にもバグだらけで不良品、欠陥品でした。 当初は、あんなものが流行って、一般化するとは考えられませんでした。今のようになっているとは、誰も考えていなかったのです。当時の意見を見ると、そんな感じでした。 ですが、タイミングが良かったのか、継続性によるものなのか、わかりませんが、その後、奇妙な経緯をたどって現在の形に進化することになります。 何が言いたいのかというと、ある事柄がどのような経緯をたどり、広がりを見せ、あるいは進化していくのか。それを予測することは難しいということです。 とても一般化するとは思えない規格が、その後、一般化して現在でも使われている例を、私はたくさん見てきました。 web3も同じで、これがどのような経緯をたどり、広がりを見せるのか。将来的に当たり前のように使われているものなのかどうなのか。逆に世間的な意見が的中して廃れているのか。それはなかなかにわからないところがあります。 なので私は、web3やnftのdis(ディス)ばかりずっとやっている人を見ても、like(いいね)している人を見ても、特に思うところはありません。 どちらの言い分もおおよそ正しいのではないでしょうか。 そんな感じなので、私はnftに対して特別な拒否感はありませんし、逆に期待もしていません。 今回は、とりあえず、面白そうだったnftを触ってみようということで、触ってみることにしました。 触ってみた感想は、なかなかに面白いものなんじゃないかなって思いました。以上です。