2017-07-20 9 views
1

v1.0の例を見ているうちに、混乱しました。ハイパージーガーファブリックv1.0台帳を変更するメソッドの照会を使用

私が理解する限り、クエリは、ローカルで実行されるときに元帳を変更しません(注文、コミット、承認など)。

しかし、それは呼び出し元の観点からです。チェーンコード内では、すべてのCAと情報が有効である場合にクライアントが呼び出すものを実行します。

したがって、たとえば、私が呼び出す場合

peer chaincode query -C mychannel -n chaincode -c '{"Args":["query", "a"]}' 

これは大丈夫でしょう。それは単にaを照会する。

しかし、私は行動がその呼び出しを与えられるであろう何

peer chaincode query -C mychannel -n chaincode -c '{"Args":["**invoke**", "a"]}' 

は、総勘定元帳への書き込みが含ま呼び出す場合?一方、また

、私は、クエリメソッドに呼び出すコールした場合

(e.g. peer chaincode invoke ~~~ {"Args":["query", "a"]}) 

どう行動でしょうか?

私が理解する限り、実際のチェーンコードでは、クエリか呼び出しかを区別できません。それはちょうど連鎖法を実行します。

私は遠いですか?

答えて

1

確かにこれはちょっと混乱します。特に、cliツールを使用しているときはそれほど明白でないことを考慮に入れてください。

  1. あなたが支持しピアに
  2. 賛同ピアを取引提案を送る結果
  3. 取引シミュレーションとサインを実行:あなたは以下のことのように流れが働く呼び出すとピア・CLIコマンドを使用しているときここで、事あります
  4. クライアントが結果を受け取り、
  5. ブロックがピアに配信
  6. 注文サービスは、ブロックをカット注文サービスにそれらを送信
  7. ピアが
  8. 結局
  9. がblockchainに追加ブロックのトランザクションを検証

今ここで差があり、あなたがqueryパラメータを使用してピアCLIを実行しているときにのみ行いますキー:

  1. ますエンドポイントピアにトランザクション提案を送信する
  2. ピアを推薦することはトランザクションシミュレーションを実行し、結果に署名する

したがって、結果が注文サービスに送信されないため、チェーンコードが変更されてもコミットされないため、最終的なピア状態に影響はありません。

+0

もう1つ質問です!その場合、 'query'でピアCLIを実行し、メソッドが元帳状態を変更した場合、それはローカル元帳を変更するのか、それとも何もしません。 ありがとう! – alwayscurious

+0

注文サービスに保証された提案を送信しない限り、状態は変更されません。 endorsersはトランザクションの実行をシミュレートしますが、実際の変更はトランザクションが発注された後にのみ発生します。 peer cliとqueryコマンドの場合、関数が状態を変更する可能性があるにもかかわらず、何も変更されません。 –

+0

別の質問です。申し訳ありませんが質問を続けています。 「機能が状態を変えるかもしれないのに、何も変わらない」と言うと、それは2つの州があるということですか? 私が正しく理解していれば、ローカルの状態が変わる可能性があるトランザクション実行をシミュレートしますが、注文サービスに保証された提案を送信しない限り、状態は変更されません。 :) – alwayscurious

関連する問題