8
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

EthereumAdvent Calendar 2021

Day 6

ブロックチェーン手品で学ぶNFTのデータ

Last updated at Posted at 2021-12-05

自己紹介

みなさんこんにちは。なんでもトークンです。
『目標:世界のすべてをトークン化』として日々トークンの開発をしています。
ブロックチェーンエンジニアとして活動しています

趣味はブロックチェーンを使った手品、ブロックチェーンマジックです。
最近は仮想通貨を持っているだけでお金が減る手品が得意です。
暴落しとる…orz
LUKSO.png

ブロックチェーンマジシャン

…気をとりなおしていきましょう。
マジックと言えばキーワードは『消失』
あるはずのアレが消えてビックリするやつです
ビックリすることを目指して、消える手品を作ってみましょう。

手品の開発

何を消してみましょうか?
ブロックチェーン上のNFTで、消してはいけないものを消してみる手品はどうでしょう……?

………今回は『サーバ』を消します!
NFTにおける画像や動画などが保存されている装置
下の図の右側ですね!
image.png

手品のネタを仕込む

さて、手品のためのネタを構築していきましょう。
まず、さきほどの図の右側のサーバを構築していきます
ひとまず、ざっくりとConohaVPSでサーバをデプロイしてみます
image.png

サーバはUbuntuにしました。
(もちろん、お仕事の場合はもっと真面目に構築してください)
image.png

ログインしました
image.png

apacheをインストールして

sudo apt update
sudo apt install -y apache2

NFT用の画像ファイルをアップロードしました

# ls /var/www/html/
image.png

そのあと、NFT用のjsonファイル(メタデータ)を作成しましょう

vim /var/www/html/nft.json
{"name":"Server Destroy Magic!",
"description":"The Server of this NFT is destroyed!",
"image":"http://118.27.108.98/image.png"}

ファイルを確認します

# ls /var/www/html/
image.png  nft.json

ブラウザで中身も見ておきます
image.png

image.png

NFTとしてデプロイ

こちらもRemixを使ってざっくりとデプロイしてしまいましょう
https://remix.ethereum.org/
image.png

中に記載したコードはこちら。
ポイントはtokenURI関数の戻り値が、先程作成したJSONファイルになっていることです。

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.2;
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";

contract MyToken is ERC721, ERC721URIStorage {
    constructor() ERC721("MagicalNFT", "MGC") {
        _safeMint(msg.sender , 1);
    }
    function _burn(uint256 tokenId) internal override(ERC721, ERC721URIStorage) {
        super._burn(tokenId);
    }
    function tokenURI(uint256 tokenId)
        public
        view
        override(ERC721, ERC721URIStorage)
        returns (string memory)
    {
        return "http://118.27.108.98/nft.json";
    }
}

さあ、デプロイしましょう(今回はRinkebyテストネットを利用)
赤色で囲ったところを選択して、オレンジのデプロイボタンを押します
image.png

1分ほど待つと、右下に🦊が出て、左下にスマートコントラクトができました。
image.png

このボタンを押すと、スマートコントラクトのアドレスを確認できます
image.png

NFTを確認しよう

次のURLでNFTを確認できます。
Ethereumメインネットの場合
http://opensea.io/assets/スマートコントラクトのアドレス/1

Rinkebyテストネットの場合
http://testnets.opensea.io/assets/スマートコントラクトのアドレス/1

なので、今回の確認に使うURLはこちらになります
http://testnets.opensea.io/assets/0xE059fD294F4C354FC1c070C77923A16414DB78b9/1
image.png

サーバを消そう

サーバを消すのは簡単です。

クラウドであれば削除ボタンを押すだけ。
他にも管理者がクラウド会社へのクレジットカード支払いを忘れる、
運営会社の倒産など、様々な理由でサーバは消えます。
image.png

消しましょう
サーバ削除ボタンを押します…
image.png

サーバがなくなりました。JSONファイルや画像のデータも参照できなくなっています。
image.png

何が起こる…?

NFTが……
消え…
image.png
消えない…!

もう画像データも、JSONファイルも、もうサーバ上に存在しないのに、なぜでしょう?
まさにマジックです!

たねあかし

OpenSeaで表示されるデータの場合…
基本的に1度読み取られた後は、
OpenSea側でキャッシュされるのです。
image.png

なので、NFTのデータが無くなってしまった後でも、
OpenSeaがひとまずバックアップを取ってくれるのですね。
さすがOpenSea、世界トップのNFT企業です!!

……もちろん、NFT事業者とOpenSeaが両方とも倒産したときには、
このような、データをサーバに保存する方式のNFTは、データが本当に見られなくなってしまいます

OpenSeaの寿命を超えるには

OpenSeaの寿命を超えるには、データの保存先をしっかりと検討しないといけません。
Pinataなどを使ってIPFSネットワークに保存する、
Arweaveストレージに保存するなどの方法があります。
そして、さまざまな仕組みを組み合わせながら、どこかの企業が倒産したり装置が故障した際に、データが消えないような仕組み作りを、しっかりと行う必要があります。

このあたりのテーマは一晩語れるぐらい沢山の論点があるのですが、この記事では省略します。
なぜなら、これは手品の記事ですので…

おわりに

ブロックチェーンマジシャンでは、ブロックチェーンを利用した手品を開発しています。
もしも、面白い手品のネタを思いついたら、この記事のコメントで教えて下さい。
ブロックチェーンマジシャンs.jpg
それでは…
Let's Blockchain Magic!

8
1
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
8
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?