ちょっと話題の記事

Ethereumブロックチェーンでめそ子の握手券を作ってみた

2017.08.01

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

ビットコインをはじめとした暗号通貨の値上がりで世間の注目を集めるブロックチェーンですが、ある人はWorld Wide Web以来の技術と言い、ある人はそれほど騒ぐほどのものでもと言います。

説明しだすと長くなるので3行で、

  • ブロックチェーンとそのネットワークは非中央集権的分散型台帳、およびP2Pコンピューティング基盤である。
  • マイナー(採掘者)と呼ばれる参加者が金銭的報酬をモチベーションに改ざん困難な記帳を行いネットワークを維持している。
  • Ethereumはそのネットワーク上で自律的に執行できる契約、スマートコントラクトアプリケーションを主軸に置いたプロジェクトである。

ドイツ、特にベルリンはビットコイン(btc)の次に時価総額が大きい eth のブロックチェーン、Ethereum関連の開発者やスタートアップの集積地なので、この分野で特に特殊技能があるわけではない弊社も何かこのコミュニティーに貢献できないかとアイデアを練っているところです。

今回は手始めに、Ethereumのテストネットで実際に動くスマートコントラクトをゼロから作成してみます。

ブロックチェーンの適用

ブロックチェーンはいいのか

このところ「ブロックチェーンはいいぞ」という人がネット上にあふれているので、「ブロックチェーンはいいのか」と思ってしまいがちですが、大半は「ブロックチェーンって言いたいだけ」の人です。まず、一般的な企業が使うアプリケーションでブロックチェーン技術が最適に使える領域は皆無と言ってよいです。

ブロックチェーンのキモは自律的で堅牢なネットワークですが、処理能力はその規模に反して低いままです。例えばクレジットカードのVISAの1秒あたりの処理能力は2000トランザクションを超えますが、ビットコインは7以下、Ehereumも27以下です。この問題は解決に向けた様々な提案がされていますが、既存のコンピューティング基盤に追いつけるものではありません。

現在、企業向けのブロックチェーン技術の適用で典型的なのは、閉じたネットワークで自社のコンピューターファームを使ってマイニングを行い処理能力を確保するプライベートチェーンと呼ばれるものですが、伝統的なDBMSで同じアプリケーションを構築したほうがはるかにコストパフォーマンスが高いでしょうし、それこそAWSを使えば一昔前までは考えられなかったような冗長性と負荷分散を備えた堅牢なシステムを素早く展開できるでしょう。

金融機関がプライベートチェーン上でSWIFTを代替させるようなソリューションの実証実験を繰り返していますが、私はこれらは実用に至らないと思います。ブロックチェーンはパブリックで使ってこそ意味をなすのです。

Ethereumで成立しうるビジネスモデル

ブロックチェーンの真価である非中央集権、自律ネットワークはあらゆるミドルマンを排除する実装方式なので、暗号通貨取引所とマイナー以外で収益を上げるビジネスモデルは簡単ではありません。パブリックチェーンで動くアプリケーションを一旦作ってしまえば、特定の誰かが監視・制御するわけでもなく、サーバーなしで自動執行されるからです。ある意味、デベロッパーが消滅してもネットワークがある限りそのアプリケーションは記録され、実行され続けるのです。

ではブロックチェーンで収益性のあるサービスを作ることはできないのでしょうか。あるドイツの企業連合のモデルが参考になります。

ドイツの4大送電事業者RWEの子会社 innogyが主導するShare & Chargeという電気自動車のP2P充電プラットフォームです。パブリックベータを経て、スーパーの駐車場や一般の民家などすでに1000のチャージングステーションが稼働しています。

エンティティ間の電気の売買契約、認証、請求の解決策にブロックチェーンを選んだのは以下の理由です。

  • 中央管制する主体なしに個人間契約が永続的に認証、実行、記録される。
  • 台帳サーバーを管理する必要がなく、コンピューターリソースを企業連合の誰かが所有しなくてよい。
  • プラットフォームに参加したいアイデアのある新規パートナーは、リソースに支払うコストの負担なく開発に集中できる。

このように、公共性の高い分野でベンダーロックを避けつつ台帳の永続性を確保したい場合、ブロックチェーンの利用は適切です。

しかしハードウェアパートナーは開発した充電プラグ等の販売で収益を得ますが、システムはEthereumネットワーク上に構築されており、ネットワークの使用料を参加企業がユーザーから直接徴収することはできません。そのためブロックチェーンの開発パートナーは決済に使う「ユーロトークン」の為替手数料を収入にします。

ユーロトークンとは現実の通貨ユーロと1:1で交換できる契約(スマートコントラクト)のプライベート通貨で、これもまたEthereumで動いています。この交換にマイクロチャージするわけです。

Ethereumの市場取引通貨であるethも、Ethereum上のトークンの一種と言えます。開発者およびスマートコントラクトの作成者は、こういったトークンを自由に発行して取引に使うことができるわけで、Ethereumビジネスモデルの根幹をなすものです。

前置きが長くなりましたが、以上を踏まえた上でブロックチェーンビジネスのはじめの一歩として、イベントなどで大人気の弊社二次元社員めそ子の握手券トークンを作って販売したいと思います。はじめにお断りしておきますが、このトークンを保持していてもユーザーが微分されないかぎり次元の壁は超えられないため、その技術が開発されるまでは実際に握手をすることはできません。

Ethereumの環境とツール群

Ethereumクライアント / ブラウザ

EthereumのブロックチェーンはEthereumクライアント上に保持されます。様々なコンピューターにインストールされたEthereumクライアントがノードとなり、ネットワークを構成しているのです。Goで書かれたGo Ethereum (Geth)、C++のcpp-ethereum、Pythonのpyethereumなどいくつかの実装がありますが、マイニングでシェアをもつGethが最も一般的です。

クライアントをインストールすれば、Ethereumの1ノードとして本番ネットワークに参加したり、ローカルでテストネットを構成したりできます。WWWでいうWebサーバーです。

Ethereumクライアントは直接操作することができますが、通常はWeb3というAPIを通じでプロシージャコールして使います。そういったフロントエンドツールをブラウザと呼び、それは同時に通貨ethを取り扱うウォレットでもあります。ethのウォレットはいくつかありますが、スマートコントラクトを書いて実行できるフルブラウザはMistがデファクトです。

Geth + Mistで環境を作り、テストと本稼働を行うのがベストプラクティスです。Ethereumアプリケーションやスマートコントラクトを作成してブロックチェーンに登録したら、Webサーバーと違ってその環境の電源を落としても実行され続けます。アプリケーションを発行するときだけ起動すればいいので、オンデマンドなAWS環境は親和性が高いと言えます。

もっとお手軽な方法は、MetamaskというChromeエクステンションを使うことです。これはWeb3をWWWブラウザであるChromeでインジェクションするツールで、かつ同社がホスティングしているEthereumの本番ネット、テストネットのブロックチェーンに接続できるので、現在15GBほどあるブロックチェーンデータをダウンロード、同期する必要がありません。

metamask

今回は、Metamaskからテストネットの一つRinkebyに接続した環境を使います。

開発言語 / IDE

スマートントラクトの記述言語は、JavaScriptライクなSolidity (.sol)、PythonライクなSerpent (.se)、LispライクなLLLがあり、それらはコンパイルされてEthereum Virtual Machine (EVM)というバイトコード実行環境を動かします。コンパイラやIDEの開発具合から、通常はSolidityを用いて開発します。

開発環境はVimやATOMなどのテキストエディタまたはJetBrainsやVisual StudioなどのIDEへのプラグインがありますが、ローカルで環境を作るより、オンラインで動くWeb IDE Remixを使う方が楽です。RemixをChromeで使うことで、Metamaskの真価が発揮できます。

metamask-remix

MetamaskにログインしてRinkebyに接続し、Remixを開きます。「Injected Web3」を選択することで実際に稼働しているテストネット上で開発ができます。

コーディングとデプロイ

つべこべ言わずにコードを書いてみました。

[gist id="1173350f7056aa730d5972439c7b436d"]

Solidityは文法がJavaScriptライクとはいえ、コントラクト(contract)の性質上、静的型付け言語で、varで適当に変数を作れるわけではありません。コントラクトは継承ができるJavaのクラスに似た概念で、その設計に基づいて関数などが実行されます。

Remixからコントラクトを発行しますが、現在コントラクトを実行するethの手持ちがないので、テストネットでマイニングしてもらって(テストネット用)ethをもらいます。

Faucetにコントラクトで使うアドレスを格納したGistアドレスをアップロードすることで、3ethもらえます。

get eth eth on rinkeby

RemixでCreateボタンを押してMetamaskでSubmitするとマイナーへの報酬が支払われ、トランザクションのマイニングが開始されます。程なくすると記帳と確認が完了し、コントラクトがデプロイされます。

deploy

では握手券を買ってみましょう。Remixの自分のウォレットのethで試します。

buy token

Value に1 etherを入力し、fallback(握手券1を買うファンクション)を押します。そうすると1 etherと手数料がウォレットから引かれ、握手券と交換されます。ウォレットのアドレスをコピーして fans にペーストすると、握手券を1保有していることがわかり、 akushuken のボタンを押すとトークン総数の100から1が引かれて99になっていることがわかります。

bought

このコントラクトはすでにRinkebyテストネット上に発行されていますが、完売と同時にコントラクトが自己破壊され、販売額のethをオーナーアドレスに戻すという売りっぱなしの状態です。握手券トークンとしてはその流通(発行元からの販売後の譲渡、トークンとしてユーザーのウォレットで管理する)をコーディングして、何かしらの価値のあるものとして発行しなければ上記のビジネスモデルに乗りません。

次回は流通規格に基づいたトークンのコーディングを行い、テストネット上でみなさんに販売してみたいと思います。

 


クラスメソッドで、ヨーロッパリージョンで勤務しませんか? クラスメソッドでは、日本、バンクーバー、ベルリンで一緒に働く仲間を募集しています! 採用情報 | クラスメソッド株式会社