ブロックチェーンは、暗号通貨ビットコインに実装された革命的な技術として注目されていますが、暗号通貨以外にも広く応用されようとしています。改ざんしにくく、サーバーのようにメンテナンスコストもかからないので、注目を集めています。

しかし、ブロックチェーンと聞くと、なんだか難しそうに感じませんか?しかし、考え方と正しいツールを使えば、ブロックチェーンを自社技術に実装することも可能です。

そこで今回は、自社サービスにブロックチェーンを実装するための考え方とオススメライブラリ3選をご紹介します。現在ではさまざまなプログラミング言語で開発できるブロックチェーン用のライブラリも配布されているので、開発環境にぴったりのものを選んでみましょう。

ブロックチェーンを実装してみよう!

bc.jpg

ブロックチェーン(Blockchain)とは、暗号通貨ビットコインの技術の中核として注目されている、分散型台帳技術のことです。ビットコインと結び付けられて語られることが多いですが、改ざんすることが困難というメリットから、スマートコントラクトと呼ばれる合意形成をはじめとした様々な取引に応用されています。また、フィンテック(FinTech)やリーガルテック(LegalTech)への応用が期待されています。

ブロックチェーンの可能性をすべて理解するのは簡単ではありませんが、ブロックチェーン自体の基本的な概念はとてもシンプルです。順序づけられたレコード(ブロック)が鎖(チェーン)状に連続的に増加していくもの、これがブロックチェーンです。

ブロックチェーンについて理解を深めるためのコードを、世界中のプログラマーが公開しています。多くはPythonで書かれていますが、Pythonでなくとも構いません。それらも参考にしながら、今回はプライベートブロックチェーンの構築の考え方について、学んでいきましょう。

ブロックチェーンを自社システムに導入すると、以下のような点でメリットが生まれます。

改ざんに強い:電子署名や改ざん・抹消不可能なタイムスタンプで記録できる
・故障に強い:全ノードが壊れない限り、システムダウンが起こりにくい
・データの一致:仕組み上、残高などの数字が必ず釣り合うようにできている

こうした視点から見てみると、自社サービスであってもデータベースではなくブロックチェーン技術を使って開発を行ったほうが、内部不正も含めてリスクを回避することができるといえます。

簡易的なブロックチェーンを作成する3ステップ

code.jpg

ここでは、簡易的なブロックチェーン作成に関する考え方について見ていきます。実際のコードについては、以下の記事が詳しいので、参考にしてみてください。

参考:
Python3でブロックチェーンを作ってみる
ブロックチェ-ンを構築しながら学ぶ

1. ブロックチェーンのクラスを作成

まずは、空のブロックを作成するために、ブロックチェーンのクラスを作成します。ブロックチェーンには、以下の内容を含めるとよいでしょう。

・index
・timestamp
・data
・previous_hash
・hash

ここで最も重要なのは、新しいブロックが前のブロックのハッシュ値を保持している、ということです。これにより、連続したブロックが改ざんされることなく繋がります。

ブロックが持つハッシュ値は、ブロックのインデックス・タイムスタンプ・データ・前のブロックのハッシュ値を暗号化したものにします。

2. ブロックを生成

ブロックチェーンでは、一番最初のブロックをジェネシスブロックと呼び、改ざんできないように厳重管理されていることがほとんどです。一番最初は、ジェネシスブロックをマニュアルで作成するように、ブロックチェーンのクラスで生成しましょう。ジェネシスブロックは、別ファイルに保存しておき、必要な時に読み込む方式にするのが便利です。

次に、2番目以降のブロックを作成しましょう。2番目以降のブロックは、前のブロックのインデックスやハッシュ値を参照するような引数を受け取る関数にしましょう。

3. 合意形成(コンセンサス)の仕組みを組み込む

ブロックチェーンでは、分散して存在するデータベースを整合的に更新していくために、「次に記録するブロックを決める」という合意形成を行います。ブロックチェーンは通常、データベースのような一つのサーバーに情報を格納するようなことはせず、ネットワークで繋がっているコンピュータ(ノード)によって、対等に直接通信を行いながらブロックチェーンを保持します。

最も有名な合意形成アルゴリズムは、ビットコインにも搭載されているPoW(プルーフ・オブ・ワーク)と呼ばれるアルゴリズムです。PoWの目的は、ハッシュ値を計算することで特定の数字を見つけ、ブロックに整合性があるかを見つけることです。

合意形成アルゴリズムを自力で作成するのは大変ですが、次に紹介するライブラリを用いると、比較的シンプルに実装することが可能になります。

ブロックチェーン開発に役立つライブラリ3選

ブロックチェーン作成の概観がご理解いただけたと思いますが、一方で「ゼロからブロックチェーンを組み立てていくのは大変そう」と思われた方もいるでしょう。そんな時には、世界中の優れた開発者たちが作成した、高機能なライブラリを使ってみるのがよいでしょう。

ここでは、数あるライブラリの中でも、特に自社でのブロックチェーン開発に役立つライブラリを3つご紹介します。

1. Web3j

1.jpg

Web3jは、Javaの技術を使ってイーサリアムベースのブロックチェーンノードを作成するためのライブラリです。開発言語がJavaベースになっているため、Androidアプリへの統合もしやすくなっています。

また、イーサリアムベースということもあり、スマートコントラクトの実装用途としても利用することができます。

2. HyperLedger Fabric

2.jpg

HyperLedger Fabricは、Go言語で実装されている、オープンソースの共同開発プロジェクトであるHyperLedger名義で公開されているライブラリです。IBMが開発していたOpenBlockChainを、Linuxファウンデーションに提供したもので、IBM Bluemixでもエンタープライズ向けに提供しているため、商用で使う際にも安心して利用することができます。

Fabricによる開発はGo言語のほか、Javaなどの汎用的な言語でならほとんどの言語で記述できます。

3. Blockchain.js

3.jpg

Blockchain.jsは、ビットコインのような合意形成アルゴリズムを含めたブロックチェーンを、JavaScriptでシンプルに作成することができるライブラリです。

コードはサーバー上のNode.jsでも、クライアントのブラウザのどちらでも動かすことができます。

まとめ

ブロックチェーン自体は、ある特定のデータを含んだブロックをチェーン状に保存した、非常にシンプルなものです。合意形成の考え方は少し難しいものになっていますが、ライブラリを使うことで、高いハードルを下げることもできます。

まだデータの保管にデータベースを活用しているところも多いでしょうが、まずは適材適所で部分的にブロックチェーンを導入してみてはいかがでしょうか。最新技術として話題にもなり、なおかつ安全にデータを記録することができるでしょう。