2016-09-09 7 views
0

「私はちょうど何か起こったのかチェインコードでデプロイして起動する」というハイパーポストを参照してください。ハイバーダーチェーンコード "レジスタ"と "デプロイ"

"登録"チェーンコードでは、チェーンコードを作成する際に、チェーンコードをValidationPeerに登録してから、他のノードがネットワーク内のチェーンコードを見つけてローカルにダウンロードしてドッキング画像を作成する必要がありますか?後で同じチェーンコードが複数回展開されるとどうなりますか?以前の状態を上書きしますか?

参照:「デプロイ」鎖コード中 What happened exactly on chaincode deploy and invoke , query, in Hyperledger?

がトランザクションの形で元帳に提出され、ネットワーク内のすべてのノードに配布されます。各ノードは、このチェーンコードが埋め込まれた新しいDockerコンテナを作成します。その後、コンテナが開始され、Initメソッドが実行されます。

"クエリ"中に、チェーンコードは現在の状態を読み取り、それをユーザーに返します。この取引はブロックチェーンには保存されません。

"呼び出し"中に - チェーンコードは、元帳の変数の状態を変更できます。各 "Invoke"トランザクションは、元帳の "ブロック"に追加されます。

答えて

3

チェーンコードレベルで「登録」機能は見られませんでした。私はコアAPIメソッド "Registrar"について語っていることを前提にしています(0120)。ログインするには、著者はEnrolmentIDとEnrolmentPasswordを提供して自分の身元を確認する必要があります。 IDとパスワードが正しい場合、この特定の著者のために新しい登録およびトランザクション証明書が生成されます。

この瞬間から、著者はネットワークにチェーンコードを展開できます。 「展開」リクエストは、ピアの1つに送信されます。このピアは "path to chaincode"、 "init arguments"、 "chaincode source code"に関する情報を持つ "transaction"を作成します。次に、ピアは次のようになり、このトランザクションのハッシュコードを計算します:

a13c53fe822da398aaca7af59f064ae6f85c1d048fcb2ed77c3cacc137964a424deba679390df8d156e49c5fff7cdfc9fecec373a3cddd17e46ca9404096a52d 

このハッシュはchaincode名として、後に使用されます。

VPはネットワーク内の他のすべてのVPとオープンな接続を維持し、すべてのVPにトランザクションをブロードキャストできます(詳細についてはコンセンサスの説明を参照)。
すべてのピアは、展開されたチェーンコードに必要なローカルドッカーイメージを作成するために、トランザクションからの情報を使用します。新しいドッカーコンテナを起動し、Initメソッドを実行します。

同じチェーンコードを再度展開しようとすると、Fabricはその名前のチェーンコードがすでに展開されていて、初期化をスキップします。

展開要求(パス、引数、チェーンコード内のシンボル)を変更すると、ピアは別のハッシュを生成し、新しいチェーンコードを展開します(以前のバージョンは影響を受けません)。

+0

おかげで、あなたは、セルゲイ、レジスタについては は、私が実際にhyperledgerドキュメントに以下を参照していますEN /最新/セットアップ/ chaincodeセットアップ/ はchaincodeの起動と登録 を実行し、検証ピアとchaincodeを開始し、登録するには、次のchaincodeコマンド: CORE_CHAINCODE_ID_NAME = mycc CORE_PEER_ADDRESS = 0.0.0.0:7051 ./chaincode_example02 チェーンコードコンソールには、「受信したREGISTERED、呼び出し準備完了」というメッセージが表示されます。これは、チェーンコードが要求を受信する準備ができていることを示しています。 –

+0

この例では、Fabricを開発モード(-peer-chaincodedev)で実行する方法について説明します。このモードでは、任意の名前を使用してチェーンコードを実行できます。チェーンコードは、ローカル環境で(ドッカーコンテナなしで)プロセスとして実行されます。開発者はこのモードをデバッグに使用することができます。なぜなら、デバッガはより速く動作し、チェーンコードからのデバッグメッセージにアクセスできるからです。 –

0

技術的にREGISTERを展開トランザクションの一部である

Chaincodeそれと対話するための展開、起動、クエリメソッド/ APIを提供しています。キアコードのデプロイについては、実際にエンドユーザー(またはアプリケーション)がチェーンコードのDeployメソッドを呼び出すことについて話しています。

Deployトランザクションを処理するピアは、Dockerコンテナでチェーンコードを開始しますが、Deployトランザクション処理はここで終了しません。チェーンコードコンテナにシム層があり、これは実際にピアと実際に通信します。シム層とピアとの間のこの通信は、ChaincodeMessageによって管理されます。この宣言によって定義されているようChaincodeMessage(S)の種類があります。

enum Type { 
    UNDEFINED = 0; 
    REGISTER = 1; 
    REGISTERED = 2; 
    INIT = 3; 
    READY = 4; 
    TRANSACTION = 5; 
    COMPLETED = 6; 
    ERROR = 7; 
    GET_STATE = 8; 
    PUT_STATE = 9; 
    DEL_STATE = 10; 
    INVOKE_CHAINCODE = 11; 
    INVOKE_QUERY = 12; 
    RESPONSE = 13; 
    QUERY = 14; 
    QUERY_COMPLETED = 15; 
    QUERY_ERROR = 16; 
    RANGE_QUERY_STATE = 17; 
} 

は今ソースhttp://hyperledger-fabric.readthedocs.io/en/latest/protocol-spec/#33-chaincodeからの引用:

Upon deploy (chaincode container is started), the shim layer sends a one 
time REGISTER message to the validating peer with the payload containing the 
ChaincodeID. The validating peer responds with REGISTERED or ERROR on 
success or failure respectively. The shim closes the connection and exits if 
it receives an ERROR. 

したがって、あなたがあなたのchaincode後

10:08:38.450 [shim] DEBU : Registering.. sending REGISTER 
10:08:39.901 [shim] DEBU : []Received message REGISTERED from shim 
10:08:39.965 [shim] DEBU : []Handling ChaincodeMessage of type: REGISTERED(state:created) 
10:08:40.037 [shim] DEBU : Received REGISTERED, ready for invocations 

を取得します実際にQuery and Invokeを受け取る準備ができています。 .......... http://hyperledger-fabric.readthedocs.io/: