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

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

そこで今回は、自社サービスにブロックチェーンを実装するための考え方とオススメライブラリ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の目的は、ハッシュ値を計算することで特定の数字を見つけ、ブロックに整合性があるかを見つけることです。

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