ブロックチェーンを使ってみよう! 信頼を作る取引の仕組み

IT・IT製品TOP > Key Conductors > 栗村 彰吾(日本アイ・ビー・エム株式会社) > ブロックチェーンを使ってみよう! 信頼を作る取引の仕組み
この記事をtweetする このエントリーをはてなブックマークに追加

IT現場の道先案内人 Key Conductors

ブロックチェーンを使ってみよう! 信頼を作る取引の仕組み

開発 2016/11/14

それぞれの要素はどう実装されているのか?

 前回、ブロックチェーンとは「台帳」を分散共有して管理する技術であり、その技術的要素として「分散台帳」「コンセンサス」「暗号化」「スマートコントラクト」の4つを紹介しました。

 今回は簡単なブロックチェーンのデモ環境を立ち上げ、ブロックチェーンがどのように動いているのかを確認してみましょう。 なお、ブロックチェーンそのものの技術や概念、関連する用語などは、前回解説していますので、併せて読んでみてください。

 本稿後半では、このブロックチェーンを使った市場取引の例も紹介しています。

本稿の前提環境について

 デモで使用する環境は本連載第2回目で紹介した「LinuxONE Community Cloud」のRed Hat Enterprise Linux7.2(以下RHEL7.2)の仮想マシンです。「LinuxONE Community Cloud」での仮想マシンの作成方法はこちらを参照ください。

無償メインフレームLinuxでブロックチェーンのDockerイメージを展開する

 OSの設定をした後、既にブロックチェーンの環境が整っているDockerコンテナを起動し、簡単なブロックチェーンの機能を試してみます。具体的には図1のような環境を作ってみます。

図1 デモ環境の構成

※会員登録いただくと図をご覧いただけます。
会員登録はこちら(無料)

図1 デモ環境の構成

 なお、このデモは、以下のDocker公式サイトにある「brunswickheads/openchain-peer」のドキュメントを参考にしています。

brunswickheads/openchain-peer
 https://hub.docker.com/r/brunswickheads/openchain-peer/

ブロックチェーンピアを作成して動作を検証する方法

 ここからは、LinuxOne Community Cloud上にオープンソースのブロックチェーンクライアントのDockerイメージを展開していきます。

■手順(1)iptablesとfirewalldを停止

 今回はテスト目的ということで、想定外のエラーなどをあらかじめ回避するため、iptablesとfirewalldを無効にします。操作はsystemctlコマンドを使って行います。

 なお、本稿では一部の長いコマンドを「\」(バックスラッシュ)で改行して掲載しています。実際に操作する際には、行末の¥を省き、1行のコマンドとして入力してください。

[linux1@rhel72 ~]$ sudo systemctl stop iptables
[linux1@rhel72 ~]$ sudo systemctl disable iptables
[linux1@rhel72 ~]$ sudo systemctl stop firewalld
[linux1@rhel72 ~]$ sudo systemctl disable firewalld
■手順(2)sudoへのパスの引き継ぎ設定

 デフォルトでは、システム管理者権限(sudo)実行時に「/sbin」「/bin」「/usr/sbin」「/usr/bin」をパスとして認識してしまいます。ここでは、一般ユーザー(linux1)環境のパスを認識するための設定を、visudoコマンド経由で行います。

[linux1@rhel72 ~]$ sudo visudo 

 以下を追記します。

Defaults    env_keep += "PATH" 

 さらに、以下の行をコメントアウト(行頭に#を追記)します。

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin
■手順(3)Dockerのダウンロード

 RHEL 7.2ではデフォルトでDockerがインストールされないため、Dockerの実行環境を以下のUNICAMPのftpサイトからwgetコマンドを使ってダウンロードします(ダウンロードデータの健全性は個別に確認しておくようにしてください)。


docker-1.10.1-rhel7.2-20160408.tar.gz
ftp://ftp.unicamp.br/pub/linuxpatch/s390x/redhat/rhel7.2/docker-1.10.1-rhel7.2-20160408.tar.gz

[linux1@rhel72 ~]$ sudo wget ftp://ftp.unicamp.br/pub/linuxpatch/s390x/redhat/rhel7.2/docker-1.10.1-rhel7.2-20160408.tar.gz

  ダウンロードしたDockerの実行環境を解凍します。

[linux1@rhel72 ~]$ sudo tar xvzf docker-1.10.1-rhel7.2-20160408.tar.gz
■手順(4)シンボリックリンクの作成

 解凍したDocker実行環境内の実行ファイルに「リンクを貼り」ます(シンボリックリンク)。これは、Windows環境でいうところの「デスクトップにアプリのショートカットを作成する」といった操作です。

 [linux1@rhel72 ~]$ sudo ln -s /home/linux1/docker-1.10.1-rhel7.2-20160408/docker \
 /usr/local/bin

Dockerを起動してブロックチェーンのピアを操作する

 ここからは、Docker上のブロックチェーンピアを起動して、挙動を確認していきます。2つのピアを立ち上げ、台帳のデータを更新したときに、チェーンのように連動してそれぞれが持つ値が変化するかを確かめてみます。

 では早速、Dockerデーモンを起動していきます。Dockerそのものの詳細については別途関連の解説をご確認ください。ここでは必要な操作のみを解説していきます。

■手順(5)Docker デーモンの起動

 Dockerをバックグラウンドプロセスとして起動します。

 [linux1@rhel72 ~]$ sudo docker daemon -D -g /var/lib/docker -r=true\
 --api-enable-cors=true -H tcp://0.0.0.0:4243 -H unix:///var/run/docker.sock
■手順(6)1つ目のピア(VP1)を起動

 まず、ifconfigコマンドを使って、ネットワークデバイスdocker0のIPアドレスを確認します。

 [linux1@rhel72 ~]$ ifconfig docker0 
 docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 0.0.0.0  

 この出力から、docker0は「inet 172.17.0.1」だと分かりました。これをパラメーターとして、1つ目のピア(VP1)を起動します。以下のコマンドっで<ipaddress>の部分にdocker0のIPアドレス(ここでは172.17.0.1)を入力します。お使いの環境によって異なりますので適宜入力してください。

 [linux1@rhel72 ~]$ sudo docker run --rm -it --name=vp1 -e \
OPENCHAIN_VM_ENDPOINT=http://<ipaddress>:4243 -e \
OPENCHAIN_PEER_ID=vp1 -e \
OPENCHAIN_PEER_ADDRESSAUTODETECT=true \
brunswickheads/openchain-peer obc-peer peer
■手順(7)別のセッションから2つ目のピア(VP2)を起動

 手順(6)までのセッションとは別に、新しくSSHクライアントのセッションを立ち上げて以下の操作を行います。

 <ipaddress>の部分はdocker0のIPアドレス(172.17.0.1)を、<vp1ip>の部分にはVP1のIPアドレス(172.17.0.2)を入力します。

 [linux1@rhel72 ~]$ sudo docker run --rm -it -e \
OPENCHAIN_VM_ENDPOINT=http://<ipaddress>:4243 -e \
OPENCHAIN_PEER_ID=vp2 -e \
OPENCHAIN_PEER_ADDRESSAUTODETECT=true -e \
OPENCHAIN_PR_DISCOVERY_ROOTNODE=<vp1ip>:30303 \
brunswickheads/openchain-peer obc-peer peer

チェーンコードを使って値を設定、チェーンコードを取得する

 ここまでの作業でブロックチェーンのピアが2つできました。ここからは、ピアに具体的な台帳データを登録し、それを取引操作した場合の挙動を確認していきます。なお、ここではサンプルのチェーンコードを利用してデータを登録していきます。

■手順(8)Bashでプロンプト操作を可能にする

 手順(6)および手順(7)とは別に、新しくSSHクライアントのセッションを立ち上げます。新しいセッションから、以下の操作を行います(1つ目のピア(VP1)でコマンドを実行できる環境に移る)。

[linux1@rhel72 ~]$ sudo docker run --rm -it -e \
OPENCHAIN_PEER_ADDRESS=172.17.0.2:30303 \
brunswickheads/openchain-peer bash
■手順(9)チェーンコードを登録(deploy)

 GitHubにあるサンプルのチェーンコードをピアに登録します。

図2 今回のデモ操作でのブロックチェーンの動き

※会員登録いただくと図をご覧いただけます。
会員登録はこちら(無料)

図2 今回のデモ操作でのブロックチェーンの動き

 このチェーンコードで「a」に「100」、「b」に「200」の値を設定します。

bash-4.2# obc-peer chaincode deploy -p \
github.com/openblockchain/obc-peer/openchain/example/chaincode/chaincode_example02 -c \
’{"Function":"init", "Args": ["a","100", "b", "200"]}’

 実行結果として以下のような文字列が返されます。出力された文字列が「チェーンコード名」です。以降の操作ではこのチェーンコード名をパラメータとして用います。

bb540edfc1ee2ac0f5e2ec6000677f4cd1c6728046d5e32dede7fea11a42f86a6943b76a8f9154f4792032551ed320871ff7b7076047e41842 92e01e3421889c
■手順(10)チェーンコード名を環境変数に登録

 手順(9)で出力されたチェーンコード名を使いやすくするため、環境変数(ここではNAME1)に登録します。<name1>に手順(9)で返された長い文字列を指定して登録します。

bash-4.2# export NAME1=<name1(チェーンコード名)> 

台帳の中身を確認する

 ここまでの操作で、「a」「b」に値を設定し、その際のチェーンコード名を取得できました。

■手順(11)台帳の中身を参照する(query)

 では実際に、台帳に値が設定されているかを確認してみます。

bash-4.2# obc-peer chaincode query -l golang -n $NAME1 -c \
 '{"Function": "query", "Args": ["a"]}'

 実行結果としてaに設定されている値の100が返されます。

bash-4.2# obc-peer chaincode query -l golang -n $NAME1 -c \
'{"Function": "query", "Args": ["b"]}'

 実行結果としてbに設定されている値の200が返されます。

○台帳の中身を操作して挙動を確認する

 それでは早速、台帳の中身を更新して、改めて参照してみます。

■手順(12)台帳の中身を更新する(invoke)

 では、aからbに値を50移動させてみましょう。

bash-4.2# obc-peer chaincode invoke -n $NAME1 -c \
'{"Function": "invoke", "Args": ["a", "b", "50"]}'
■手順(13)台帳の内容を参照する(query)

 先ほどと同じように、台帳の値を確認してみます。

bash-4.2# obc-peer chaincode query -l golang -n $NAME1 -c \
'{"Function": "query", "Args": ["a"]}'

  実行結果としてaに設定されている値の50が返されます。

bash-4.2# obc-peer chaincode query -l golang -n $NAME1 -c \
'{"Function": "query", "Args": ["b"]}'

 実行結果としてbに設定されている値の250が返されます。

 今回のデモを通して、ピアにチェーンコード(値を移動させるプログラム)を登録し、それを実行することでピア間の合意形成を図り、共有分散台帳に値の変動が記録されるという動きを確認できたと思います。

LinuxONEでブロックチェーンを実装しているビジネス

 ここまでのデモで見た内容は、「値を登録する」「値を移す」「値を参照する」といった基本的な動きでしたが、チェーンコードを開発することで、さまざまな動きを実装できます。実際にブロックチェーンをビジネスに応用し、セキュアなトレーサビリティを実現している企業にEverledgerがあります。

ダイヤモンドの所有権管理――「市場」としての信用を得るために

 EverledgerはLinuxONE上でブロックチェーンのセキュアな共有分散台帳技術を用いてダイヤモンドの所有権を管理しています(図3)。 

図3 EverLedgerにおけるダイヤモンドのトレーサビリティ

※会員登録いただくと図をご覧いただけます。
会員登録はこちら(無料)

図3 EverLedgerにおけるダイヤモンドのトレーサビリティ

 ダイヤモンドは「形状」「色」「重さ」「透明度」などをデジタルデータ化してEverledgerのブロックチェーンネットワークに登録します。これにより、売り手や買い手、保険会社や宝石店は取引情報をリアルタイムに参照できるようになります。

 登録されているダイヤモンドは全ての取引情報が共有されるため、例えばネットオークション等で売り出されたとしても、売主とダイヤモンドの所有者が一致しなければ盗難品であると判断されます。

 Everledgerは保険会社と共同して盗難品と判断されたダイヤモンドに対して必要な処置を迅速に行うことが可能です。現在Everledgerのブロックチェーンネットワークでは85万以上のダイヤモンドが管理されています。

 こちらの記事「メインフレームでブロックチェーン? ダイヤ取引の変革に挑むEverledger」(ITmediaエンタープライズ)では、2016年9月20日にラスベガスで開催されたイベント「IBM Edge2016」で、EverledgerのCEOリアナ・ケンプ氏のセッションを紹介しています。

 そのセッションでケンプ氏は、「ダイヤモンドの業界では、“それがどこから来たのか”――出どころがとても重要だ」「かつては信用が大切にされ、それによって成り立ってきた業界だが、ゴールドのように広く投資資金を呼び込むには、テクノロジーによる取引の高い透明性が求められている」と話しています。そこで、Everledgerはブロックチェーンテクノロジーを活用することで、より透明性の高いトレーサビリティを実現しているのです。

 ブロックチェーンは金融業界、企業間の取引だけでなく、トレーサビリティにも活用することができます。ビジネスのさまざまな分野で活用されるブロックチェーンですが、ビジネスでの適応にはやはりセキュアな環境が必要になります。

「High Security Business Network」によるトレーサビリティの確保

 IBMはその環境としてBlueMixで展開している「blockchain-as-a-Service」に加え、新たなブロックチェーン向けクラウドサービス「High Security Business Network(以下HSBN)」を発表しました。LinuxONE上で動くHSBNは、よりビジネスのセキュリティに特化し、個別に隔離された高度なセキュリティ環境でブロックチェーンを用いたビジネスネットワークのシミュレートが可能になります。

 LinuxONEは他に類を見ない高いセキュリティレベルを確保し、新たなビジネス基盤となるブロックチェーンを実装するのに最も適したITインフラといえるでしょう。

 次回は次世代Webアプリケーション開発プラットフォームとして、スケーラブルなネットワークプログラムを可能にするNode.jsについてご説明します。オンラインゲームやモバイルアプリなどに活用されているNode.jsとはどのような技術なのか、またそれに必要なIT基盤の要件とは何かといった観点でご紹介します。

 そして、LinuxONE Community Clouod上でNode.jsを利用し、Twitterのデータを用いた簡単なデモアプリを作ってみます。お楽しみに!

会員限定で「読者からのコメント」が読み書きできます! 「読者からのコメント」は会員限定の機能。会員登録を行い、ログインすると読者からのコメントが読み書きできるようになります。

会員登録(無料)・ログイン

Myリストへ

この記事をtweetする このエントリーをはてなブックマークに追加


この寄稿記事に掲載している情報は、掲載日時点での情報となります。内容は変更となる場合がございますのでご了承下さい。また、「Key Conductors」の寄稿記事及び当該記事に寄せられたコメントについては、執筆者及びコメント投稿者の責任のもと掲載されているものであり、当社が、内容の最新性、真実性、合法性、安全性、適切性、有用性等を保証するものではありません。


30009303


IT・IT製品TOP > Key Conductors > 栗村 彰吾(日本アイ・ビー・エム株式会社) > ブロックチェーンを使ってみよう! 信頼を作る取引の仕組み

このページの先頭へ

キーマンズネットとは
さまざまなオープンソースソフトウェア(OSS)に携わり、現在は「LinuxONE」を中心に、提案および構築を担当。お客さまのミッションクリティカルな業務にふさわしいシステムの提供に尽力する傍ら、LinuxONEの活用に関するセミナー講師として「メインフレームの価値」や「なぜ今メインフレームか」を啓蒙する活動にも従事する。

ページトップへ