Hyperdeger Fabric 1.0.0付属のサンプルコードを動かしてみます。
サンプルコードのイメージ図
(https://hyperledger-fabric.readthedocs.io/en/latest/write_first_app.htmlより抜粋)
- ブロックチェーンネットワークの分散台帳に書き込むには、スマートコントラクトが必要。
- 業務側のアプリケーションは、Fabricのネットワークエンドポイントにアクセスし、スマートコンストラクトを実行する
- サンプルでは、台帳として車情報を管理し、アプリケーションに返す
- 言語はJavaScriptを利用
- サンプルのダウンロード
# git clone https://github.com/hyperledger/fabric-samples.git
# cd fabric-samples/fabcar
# ls
creds invoke.js package.json query.js startFabric.sh
- startFabric.shの実行
#./startFabric.sh
このシェルを実行すると、サンプルを動かす環境を自動的に構築してくれる。
シェルの中身をみてみると、だいたい以下のことを実行している。
・まず最初に、必要なDockerイメージのダウンロード
・Docker-composeでDockerコンテナの立ち上げ。以下の4つのコンテナを作成している。
Creating orderer.example.com
Creating ca.example.com
Creating couchdb
Creating peer0.org1.example.com
・ブロックチェーンネットワークを構成するチャネルの作成
・「peer0.org1.example.com」というノードをチャネルへ追加
・CLIコンテナの作成
・サンプルチェーンコードのインストール
・サンプルチェーンコードのイニシエト
・サンプルチェーンコードの実行
docker psで確認してみると、以下のコンテナが起動されている。
- fabric-samples/fabcar配下で以下のコマンドを実行し、必要なパッケージをダウンロード
# npm install
- クエリーから実行してみる。10データ分の車情報を取得できる。
query.jsソースをのぞいてみると、だいたい以下のことを実行している。
ユーザID'PeerAdmin’を利用する。チャネル名'mychannel'を指定する。また、チェーンコードID'fabcar'を指定して、7051ポートにアクセスする
var options = {
wallet_path: path.join(__dirname, './creds'),
user_id: 'PeerAdmin',
channel_id: 'mychannel',
chaincode_id: 'fabcar',
network_url: 'grpc://localhost:7051',
};
Fabric Client SDKを呼び出し、認証に必要なKeyValueStoreを作成する。
client = new hfc();
return hfc.newDefaultKeyValueStore({ path: options.wallet_path });
チャネルを作成し、Peerノードに追加する。
channel = client.newChannel(options.channel_id);
channel.addPeer(client.newPeer(options.network_url));
トランザクションIDを生成し、'queryAllCars'という関数を呼び出す。
var transaction_id = client.newTransactionID();
console.log("Assigning transaction_id: ", transaction_id._transaction_id);
// queryCar - requires 1 argument, ex: args: ['CAR4'],
// queryAllCars - requires no arguments , ex: args: [''],
const request = {
chaincodeId: options.chaincode_id,
txId: transaction_id,
fcn: 'queryAllCars',
args: ['']
};
return channel.queryByChaincode(request);