ブロックチェーンのプライベートネットワークを構築しよう

Pocket

今年度からtdiは、今世間で大注目の「ブロックチェーン」への取り組みをスタートしました!

この記事連載では、その取り組みのため、書籍やWebの情報を参考に、私がブロックチェーンについて実際にやってみたことをまとめていきます。そして、最終的にはブロックチェーンの特徴を活かしたアプリケーションをつくりたいな、と思っています。

さて、ブロックチェーンを始めるには、まず環境づくり!ということで、今回のテーマは「ブロックチェーンのプライベートネットワーク環境を構築する手順」です。

そもそもブロックチェーンとは?

本題に入る前に、ブロックチェーンとはなんぞや?について、簡単に復習しておきたいと思います。

ブロックチェーンは、ビットコインを支える基盤技術であり、「取引の記録(トランザクション)」をまとめた「ブロック」を「チェーン(鎖)」のように順次追加していく仕組みです。ブロックチェーンネットワークに参加する全ての人が、全ての取引記録を記載した台帳を所有する「分散型台帳」技術である、というのが大きな特徴です。

ブロックチェーンのスゴイところをざっくりまとめると、以下3点になります。

  1. 改ざんが難しい
    特定のブロックを改ざんしたとしても、結局全てのブロックを芋づる式に作り直す必要があり、実質改ざんは不可能
  2. 頑強な破壊耐性
    全てのネットワーク参加者(ノード)が取引記録を保管しているため、あるノードが攻撃・破壊されたとしても、その他のノードが生き残っている限り、ブロックチェーンが消滅することはない
  3. 信頼コストが低い
    中央機関(例:銀行)が無いため、「信頼する」必要がない。その代わり、正当性をチェックする仕組み(コンセンサスアルゴリズム)が備わっている。

Gethでプライベートネットワークをつくる

さて、それでは本題に入りたいと思います。

今回は、ブロックチェーン基盤として「Ethereum」を採用し、プライベートネットワークをつくります。Ethereumには複数のクライアントが用意されていますが、今回はGoで書かれている「Geth」(Go-Ethereum)というクライアントを使用します。(Gethはゲスと読みます。ゲス…!)

サーバの準備

準備したサーバのスペックは以下です。

  • Ubuntu 16.04.3 LTS
  • 2 vCPU
  • メモリ4G

調べていると、どうやらOSはUbuntuが一般的なようです。

サーバはAWS(インスタンスタイプ:t2.medium)を使用することにしました。AWSであれば、サーバの準備も一瞬で出来ますし、いずれ分散環境を構築することになったときにも簡単にサーバを増やすことができます。また、個人的にこれまでUbuntuをインストールしたことがなかったのですが、AWSにはUbuntuのAMIが用意されているので、ハードルがそれほど高くないのもポイントです。

Gethの構築

コマンドは、基本的に全編root権限で実行します。まずは、Gitリポジトリからcloneし、ソースコードを取得します。

まずは、Gitリポジトリからcloneし、ソースコードを取得します。

次に、コンパイラとGo言語をapt-getでインストールします。

このとき気をつけたいのがGo言語のバージョンです。

コマンドを「golang」(バージョン指定なし)としてインストールすると、デフォルトでv1.6がインストールされます。v1.6だと、この先のビルド実行時に「Goのバージョンは1.7以上じゃないとダメ!」と言われてしまいます。そうなると辛いです。

インストールができたら、/root/.profile を開き、ファイルの最後尾に以下の1行を追加してGoのパスを通します。

Goのバージョンを確認し、きちんとパスが通っていればOKです。

パスの確認ができたら、cloneしたソースをビルドします。また、apt-getコマンドでアップデートもしておきます。ちなみに、はじめにも書きましたが、root権限になっておかないと、makeコマンド実行時にシェルからGoへのパスが通らず苦戦します。(しました)

これでインストールは完了です!

Gethをプライベートネットワークで立ち上げる

プライベートネットワーク用の各種データを格納するためのディレクトリを作成します。ディレクトリ名は任意です。

作成したディレクトリ配下にGenesisファイル(myGenesis.json)を作成します。Genesisファイルとは、0番目のブロック情報を定義したもので、プライベートネットワークを構築する際には必須です。

ちなみにこのGenesisファイル、書籍やネットで調べながら作ったのですが、書き方(設定値)が色々ありまして大変苦労しました…

プロパティの中でも一番気をつけたいのが「config」ブロックで、「homesteadBlock」を設定しないと後々(コントラクトを作成するところで)悪夢を見ます。(見ました)

次に、Genesisファイルをもとにブロックチェーンを初期化します。

初期化ができたら、Gethを起動してみましょう!

コンソール画面になりました!

ちなみに、Gethを停止するときはプロセスをkillします。

まとめ

これで、プライベートネットワークが構築できました!

今「もう一回構築しろ」と言われるとスイスイできるんですが、1番最初は色々躓いて辛かったです…大事なのは、「golangのバージョン」と「全編root権限でやる」という点だと思います。

複数の書籍やネットで調べながら試し、強く感じたのは、バージョンによる違いって大きい!ということです。参考にした書籍は、かなり最近書かれたものではありましたが、「書いてあるとおりにやってるのに出来ない!」ということが何度もあって、心が折れそうになりました。(折れなくてよかった)

次は、マイニングや送金について書きたいと思っています!

 

参考書籍

私は以下の2冊でブロックチェーンの基礎を学びました!ブロックチェーンの詳細については、ぜひこちらの書籍をご参考ください。

『いまさら聞けないビットコインとブロックチェーン』

(著者:大塚 雄介 初版発行: 2017年3月25日)

全体的に「読み物」という感じで堅苦しさもなく、読みやすいです。ブロックチェーンのこと何も知らない!という人が最初に読む本として最適だと思います。逆に、技術的な話を詳細に解説してくれているわけではないので、その辺りが気になる人には物足りないかもしれません。

『ブロックチェーン 仕組みと理論 サンプルで学ぶFinTechのコア技術』

(著者: 赤羽喜治・愛敬真生 初版発行:2016年10月15日)

ブロックチェーンの仕組みや基本要素(P2Pネットワーク、コンセンサスアルゴリズム、電子署名、等)、ブロックチェーンの応用分野などについて広く浅く解説してくれています。技術者が基本的な技術知識をつけるために、入門書として読むのをおすすめします。

お問い合わせ先

執筆者プロフィール

Yamazaki Naoko
Yamazaki Naokotdi IT技術推進部
社内の開発プロジェクトの技術支援や、新技術の検証に従事しています。主にアプリケーション開発系支援担当で、Java&サーバサイドが得意です。最近は、ブロックチェーンと仲良くなるべく鋭意検証中です。
Pocket

関連記事