ブロックチェーン(Ethereum)で決済システムを作ってみた

ブロックチェーン

ブロックチェーン(Ethereum)で決済システムを作ってみた

こんにちは。平野羽美です。
今回は、ひさしぶりにブロックチェーン関連の情報をお伝えしていきます。

ブロックチェーンは2017年頃より注目度が高まっている技術で、様々な業種・業界での活用が期待されています。未来技術推進協会でも講座やアイデアソン等で何度か取り上げています。そんなブロックチェーンですが、私たちがどのように使えるのか説明を聞いただけではピンとこない方も多いのではないでしょうか?

ということで、本記事ではブロックチェーンを使って作成した簡単な決済システムを紹介してきます。
なお、ブロックチェーンとは何か?使い方の入門編については、これまでに公開している記事をご参照ください。


作成したシステムの概要

今回作成した決済システムは、Ethereum(イーサリアム)というブロックチェーンのプロダクトを活用して独自のトークン(※)をやりとりすることができます。
※トークン:価値を定量的に表現したデータの総称。ブロックチェーン上で扱われるお金のようなもの

利用シーンとしては、一般的な電子マネーのように自分たちで発行したトークンを使って店舗で商品を購入することを想定しています。少し前にニュースになっていた「ビックカメラでビットコインが利用できるようになった」という事例にイメージは近いかと思います。

商品購入時には、店舗側の画面に表示された支払い用QRコードを利用者が読み取ります。利用者側は読み取った情報を元に決済処理を確定することで、店舗側があらかじめ設定した金額(トークン量)が送金されます。
これらのやりとりは裏側でブロックチェーンを活用して実現されており、決済された情報はブロックチェーン上に書き込まれる仕組みになっています。


図1:決済システムの概要

画面遷移イメージ

決済システムは以下の画面と機能から構成されます。

* ログイン画面
* メイン画面
* 請求画面
* 送金画面


図2:画面遷移イメージ

① ログイン画面

事前に登録したログインIDとパスワードを入力し、独自トークンを活用した決済サービスにログインします。事前登録時に自身のウォレットのアドレス(トークンを保持する場所のアドレス)を記録させておくことで、ログインIDでログインできるようにして利便性をあげています。

② メイン画面

ログイン後に遷移する画面で、ログインユーザが持つトークンの残高が表示されます。また、請求画面と送金画面へと遷移するボタンも表示されています。

③ 請求画面

トークンの送信請求を実施する画面です。店舗等での決済を想定した場合、こちらの画面は店舗側(商品を提供する側)が利用することになります。
請求画面に遷移すると、請求額の入力フォームとQRコード生成ボタンが表示されます。請求額の入力後にQRコード生成ボタンを押下することで、トークン請求用のQRコードが画面に表示されます。
こちらのQRコードを別の端末から読み取ることで、送金処理を効率的に行うことができます。
店舗等の利用シーンでは、タブレット端末等を利用して店員さんがQRコードを表示し、それを購入者が読み取るようなイメージになります。

④ 送金画面

トークンを送信する画面です。店舗等での決済を想定した場合、商品を購入する側が利用することになります。
送金画面に遷移すると、送信先アドレスと送金額の入力フォームが表示されます。こちらにアドレスや金額を入力しても良いのですが、トークンを送金するためのアドレスは長く煩雑なため、ユーザ側に入力させるのはあまりオススメできません。
そこで、一つ前に紹介した請求画面のQRコードを活用します。
送金画面に表示されている「カメラを起動」ボタンを押下すると、webカメラが起動します。カメラでQRコードを読み込むことで送信先アドレスと送金額の入力フォームに自動的に値が入力されます。
アドレスと金額に間違いがないことを確認したのち、送金ボタンを押下することでトークンの送金を実施します。

ブロックチェーン側での処理完了を待つ必要があるため、残高の反映までには少し時間を要しますが、数分待てば送金した情報が各々の残高に反映されるようになっています。

インフラ部分の仕組み(技術者向け)

ここまでは利用者側の視点を中心に決済システムについて紹介してきました。
ですが、ブロックチェーンの核となるのはインフラの仕組みです。ということで、決済システムの裏側についても簡単に紹介していきたいと思います。

今回構築した決済システムでは、ブロックチェーンプロダクトにはEthereumを、独自トークンの規格にはERC20(※)というEthereumで利用できる規格の中でも一般的な規格を利用しています。
※ERC20(Ethereum Request for Comments: Token Standard #20):Ethereum上で発行するトークンの統一規格の一種。ICOでの利用を想定しており、EOSやOmiseGoなどのトークンもERC20ベースで構築されています。

その他、システム構築に活用したものは以下の通りです。

クライアントサイド:HTML/CSS、javascript web3.js
サーバサイド:php Lalabel、node.js、MySQL、Google Cloud Platform
ブロックチェーン:Ethereum (Ropsten test net)

※ 各キーワードについての解説は冗長になってしまうため割愛します


図3:インフラ部分の構成

各構成は、Ethereumを活用したアプリケーションの一般的なサンプルプログラムを参考に作成しています。
ただし、トランザクション処理(送金などの処理をブロックチェーン上に書き込むシステム上の処理)の発行元に関しては多少工夫を入れています。

通常は、クライアント側のアプリケーション(Javascript)でトランザクションの発行を行い、Ethereumのブロックチェーンを呼ぶ仕組みが一般的です。(※あくまでデモアプリのレベルに限定した話です)

ですが、クライアント側のアプリケーションからトランザクションを発行するには、クライアント側でトランザクションを暗号化するための秘密鍵の情報を管理する必要が出てきます。ブラウザで秘密鍵の情報を管理するという仕組みも考えられますが、インターネットへのアクセスがある状態では必ずしも安全とは言い切れません。そこで、秘密鍵の情報はクライアント側では持たず、サーバ側に保持する仕組みとします。これにより、利用者側で秘密鍵を管理する必要がなくなり、不正な送金が行われるリスクを低減することができます。

※注:サーバ側に秘密鍵情報が集約されることになるため、サーバ側へのアクセスは厳重に管理する必要があります

まとめ

本記事では、Ethereumブロックチェーンを活用した簡単なアプリケーションの作成事例を紹介させていただきました。
画面側だけを見ると通常のwebアプリケーションと大差はないため、デモを見せると「これのどこがブロックチェーンなの?」という反応をされることも多いかと思います。今回の実装例に限らず、ブロックチェーンの実証実験などでもブロックチェーンらしさの見せ方は悩みの種になることが多いと聞いています。

今回はアプリケーションよりの内容をご紹介させていただきましたが、要望がありましたらスマートコントラクト(事前にプログラムされた”契約”に伴って、なんからの処理が自動的に実行される仕組み)のソースコードなど、技術的な面からの解説記事も作成してみたいと思います。

本記事で紹介していたブロックチェーンについては、協会でも定期的にイベントを実施していますので、興味がございましたら是非一度ご参加いただければと思います。

関連イベント

直近で実施予定のブロックチェーン関連イベントはこちらからご確認いただけます。
未来技術推進協会 主催 ブロックチェーン関連イベント

参考