質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Hyperledger Fabric

Hyperledger Fabricは、ブロックチェーン基盤の一つです。OSSで、大手企業や金融機関が多く参画しているブロックチェーン技術推進コミュニティの元で開発されており、ビジネス上の様々なユースケースに対応する設計になっています。

バリデーション

Validationとは特定の入力データが、求められた条件に当てまっているかをチェックするために使われます。

Fabric

Pythonで書かれたデプロイ・システム管理ツール。シンプルで始めやすいのが特徴です。 シェルスクリプトに慣れている人には親しみやすい管理ツールと言えます。 同様のツールにCapistranoがあります。

Q&A

0回答

416閲覧

Hyperledger Fabric のデータのバリデーションについて

_ng.h.ks_

総合スコア13

Hyperledger Fabric

Hyperledger Fabricは、ブロックチェーン基盤の一つです。OSSで、大手企業や金融機関が多く参画しているブロックチェーン技術推進コミュニティの元で開発されており、ビジネス上の様々なユースケースに対応する設計になっています。

バリデーション

Validationとは特定の入力データが、求められた条件に当てまっているかをチェックするために使われます。

Fabric

Pythonで書かれたデプロイ・システム管理ツール。シンプルで始めやすいのが特徴です。 シェルスクリプトに慣れている人には親しみやすい管理ツールと言えます。 同様のツールにCapistranoがあります。

0グッド

0クリップ

投稿2020/10/03 06:33

編集2020/10/03 08:23

不明なこと

  1. Hyperledger Fabric でバリデーションは行われているのか?
  2. Peer(チェーンコード)は、物理的にどのデータを参照しているのか?

この疑問が出てきた経緯を以下に記載します。

作業概要

fabric-samples.gitで公開されているfabcarを中心にHyperledger Fabricの環境構築やアプリケーションについて学習しています。
ふと、データのバリデーションはどうなっているのかと思い、fabcar環境構築後、couchDBを編集してみることにしました。
作業は以下の通りです。(※Dockerイメージやバイナリファイルなどはダウンロード済みのものとご理解ください。)

  1. 作業1~5 ・・・ 実験準備
  2. 作業6~13 ・・・ 実験

実験準備

1: fabcarの環境を構築するため、fabcar/startFabric.shを実行
→ "Start by changing into the "javascript" directory:"に従い、javascriptディレクトリで以下の作業を行う。

2: fabcar/javascriptディレクトリへ移動し、パッケージのインストール

npm install

node_modulesが存在することを確認。

3: 管理者とユーザを作成

$ node enrollAdmin.js Wallet path: /home/vagrant/fabric-samples/fabcar/javascript/wallet Successfully enrolled admin user "admin" and imported it into the wallet $ node registerUser.js Wallet path: /home/vagrant/fabric-samples/fabcar/javascript/wallet Successfully registered and enrolled admin user "appUser" and imported it into the wallet

4: クエリが実行できることを確認

$ node query.js Wallet path: /home/vagrant/fabric-samples/fabcar/javascript/wallet Transaction has been evaluated, result is: [{"Key":"CAR0","Record":{"make":"Toyota","model":"Prius","colour":"blue","owner":"Tomoko"}},{"Key":"CAR1","Record":{"make":"Ford","model":"Mustang","colour":"red","owner":"Brad"}},{"Key":"CAR2","Record":{"make":"Hyundai","model":"Tucson","colour":"green","owner":"Jin Soo"}},{"Key":"CAR3","Record":{"make":"Volkswagen","model":"Passat","colour":"yellow","owner":"Max"}},{"Key":"CAR4","Record":{"make":"Tesla","model":"S","colour":"black","owner":"Adriana"}},{"Key":"CAR5","Record":{"make":"Peugeot","model":"205","colour":"purple","owner":"Michel"}},{"Key":"CAR6","Record":{"make":"Chery","model":"S22L","colour":"white","owner":"Aarav"}},{"Key":"CAR7","Record":{"make":"Fiat","model":"Punto","colour":"violet","owner":"Pari"}},{"Key":"CAR8","Record":{"make":"Tata","model":"Nano","colour":"indigo","owner":"Valeria"}},{"Key":"CAR9","Record":{"make":"Holden","model":"Barina","colour":"brown","owner":"Shotaro"}}]

5: 4で実行したクエリは、全データの取得なので、query.jsをコピーして、特定のキーを取得するスクリプト(queryCar.js)を作成

javascript

1// 一部抜粋(query.jsから変更したところ(46行目)のみ) 2//const result = await contract.evaluateTransaction('queryAllCars'); // del 3const result = await contract.evaluateTransaction('queryCar', 'CAR4'); // add(CAR4のデータを取得)
$ node queryCar.js Wallet path: /home/vagrant/fabric-samples/fabcar/javascript/wallet Transaction has been evaluated, result is: {"make":"Tesla","model":"S","colour":"black","owner":"Adriana"}

実験

6: couchDBのダッシュボードへアクセス(http://localhost:5984/_utils)し、CAR4のデータを探し出し編集しました。
colourのデータを"black"から"xxxxx"へ変更。
イメージ説明

7: 5で作成したクエリを実行(バリデーションが働くなら、エラーなどが返ってくるのではないか?)

$ node queryCar.js Wallet path: /home/vagrant/fabric-samples/fabcar/javascript/wallet Transaction has been evaluated, result is: {"make":"Tesla","model":"S","colour":"black","owner":"Adriana"}

→ エラーが返ってくるわけでもなく、"xxxxx"になっているわけでもなく、"black"が入っていて正常にレスポンスが返ってくる。(不明なこと1関連)

8: このサンプルでは、couchDBは二つ起動するので、もしかしてそのコンテナのDBを拾ってきているのかと思い、6と同様の作業をもう一つのcouchDB(http://localhost:7984/_utils)へ行う。
→ 接続プロファイルの観点から、そうではないはずとは思うのですが。。。
→ ここでは、xxxxxではなく、違いを明確にするため7984を付与しました。("xxxxx7984"を"colour"へセット)

9: 5で作成したクエリを実行

$ node queryCar.js Wallet path: /home/vagrant/fabric-samples/fabcar/javascript/wallet Transaction has been evaluated, result is: {"make":"Tesla","model":"S","colour":"black","owner":"Adriana"}

デジャヴです。。。
→ 編集されてないことをチェックしないのでしょうか?

10: そもそもcouchDBを見てないということなのだろうか?と思い、couchDBのコンテナを停止してみます。

$ docker stop couchdb0 couchdb0 $ docker ps -f name=couchdb0 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES # ちなみにcouchdb1(port:7984)は生きています・ $ docker ps -f name=couchdb1 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a893b7964650 hyperledger/fabric-couchdb "tini -- /docker-ent…" About an hour ago Up About an hour 4369/tcp, 9100/tcp, 0.0.0.0:7984->5984/tcp couchdb1

11: 5で作成したクエリを実行

$ node queryCar.js Wallet path: /home/vagrant/fabric-samples/fabcar/javascript/wallet Transaction has been evaluated, result is: {"make":"Tesla","model":"S","colour":"black","owner":"Adriana"}

返ってきました。。。

12: coudb1も止めてみます。

$ docker stop couchdb1 couchdb1 $ docker ps -f name=couchdb1 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

13: 5で作成したクエリを実行

$ node queryCar.js Wallet path: /home/vagrant/fabric-samples/fabcar/javascript/wallet Transaction has been evaluated, result is: {"make":"Tesla","model":"S","colour":"black","owner":"Adriana"}

デジャヴです。。。
→ 物理的なデータはどこを参照しているのでしょうか?(不明なこと2関連)

補足

13まで終えたのち、couchdb0, couchdb1を起動し、キーを指定しての検索ではなく、範囲検索(query.js)を実行するとcolourに"xxxxx"がセットされていました。なぜ。。。

$ node query.js Wallet path: /home/vagrant/fabric-samples/fabcar/javascript/wallet Transaction has been evaluated, result is: [{"Key":"CAR0","Record":{"make":"Toyota","model":"Prius","colour":"blue","owner":"Tomoko"}},{"Key":"CAR1","Record":{"make":"Ford","model":"Mustang","colour":"red","owner":"Brad"}},{"Key":"CAR2","Record":{"make":"Hyundai","model":"Tucson","colour":"green","owner":"Jin Soo"}},{"Key":"CAR3","Record":{"make":"Volkswagen","model":"Passat","colour":"yellow","owner":"Max"}},{"Key":"CAR4","Record":{"make":"Tesla","model":"S","colour":"xxxxx","owner":"Adriana"}},{"Key":"CAR5","Record":{"make":"Peugeot","model":"205","colour":"purple","owner":"Michel"}},{"Key":"CAR6","Record":{"make":"Chery","model":"S22L","colour":"white","owner":"Aarav"}},{"Key":"CAR7","Record":{"make":"Fiat","model":"Punto","colour":"violet","owner":"Pari"}},{"Key":"CAR8","Record":{"make":"Tata","model":"Nano","colour":"indigo","owner":"Valeria"}},{"Key":"CAR9","Record":{"make":"Holden","model":"Barina","colour":"brown","owner":"Shotaro"}}]

環境

fabric-samples v2.1.1

最後に

作業を大量に書いてしましたが、疑問点は、冒頭の不明なこと2点です。
お分かりになる方いましたら、ご教授ください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問