Ethereum上に初めてのDappを作ってみる

先日スマートコントラクトの勉強をしたので、今度は実際のネットワーク上で動くDappを作成してみました。

まず最初に考えたのが、ダウトゲームのようなもの。
カードを置く度にetherをbetしていき、ダウトを当てた人がbetしたetherを総取りするようなイメージです。
不正できないから、decentralizedな一度始めたら勝者が決まるまでやめられないゲームになるのではないかと。

ところが、実際にスマートコントラクトを作成してみると、以下の問題に直面し、まともに動くものが作れそうではありませんでした。

  • ユーザー毎に予測不能なランダムの手札(数字の配列)をsolidityでは作ることができない。(擬似的なものは作れる)
  • 誰もダウトしないorダウトが成立しなかった場合にはシステム側で勝者をブロックチェーンに記録しなければならないが、コントラクト側で自動に記録することができない(誰かgasを支払う必要があるため)。また手動で記録する場合には、勝者を記録する人のインセンティブがないので不正ができてしまう。
  • ループが増えてしまい、gas limitに引っかかっているからなのかデプロイできない
  • 手数料が高騰しているため、betする度に手数料を払うのが厳しい。

コントラクト側ではあまり複雑なことはさせるべきではないのかもしれません。
なので、シンプルに情報を記述、参照するだけのアプリケーションを作ることとしました。
実際に作成したのがこちら。
http://ether-profiles.tanakas.org/
Testnet上でEthereumのアドレスにプロフィールを紐づけてBlockchain上に記録することで、このアドレスは自分のものだぜ!と主張するだけのDappです。

フロント側はAngular5を使用し、SPAとしました。
今回Dappを作るにあたり、データを書き込み、参照をする際には自身で立てたnodeを経由するのではなくMetamaskを利用しましたが、Metamaskを利用していない一般ユーザがサイトに訪問した場合でも、ブロックチェーン上のデータを参照できるようにEthereumホスティングサービスであるInfuraというサービスを使っています。
https://infura.io

自身でnodeを立てる必要がないのでとても便利です。
Truffleでコンパイル、デプロイするときにもInfuraが使えます。
http://truffleframework.com/tutorials/using-infura-custom-provider

テストネットにデプロイしたら、動作確認する為にテストネットワークのコインが必要になるので、各テストネットワークのコインの取得方法はqiitaにまとめておきました。
https://qiita.com/biga816/items/ac762faf5d9334aeeabd

テストネットのコインを取得して、ぜひ使ってみてください。

The following two tabs change content below.
Akihiro Tanaka

Akihiro Tanaka

Engineer/UI Designer
UI設計を得意とするエンジニア。 現在はDApps開発しています。
好きな言語はTypeScript、好きなフレームワークはIonic、Angular。 趣味はハーレー、キャンプ、アンティーク。
WEB: http://tanakas.org/