katonobo’s blog

プログラミング中心の雑記ブログ

ERC721とIPFSを用いたDappsアプリの習作「トークンバトラー」をテストネットにデプロイしました。

今回、Dappsアプリの習作として「トークンバトラー」をデプロイしたので、概要などを記事にしました。

 

今回作成したDaaps

トークンバトラー

 

f:id:katonobo:20181029222242p:plain

 (トップ画面)

 

このDappsでは、IPFS(InterPlanetary File System)とイーサリアムの規格であるERC721を使い、代替不可能なトークンを生成し、自分が登録したオリジナルの画像にデジタル的な価値を付与することを目指しています。

今回は習作なのでテストネットでデプロイしており、またメインネットに移行する予定はありません。

 

次の章から具体的に説明していきます。

 

イメージはバーコードバトラー

このDappsの最初のインスピレーションは、「バーコードバトラー」というゲームから来ています。

バーコードバトラーは、商品に付いているバーコードをゲーム端末で読み取ると、そのデータからキャラクターが誕生し、そのキャラクター同士を戦わせるというゲームです。

バーコードバトラー - Wikipedia

本体に備わったスリットにバーコードの付いたカードを読みとらせ、その数値情報からキャラクターやアイテムのデータを生成し、1vs1(バーコードバトラーII2 C0では最大4人)で遊ぶゲーム。専用のカードが同梱されてはいるが、一般商品などについているバーコードを使ってオリジナルキャラクターを作ることができるというのが肝である。読ませるバーコードによって能力が異なるため、ユーザーはより“強いバーコード”を探す楽しみがあった。

バーコードの数値を読み取り、その数値に応じてキャラクターのステータスが決まるという大変発想が面白いゲームでした。

Dappsゲームの形を考える中で、画像をブロックチェーンに登録しその画像から生成される数値によって画像固有のステータスが決まればデジタル的な価値を生み出せるのではないか?と思ったところからスタートしています。

ただし、現在のイーサリアムのブロックチェーンでは、画像を直接載せることは現実的ではないため、今回はIPFSを使うことにしました。IPFSとブロックチェーンを組み合わせるのはお互いの相性が良く、比較的多く前例があります。

トークンの価値をつけるためにNFT(代替不可トークン)であるERC721の規格を使うことにしました。(ちなみ、今回のDappsアプリではトークンの生成までで、その後のトークンの売買や移転などの機能はつけていません。)

 

IPFSについては少し説明が必要だと思います。 

IPFSとは何か

IPFSとは、InterPlanetary File Systemの略で、日本語では「惑星間ファイルシステム」と訳されます。イーロンマスクもたじろぐほどの壮大なネーミングです。

コンテンツ指向型プロトコルと言われており、コンテンツのデータを暗号化し、そこから得られた固有の値をコンテンツのIDとして管理します。このIDで問い合わせた時に記録されたデータが見れるという仕組みです。

 

IPFSとは何か? :: IPFS入門

 

先ほども述べたように、このIPFSはブロックチェーン技術と相性が良いです。

ブロックチェーンに直接画像データを載せることはデータの大きさからいって現在は現実的ではありません。しかし、IPFSに画像やファイルを登録しそこから得られた値(ハッシュ値)をブロックチェーンに登録すれば、ブロックチェーンに載せるデータを小さくすることができます。

 

今回のDappsアプリの仕組みを図にしました。

f:id:katonobo:20181029211955j:plain

まずは①画像データをIPFSの載せて、②そのID(ipfsHash値)を取得します。次に③キャラクターの名前など必要な情報をまとめてERC721トークンとしてブロックチェーンに載せます。この際、このDappsアプリではDNAという形でipfsHash値を数字に変換し登録しています。

これで登録側は完了です。

閲覧者がトークンを見るときは先ほどのルートの逆で、④ERC721トークンのデータを問い合わせ、⑤データブロックチェーンからトークンの情報を取得し、⑥取得したipfsHash値をIPFSに問い合わせ、⑦画像データを表示します。 

技術的な準備

今回のDappsアプリに使っている基本的なツールは、

 フロントエンドはVue.jsとBootstrap、バックエンドはFirebase Hosting、ブロックチェーン関係では、Truffle、IPFSといった感じです。

今回のDappsでは、取得したipfsHash値を、さらに数字に変換し、DNAという形で格納しています。

コードは

DAppsの勉強として分散型Tweetサイト、DTwitterを作りました - Qiita

CryptoZombies - イーサリアム上でゲームを開発する方法を学習。Powered by Loom Network

をめちゃくちゃ参考にさせてもらいました。本当にありがとうございます。

 

GitHubにコードを載せておきます。

GitHub - katonobo/token-battler: DAppsアプリ習作 (ERC721 + IPFS )

  

参考にさせていただいたサイト・書籍・資料

qiita.com

cryptozombies.io

github.com

note.mu

 

IPFSとは何か? :: IPFS入門

  

 

 

 

引き続きDaapsアプリを作っていこうと思います。