目次
ブロックチェーンとHyperledger Fabric
ブロックチェーンとは
ブロックチェーンは仮想通貨ビットコインの基幹技術として発明された概念です。インターネットなどオープンなネットワーク上で、高い信頼性が求められる金融取引や重要データのやりとりなどを可能にする分散型台帳技術の中心となるものです。
1. 改ざんが困難
2. 頑強な破壊体制
3. 信頼コストが低い
ブロックチェーンの種類
パブリック型 | コンソーシアム型 | プライベート型 | |
概要 |
誰でもネットワークに 参加可能 |
許可された複数の企業が 参加可能 |
許可された複数の組織が 参加可能 |
特徴 | 取引後にノード間のデータ同期を行う | 取引前にノード間のデータ同期を行う | |
管理主体 | 管理者なし | 管理者あり(各企業) | 管理者あり(各組織) |
ノード所持者 | 誰でも保持可能 | 許可された参加者のみ保持可能 | |
コンセンサス | 消費電力が大きい | 高速、消費電力が小さい | |
データの記録完了保障 | なし | あり |
Hyperledger Fabric
Hyperledger Fabricのfabcarを立ち上げる方法
作成する環境
- AWS EC2インスタンス(OS:Amazon Linux 2、※インスタンスの種類:t3.small)
- Hyperledger Fabric ver2.2.0のサンプルプロジェクトであるfabcar
環境構築
EC2インスタンスの立ち上げ
パッケージ管理ツールのアップデート
1 |
$ sudo yum -y update |
Dockerのインストール
1 |
$ sudo yum install -y docker |
1 |
$ sudo usermod -a -G docker ec2-user |
1 2 |
$ cat /etc/group | grep docker docker:x:993:ec2-user |
Docker Composeのインストール
1 |
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.26.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose |
1 |
$ sudo chmod +x /usr/local/bin/docker-compose |
Dockerの起動
1 |
$ sudo service docker start |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$ docker info Client: Debug Mode: false Server: Containers: 0 Running: 0 Paused: 0 Stopped: 0 Images: 16 Server Version: 19.03.6-ce ・ ・ ・ |
1 |
$ killall -u ec2-user |
Node.js、Goのバージョン
Node.jsのインストール
1 |
$ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.35.3/install.sh | bash |
1 |
$ nvm ls-remote |
こちらのページでHyperledger Fabricに必要なNode.jsのバージョンを調べて、使用したいHyperledger Fabricのバージョンに対応するNode.jsをダウンロードしてください。今回はv12.18.3をダウンロードします。
1 |
$ nvm install v12.18.3 |
gccのインストール
1 |
$ sudo yum install -y gcc-c++ |
Goのインストール
1 2 3 |
$ wget https://dl.google.com/go/go1.14.7.linux-amd64.tar.gz $ sudo tar -C /usr/local -xzf go1.14.7.linux-amd64.tar.gz $ export PATH=$PATH:/usr/local/go/bin |
1 |
$ go version |
Gitのインストール
1 |
$ sudo yum install -y git |
サンプルプロジェクトのダウンロード
1 |
$ curl -sSL http://bit.ly/2ysbOFE | bash -s 2.2.0 |
サンプルプログラムの実行
ブロックチェーンネットワークの起動
1 2 |
$ cd fabric-samples/fabcar/ $ ./startFabric.sh javascript |
1 2 3 4 5 6 7 8 9 10 11 |
$ docker ps --format "{{.Names}}" dev-peer0.org1.example.com-fabcar_1-... dev-peer0.org2.example.com-fabcar_1-... peer0.org2.example.com peer0.org1.example.com orderer.example.com couchdb0 couchdb1 ca_orderer ca_org1 ca_org2 |
Fabric SDK for Node.jsのインストール
1 2 3 |
$ cd javascript/ $ npm install $ npm rebuild |
ユーザーの登録
Fabric SDKでチェーンコードを操作するにはユーザーが必要です。そのユーザーを登録するために必要な管理者の登録を行います。
1 |
$ node enrollAdmin.js |
1 |
$ node registerUser.js |
1 2 |
$ ls wallet admin.id appUser.id |
これで実際にfabcarの※チェーンコードを動作させる準備が整いました。
※チェーンコードはHyperledger Fabric ネットワーク上にデプロイされ、トランザクションを処理するプログラムコードです。
Hyperledger Fabric では、契約条件の締結や履行がプログラムによって自動で実行される仕組みをチェーンコードとして実現しています。
チェーンコード実行
それでは実際にチェーンコードを実行します。
1 2 3 |
$ node query.js Wallet path: /home/ec2-user/fabric-samples/fabcar/javascript/wallet Transaction has been evaluated, result is: [{"Key":"CAR0","Record":{"color":"blue","docType":"car","make":"Toyota","model":"Prius","owner":"Tomoko"}},{"Key":"CAR1","Record":{"color":"red","docType":"car","make":"Ford","model":"Mustang","owner":"Brad"}},{"Key":"CAR2","Record":{"color":"green","docType":"car","make":"Hyundai","model":"Tucson","owner":"Jin Soo"}},{"Key":"CAR3","Record":{"color":"yellow","docType":"car","make":"Volkswagen","model":"Passat","owner":"Max"}},{"Key":"CAR4","Record":{"color":"black","docType":"car","make":"Tesla","model":"S","owner":"Adriana"}},{"Key":"CAR5","Record":{"color":"purple","docType":"car","make":"Peugeot","model":"205","owner":"Michel"}},{"Key":"CAR6","Record":{"color":"white","docType":"car","make":"Chery","model":"S22L","owner":"Aarav"}},{"Key":"CAR7","Record":{"color":"violet","docType":"car","make":"Fiat","model":"Punto","owner":"Pari"}},{"Key":"CAR8","Record":{"color":"indigo","docType":"car","make":"Tata","model":"Nano","owner":"Valeria"}},{"Key":"CAR9","Record":{"color":"brown","docType":"car","make":"Holden","model":"Barina","owner":"Shotaro"}}] |
次に、台帳に新しくCAR12の自動車情報を追加します。
1 |
$ node invoke.js |
1 2 3 |
$ node query.js Wallet path: /home/ec2-user/fabric-samples/fabcar/javascript/wallet Transaction has been evaluated, result is: [{"Key":"CAR0","Record":{"color":"blue","docType":"car","make":"Toyota","model":"Prius","owner":"Tomoko"}},{"Key":"CAR1","Record":{"color":"red","docType":"car","make":"Ford","model":"Mustang","owner":"Brad"}},{"Key":"CAR12","Record":{"color":"Black","docType":"car","make":"Honda","model":"Accord","owner":"Tom"}},{"Key":"CAR2","Record":{"color":"green","docType":"car","make":"Hyundai","model":"Tucson","owner":"Jin Soo"}},{"Key":"CAR3","Record":{"color":"yellow","docType":"car","make":"Volkswagen","model":"Passat","owner":"Max"}},{"Key":"CAR4","Record":{"color":"black","docType":"car","make":"Tesla","model":"S","owner":"Adriana"}},{"Key":"CAR5","Record":{"color":"purple","docType":"car","make":"Peugeot","model":"205","owner":"Michel"}},{"Key":"CAR6","Record":{"color":"white","docType":"car","make":"Chery","model":"S22L","owner":"Aarav"}},{"Key":"CAR7","Record":{"color":"violet","docType":"car","make":"Fiat","model":"Punto","owner":"Pari"}},{"Key":"CAR8","Record":{"color":"indigo","docType":"car","make":"Tata","model":"Nano","owner":"Valeria"}},{"Key":"CAR9","Record":{"color":"brown","docType":"car","make":"Holden","model":"Barina","owner":"Shotaro"}}] |
ブロックチェーンネットワークの停止
1 2 |
$ cd ../ $ ./networkDown.sh |
最後に
執筆者プロフィール

- tdi AI&データマネジメント推進部
- tdiロボコンチーム"tadaima G4"の一員として、ITAロボコン優勝、ETロボコンCS大会3位、見るべきモデル大賞に貢献。AI勉強中。