プラスプラス開発者ブログ

岩手県盛岡市のシステム開発会社「株式会社プラスプラス」の開発者ブログです。

イーサリアムのスマートコントラクトで何ができる?

大きな声では言えないが、小さな声では聞こえない。
テキトー発言が多い「軽く熊」です。

前回はスマートコントラクト(solidity)について少し試してみましたが、
「結局が何が出来るの?」と思う人は多いのではないでしょうか?

今回は技術的な部分はほっといてSmart Contractの動作について
簡単に説明してみよう
と思います。信憑性は低いですが。
※記事の内容は執筆者のイメージです。


普段はAndroidアプリを作っていますが、開発言語にはjavaを使っています。
開発言語として見た場合「solidity だけ」だと何も出来ません。

それはなぜか?
solidityはデータベースを扱う言語SQLと同じでデータ操作しか出来ないからです。
グラフィックやUI等を作る機能は無いので、見た目も無くユーザー操作も無理です。

f:id:plusplus-calc_kuma:20180627140853p:plain
なので実際にアプリを作る場合にはjavaJavaScript等の他の開発言語から
スマートコントラクトを呼び出して実行
する事になります。

ではスマートコントラクトを呼び出すと誰が実行するのでしょうか?
スマートコントラクトは非中央集権型(サーバーが不要)が売りなので
当然サーバーではありません。

答えは誰かもわからないマイニング作業をしているマイナーさん達です。
世界中にいるマイナーさんが欲望の為にサーバーの代わりをしてくれています。

スマートコントラクトはどのように動作しているのでしょうか?
特殊なルールがあるデータベースのSQLと考えると理解しやすいかと思います。

スマート
コントラクト
既存の技術で説明すると
solidity SQL
ブロックチェーン データの直接編集が出来ないデータベース。
また、データベースに保存されたSQLしか実行できない。
データ読み込みに制限は無いが、
書き込みはマイナーにしかできないので要求を出して待つ。
書き込みが成功すると履歴が必ず残る。
バイナリは保存できない。
サイズが小さければ文字列に変換して保存は可能…
コントラクト登録 SQL構文をデータベースに保存する。
データベースへの書き込みとなるのでマイナーが処理する。
コントラクト実行 指定のSQL構文をデータベースから読み出して実行する。
データ読み込みだけなら結果をすぐに返すが、
書き込みの場合はマイナーが処理する事になる。


スマートコントラクトはデータベースを操作するような役割ですが、
大きな問題が1つあります。
それは書き込み時にマイナーに支払うガス(手数料)が発生する事です。

ゲームアプリで全てのデータをスマートコントラクトで保存するように作ると、
中断の度に手数料が発生し、仮想通貨をどんどん消費していきます。
ユーザーの承認操作も都度必要になるのでそんなゲームはやっていられません。

非中央集権型で「サーバーが無いのでサービスが終了しないゲームが作れる!」と
言っても手数料の問題をクリアする必要があります。

ブロックチェーン書き込み時に手数料が発生しない仮想通貨があれば
現実味があるかも知れませんが、そのような仮想通貨が指示を得られるでしょうか…。
※マイニングで仮想通貨を増やせないのでマイナーが利益を得られない → マイナーが増えない。
それによりブロックが伸びないので信頼性も下がるのでは無いかと思ったりします。


サービスが終了しないオンラインゲームなら
ぜひ、(当然、面白いのを)やりたいので作って欲しいですね。

いつか終わる有限なゲームには絶対課金しませんよッ!
以上、決意表明でした。



シリーズ記事
WindowsでEthereum環境構築はじめました。その1
WindowsでEthereum環境構築はじめました。その2
WindowsでEthereum環境構築はじめました。その3
WindowsでEthereum環境構築にAndroidくわえました。
WindowsでEthereum環境構築でスマートコントラクトはじめました。
イーサリアムのスマートコントラクトで何ができる?← この記事だよ!
Androidでmetamask不要のウォレットアプリをビルドする
WindowsでEthereum環境構築でスマートコントラクト、JavaScript実行編