Hyperledger Fabric 介绍Hyperledger Fabric 专题

10. Hyperledger Fabric 专题 - Fabr

2020-03-05  本文已影响0人  furnace

Hyperledger Fabric 专题 - Fabric 的重要日志输出

假设存在下列 docker 容器。

dev-peer0.org1.example.com-dfgchaincode-1.0
dev-peer1.org1.example.com-dfgchaincode-1.0
dev-peer0.org2.example.com-dfgchaincode-1.0
dev-peer1.org2.example.com-dfgchaincode-1.0

peer0.org1.example.com
peer1.org1.example.com
peer0.org2.example.com
peer1.org2.example.com

我们只监控了下列 docker 容器的日志:

dev-peer0.org1.example.com-dfgchaincode-1.0
dev-peer0.org2.example.com-dfgchaincode-1.0

peer0.org1.example.com
peer0.org2.example.com

1. 接口 add(key, value)

当链码接口 add(key, value) 被调用时,链码进程和对端节点进程的重要输出日志。

1.1 链码重要的日志输出

当发生一次链码接口调用时,会产生如下输出。最重要的是注意 onChaincodeMessage,同时 payload 中包含接口名、参数的 BASE64 编码格式。

01:31:37:369 FINE    org.hyperledger.fabric.shim.impl.InnvocationTaskManager onChaincodeMessage       [dcfee6e6] {
  "type": "TRANSACTION",
  "payload": "CgNhZGQKBWZpbGUwCiJ7ImtleSI6ICJmaWxlMCIsICJ2YWx1ZSI6ICJmaWxlMCJ9",
  "txid": "dcfee6e6ae088526edb7d645836c7ea12e44276396c76e6b3644fb584e80ab4c",
  "proposal": {
    "proposalBytes": "CvYICpMBCAMQARoMCPmJ/PIFEMCHx6MBIglteWNoYW5uZWwqQGRjZmVlNmU2YWUwODg1MjZlZGI3ZDY0NTgzNmM3ZWExMmU0NDI3NjM5NmM3NmU2YjM2NDRmYjU4NGU4MGFiNGM6EBIOEgxkZmdjaGFpbmNvZGVCIJS7fxl892EaRUBDqyuXkBGk61ePHV5rbgy+rAYKQtJjEt0HCsAHCgdPcmcxTVNQErQHLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNqakNDQWpXZ0F3SUJBZ0lVRTJGWVBWMFE4NzBPcmZnUld0eXB3RjNBQitvd0NnWUlLb1pJemowRUF3SXcKY3pFTE1Ba0dBMVVFQmhNQ1ZWTXhFekFSQmdOVkJBZ1RDa05oYkdsbWIzSnVhV0V4RmpBVUJnTlZCQWNURFZOaApiaUJHY21GdVkybHpZMjh4R1RBWEJnTlZCQW9URUc5eVp6RXVaWGhoYlhCc1pTNWpiMjB4SERBYUJnTlZCQU1UCkUyTmhMbTl5WnpFdVpYaGhiWEJzWlM1amIyMHdIaGNOTWpBd016QTBNREV5TmpBd1doY05NakV3TXpBME1ERXoKTVRBd1dqQkNNVEF3RFFZRFZRUUxFd1pqYkdsbGJuUXdDd1lEVlFRTEV3UnZjbWN4TUJJR0ExVUVDeE1MWkdWdwpZWEowYldWdWRERXhEakFNQmdOVkJBTVRCWFZ6WlhJeU1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEClFnQUVJeXlJWjVCY0JKWkhGall6ak9ub0tSS0RZUExnbEc0VHFsSjZoWWhpUTQ0L2lQcEtDZ2JVY0tSVlpjc2sKN3FDRjZwNi9BdExvQWNzd095OXduL0J6YmFPQjF6Q0IxREFPQmdOVkhROEJBZjhFQkFNQ0I0QXdEQVlEVlIwVApBUUgvQkFJd0FEQWRCZ05WSFE0RUZnUVUyU3NuazNsV3l6ZllyNFk4ZnNjcG1rUVAxcEF3S3dZRFZSMGpCQ1F3CklvQWdvTlFGRG13eWNHZkEyYVN1U1l4bXN1UTJDc09ZK2ZqS1ZtdWV4dnNBOU9rd2FBWUlLZ01FQlFZSENBRUUKWEhzaVlYUjBjbk1pT25zaWFHWXVRV1ptYVd4cFlYUnBiMjRpT2lKdmNtY3hMbVJsY0dGeWRHMWxiblF4SWl3aQphR1l1Ulc1eWIyeHNiV1Z1ZEVsRUlqb2lkWE5sY2pJaUxDSm9aaTVVZVhCbElqb2lZMnhwWlc1MEluMTlNQW9HCkNDcUdTTTQ5QkFNQ0EwY0FNRVFDSUR3aUlscUZHaDFNWFpQOHg0SHFzeTI0WmZ4YWdIaGxPakl3WkJYRmRCUDIKQWlBZlhyK1JGTzBaMzlqTW9iQytyUGRJR2RCVXNDdTBBM0tXbEoxSnhaWjdYdz09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KEhgPel/w719m9fkiYuuT0AgAkvG6Ka6ua08SSApGCkQIARIOEgxkZmdjaGFpbmNvZGUaMAoDYWRkCgVmaWxlMAoieyJrZXkiOiAiZmlsZTAiLCAidmFsdWUiOiAiZmlsZTAifQ==",
    "signature": "MEUCIQCtmrpr1dJZJt0FD5llNhnAzJ1djqlu8v/G4EEC3jskdQIgbT0msXjUZDMs1GqrwFt1XAafI9UoUvz8ec7k3uXJ0OQ="
  },
  "channelId": "mychannel"
}

"payload": "CgNhZGQKBWZpbGUwCiJ7ImtleSI6ICJmaWxlMCIsICJ2YWx1ZSI6ICJmaWxlMCJ9" BASE64 解码后为:

�add
�file0
"{"key": "file0", "value": "file0"}

同时,还会输出下列重要的日志,注意与接口 add(file,value) 相关的部分以及一些格式化的日志,如 Got invoke routing request 等:

01:31:37:380 INFO    org.hyperledger.fabric.contract.ContractRouter processRequest                    Got invoke routing request
01:31:37:383 INFO    org.hyperledger.fabric.contract.ContractRouter processRequest                    Got the invoke request for:add [file0, {"key": "file0", "value": "file0"}]
01:31:37:384 FINE    org.hyperledger.fabric.contract.execution.impl.ContractInvocationRequest <init>  add
01:31:37:384 FINE    org.hyperledger.fabric.contract.execution.impl.ContractInvocationRequest <init>  default add [[B@82c3141f, [B@90b5ba3b]
01:31:37:387 INFO    org.hyperledger.fabric.contract.ContractRouter processRequest                    Got routing:add:org.union.chaincode.CaojiaduContract
01:31:37:389 FINE    org.hyperledger.fabric.contract.execution.impl.ContractExecutionService executeR Routing Requestadd @2eb669a6

还有调用成功的日志输出:

01:31:37:624 FINE    org.hyperledger.fabric.shim.impl.ChaincodeInnvocationTask call                   [dcfee6e6] Invoke succeeded. Sending COMPLETED

1.2 节点 peer 的重要输出

1.2.1 直接组织的节点 peer 的输出

注意,包含通道名称 mychannel,链码名称 dfgchaincode。同时,还包含一个区块产生的流程:Received blockValidated blockCommitted block

2020-03-04 01:31:37.362 UTC [endorser] callChaincode -> INFO 07f [mychannel][dcfee6e6] Entry chaincode: name:"dfgchaincode"
2020-03-04 01:31:37.627 UTC [endorser] callChaincode -> INFO 080 [mychannel][dcfee6e6] Exit chaincode: name:"dfgchaincode"  (265ms)
2020-03-04 01:31:37.628 UTC [comm.grpc.server] 1 -> INFO 081 unary call completed grpc.service=protos.Endorser grpc.method=ProcessProposal grpc.peer_address=172.28.0.1:51944 grpc.code=OK grpc.call_duration=266.444284ms
2020-03-04 01:31:39.692 UTC [gossip.privdata] StoreBlock -> INFO 082 [mychannel] Received block [5] from buffer
2020-03-04 01:31:39.694 UTC [committer.txvalidator] Validate -> INFO 083 [mychannel] Validated block [5] in 1ms
2020-03-04 01:31:39.709 UTC [kvledger] CommitWithPvtData -> INFO 084 [mychannel] Committed block [5] with 1 transaction(s) in 14ms (state_validation=0ms block_and_pvtdata_commit=9ms state_commit=1ms) commitHash=[c62657a8ce62191b8a1961faf5ebe4e9e11c4876d8717b988c626b4456e26722]

1.2.2 相关组织的节点 peer 的输出

注意,这里只包含一个区块产生的流程:Received blockValidated blockCommitted block。而不包含链码调用相关的信息。

2020-03-04 01:31:39.687 UTC [gossip.privdata] StoreBlock -> INFO 069 [mychannel] Received block [5] from buffer
2020-03-04 01:31:39.689 UTC [committer.txvalidator] Validate -> INFO 06a [mychannel] Validated block [5] in 2ms
2020-03-04 01:31:39.701 UTC [kvledger] CommitWithPvtData -> INFO 06b [mychannel] Committed block [5] with 1 transaction(s) in 11ms (state_validation=0ms block_and_pvtdata_commit=6ms state_commit=3ms) commitHash=[c62657a8ce62191b8a1961faf5ebe4e9e11c4876d8717b988c626b4456e26722]

2. 接口 query(key)

当链码接口 query(key) 被调用时,链码进程和对端节点进程的重要输出日志。

下面的日志大部分和上面的日志类似部分就不再作解释了,独特的部分会指出来。

2.1 链码重要的日志输出

01:53:43:563 FINE    org.hyperledger.fabric.shim.impl.InnvocationTaskManager onChaincodeMessage       [b14f5a0a] {
  "type": "TRANSACTION",
  "payload": "CgVxdWVyeQoFZmlsZTA=",
  "txid": "b14f5a0a2413a378c4d4f52e4d5624f95b59f9953c0d95ac7abc2fc57df0ae1e",
  "proposal": {
    "proposalBytes": "CvYICpMBCAMQARoMCKeU/PIFEICZrYQCIglteWNoYW5uZWwqQGIxNGY1YTBhMjQxM2EzNzhjNGQ0ZjUyZTRkNTYyNGY5NWI1OWY5OTUzYzBkOTVhYzdhYmMyZmM1N2RmMGFlMWU6EBIOEgxkZmdjaGFpbmNvZGVCIECI5w6scNo144zC14H9lQRnMocC3+2zL6Q4/b8AGMgHEt0HCsAHCgdPcmcxTVNQErQHLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNqakNDQWpXZ0F3SUJBZ0lVRTJGWVBWMFE4NzBPcmZnUld0eXB3RjNBQitvd0NnWUlLb1pJemowRUF3SXcKY3pFTE1Ba0dBMVVFQmhNQ1ZWTXhFekFSQmdOVkJBZ1RDa05oYkdsbWIzSnVhV0V4RmpBVUJnTlZCQWNURFZOaApiaUJHY21GdVkybHpZMjh4R1RBWEJnTlZCQW9URUc5eVp6RXVaWGhoYlhCc1pTNWpiMjB4SERBYUJnTlZCQU1UCkUyTmhMbTl5WnpFdVpYaGhiWEJzWlM1amIyMHdIaGNOTWpBd016QTBNREV5TmpBd1doY05NakV3TXpBME1ERXoKTVRBd1dqQkNNVEF3RFFZRFZRUUxFd1pqYkdsbGJuUXdDd1lEVlFRTEV3UnZjbWN4TUJJR0ExVUVDeE1MWkdWdwpZWEowYldWdWRERXhEakFNQmdOVkJBTVRCWFZ6WlhJeU1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEClFnQUVJeXlJWjVCY0JKWkhGall6ak9ub0tSS0RZUExnbEc0VHFsSjZoWWhpUTQ0L2lQcEtDZ2JVY0tSVlpjc2sKN3FDRjZwNi9BdExvQWNzd095OXduL0J6YmFPQjF6Q0IxREFPQmdOVkhROEJBZjhFQkFNQ0I0QXdEQVlEVlIwVApBUUgvQkFJd0FEQWRCZ05WSFE0RUZnUVUyU3NuazNsV3l6ZllyNFk4ZnNjcG1rUVAxcEF3S3dZRFZSMGpCQ1F3CklvQWdvTlFGRG13eWNHZkEyYVN1U1l4bXN1UTJDc09ZK2ZqS1ZtdWV4dnNBOU9rd2FBWUlLZ01FQlFZSENBRUUKWEhzaVlYUjBjbk1pT25zaWFHWXVRV1ptYVd4cFlYUnBiMjRpT2lKdmNtY3hMbVJsY0dGeWRHMWxiblF4SWl3aQphR1l1Ulc1eWIyeHNiV1Z1ZEVsRUlqb2lkWE5sY2pJaUxDSm9aaTVVZVhCbElqb2lZMnhwWlc1MEluMTlNQW9HCkNDcUdTTTQ5QkFNQ0EwY0FNRVFDSUR3aUlscUZHaDFNWFpQOHg0SHFzeTI0WmZ4YWdIaGxPakl3WkJYRmRCUDIKQWlBZlhyK1JGTzBaMzlqTW9iQytyUGRJR2RCVXNDdTBBM0tXbEoxSnhaWjdYdz09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KEhiDzZOFXK9VrlV2gOldrfOI6zLvPTsTvZoSJgokCiIIARIOEgxkZmdjaGFpbmNvZGUaDgoFcXVlcnkKBWZpbGUw",
    "signature": "MEUCIQDSjj6G4jKfCKT8jBLHpN5TwNviVTkKFlHa+sy3Eh11XgIgCYKRbr5aX4FEVQMz3oMZPGomL5BxZadLwZbi9Agt4Gk="
  },
  "channelId": "mychannel"
}

其中,"payload": "CgVxdWVyeQoFZmlsZTA=" BASE64 解码为:

�query
�file0
01:53:43:569 INFO    org.hyperledger.fabric.contract.ContractRouter processRequest                    Got invoke routing request
01:53:43:570 INFO    org.hyperledger.fabric.contract.ContractRouter processRequest                    Got the invoke request for:query [file0]
01:53:43:571 FINE    org.hyperledger.fabric.contract.execution.impl.ContractInvocationRequest <init>  query
01:53:43:572 FINE    org.hyperledger.fabric.contract.execution.impl.ContractInvocationRequest <init>  default query [[B@650a2fdb]
01:53:43:572 INFO    org.hyperledger.fabric.contract.ContractRouter processRequest                    Got routing:query:org.union.chaincode.CaojiaduContract
01:53:43:573 FINE    org.hyperledger.fabric.contract.execution.impl.ContractExecutionService executeR Routing Requestquery @93bcc8d7

注意,这里竟然还会包含查询结果的内容日志:

01:53:43:592 INFO    org.hyperledger.fabric.shim.impl.ChaincodeInnvocationTask invoke                 Got response back from the peertype: RESPONSE
payload: "{\"key\":\"file0\",\"value\":\"file0\",\"timestamp\":1583285497343,\"txHash\":\"dcfee6e6ae088526edb7d645836c7ea12e44276396c76e6b3644fb584e80ab4c\",\"extraValue\":null}"
txid: "b14f5a0a2413a378c4d4f52e4d5624f95b59f9953c0d95ac7abc2fc57df0ae1e"
channel_id: "mychannel"
01:53:43:595 FINE    org.hyperledger.fabric.shim.impl.ChaincodeInnvocationTask invoke                 [b14f5a0a] RESPONSE response received.
01:53:43:595 FINE    org.hyperledger.fabric.shim.impl.ChaincodeInnvocationTask invoke                 [b14f5a0a] Successful response received.
01:53:43:597 FINE    org.hyperledger.fabric.shim.impl.ChaincodeInnvocationTask call                   [b14f5a0a] Invoke succeeded. Sending COMPLETED

2.2 节点 peer 的重要输出

2.2.1 直接组织的节点 peer 的输出

2020-03-04 01:53:43.559 UTC [endorser] callChaincode -> INFO 088 [mychannel][b14f5a0a] Entry chaincode: name:"dfgchaincode"
2020-03-04 01:53:43.600 UTC [endorser] callChaincode -> INFO 089 [mychannel][b14f5a0a] Exit chaincode: name:"dfgchaincode"  (40ms)

2.2.2 相关组织的节点 peer 的输出

查询接口无日志输出。

3. 接口 queryList(keys)

当链码接口 queryList(keys) 被调用时,链码进程和对端节点进程的重要输出日志。

下面的日志大部分和上面的日志类似部分就不再作解释了,独特的部分会指出来。

3.1 链码重要的日志输出

3.2 节点 peer 的重要输出

02:38:44:279 FINE    org.hyperledger.fabric.shim.impl.InnvocationTaskManager onChaincodeMessage       [0bc74105] {
  "type": "TRANSACTION",
  "payload": "CglxdWVyeUxpc3QKH1siZmlsZTEwMCIsImZpbGUxMDEiLCJmaWxlMTAyIl0=",
  "txid": "0bc74105b9b5e358faf774e57ec57facfdc1856149aa98928cc20a46c1b2fe24",
  "proposal": {
    "proposalBytes": "CvUICpIBCAMQARoLCLSp/PIFEMCWunwiCW15Y2hhbm5lbCpAMGJjNzQxMDViOWI1ZTM1OGZhZjc3NGU1N2VjNTdmYWNmZGMxODU2MTQ5YWE5ODkyOGNjMjBhNDZjMWIyZmUyNDoQEg4SDGRmZ2NoYWluY29kZUIgYXjB01DstzzhUMwpATu7d6Cwt3fx3qD8CcMYIvrZdRwS3QcKwAcKB09yZzFNU1AStActLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJQ2pqQ0NBaldnQXdJQkFnSVVFMkZZUFYwUTg3ME9yZmdSV3R5cHdGM0FCK293Q2dZSUtvWkl6ajBFQXdJdwpjekVMTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oCmJpQkdjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVQKRTJOaExtOXlaekV1WlhoaGJYQnNaUzVqYjIwd0hoY05NakF3TXpBME1ERXlOakF3V2hjTk1qRXdNekEwTURFegpNVEF3V2pCQ01UQXdEUVlEVlFRTEV3WmpiR2xsYm5Rd0N3WURWUVFMRXdSdmNtY3hNQklHQTFVRUN4TUxaR1Z3CllYSjBiV1Z1ZERFeERqQU1CZ05WQkFNVEJYVnpaWEl5TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0QKUWdBRUl5eUlaNUJjQkpaSEZqWXpqT25vS1JLRFlQTGdsRzRUcWxKNmhZaGlRNDQvaVBwS0NnYlVjS1JWWmNzawo3cUNGNnA2L0F0TG9BY3N3T3k5d24vQnpiYU9CMXpDQjFEQU9CZ05WSFE4QkFmOEVCQU1DQjRBd0RBWURWUjBUCkFRSC9CQUl3QURBZEJnTlZIUTRFRmdRVTJTc25rM2xXeXpmWXI0WThmc2NwbWtRUDFwQXdLd1lEVlIwakJDUXcKSW9BZ29OUUZEbXd5Y0dmQTJhU3VTWXhtc3VRMkNzT1krZmpLVm11ZXh2c0E5T2t3YUFZSUtnTUVCUVlIQ0FFRQpYSHNpWVhSMGNuTWlPbnNpYUdZdVFXWm1hV3hwWVhScGIyNGlPaUp2Y21jeExtUmxjR0Z5ZEcxbGJuUXhJaXdpCmFHWXVSVzV5YjJ4c2JXVnVkRWxFSWpvaWRYTmxjaklpTENKb1ppNVVlWEJsSWpvaVkyeHBaVzUwSW4xOU1Bb0cKQ0NxR1NNNDlCQU1DQTBjQU1FUUNJRHdpSWxxRkdoMU1YWlA4eDRIcXN5MjRaZnhhZ0hobE9qSXdaQlhGZEJQMgpBaUFmWHIrUkZPMFozOWpNb2JDK3JQZElHZEJVc0N1MEEzS1dsSjFKeFpaN1h3PT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoSGEIjwk38juxcvi8wkCn9MkiIRIGqlvRoChJECkIKQAgBEg4SDGRmZ2NoYWluY29kZRosCglxdWVyeUxpc3QKH1siZmlsZTEwMCIsImZpbGUxMDEiLCJmaWxlMTAyIl0=",
    "signature": "MEUCIQCHH5sg6yqFIKE6hhVahdQxhQPQj5fAHn3mpK+B++Hz7gIgfF1v1qf5lBNS/XxzYCz0fPENuaWKcTZ8x6+sh2XV7QA="
  },
  "channelId": "mychannel"
}
02:38:44:280 FINE    org.hyperledger.fabric.shim.impl.InnvocationTaskManager handleMsg                [0bc74105] Received TRANSACTION
02:38:44:284 INFO    org.hyperledger.fabric.contract.ContractRouter processRequest                    Got invoke routing request
02:38:44:285 INFO    org.hyperledger.fabric.contract.ContractRouter processRequest                    Got the invoke request for:queryList [["file100","file101","file102"]]
02:38:44:286 FINE    org.hyperledger.fabric.contract.execution.impl.ContractInvocationRequest <init>  queryList
02:38:44:286 FINE    org.hyperledger.fabric.contract.execution.impl.ContractInvocationRequest <init>  default queryList [[B@7da4e556]
02:38:44:287 INFO    org.hyperledger.fabric.contract.ContractRouter processRequest                    Got routing:queryList:org.union.chaincode.CaojiaduContract
02:38:44:288 FINE    org.hyperledger.fabric.contract.execution.impl.ContractExecutionService executeR Routing RequestqueryList @c3eac85

需要注意是,查询根据每个 key 返回一个内部结果,而不是一次返回所有 key 的结果:

02:38:44:323 INFO    org.hyperledger.fabric.shim.impl.ChaincodeInnvocationTask invoke                 Got response back from the peertype: RESPONSE
payload: "{\"key\":\"file100\",\"value\":\"file100\",\"timestamp\":1583289329851,\"txHash\":\"2226025767f705b705fa9c106cc4a96097c77b64cd61b53f31d9fba4c5e45e46\",\"extraValue\":null}"
txid: "0bc74105b9b5e358faf774e57ec57facfdc1856149aa98928cc20a46c1b2fe24"
channel_id: "mychannel"

...

02:38:44:331 INFO    org.hyperledger.fabric.shim.impl.ChaincodeInnvocationTask invoke                 Got response back from the peertype: RESPONSE
payload: "{\"key\":\"file101\",\"value\":\"file101\",\"timestamp\":1583289332112,\"txHash\":\"ee4bc37d866a06cec2071c711ca76b0901e4981419c038609b0796b767e2025c\",\"extraValue\":null}"
txid: "0bc74105b9b5e358faf774e57ec57facfdc1856149aa98928cc20a46c1b2fe24"
channel_id: "mychannel"

...

02:38:44:349 INFO    org.hyperledger.fabric.shim.impl.ChaincodeInnvocationTask invoke                 Got response back from the peertype: RESPONSE
payload: "{\"key\":\"file102\",\"value\":\"file102\",\"timestamp\":1583289334309,\"txHash\":\"9c38f269fa0a433417a5d792b78982561422a3776827dbc8178d14f82ce2e58e\",\"extraValue\":null}"
txid: "0bc74105b9b5e358faf774e57ec57facfdc1856149aa98928cc20a46c1b2fe24"
channel_id: "mychannel"

3.2.1 直接组织的节点 peer 的输出

2020-03-04 02:38:44.275 UTC [endorser] callChaincode -> INFO 0ab [mychannel][0bc74105] Entry chaincode: name:"dfgchaincode"
2020-03-04 02:38:44.366 UTC [endorser] callChaincode -> INFO 0ac [mychannel][0bc74105] Exit chaincode: name:"dfgchaincode"  (91ms)

3.2.2 相关组织的节点 peer 的输出

查询接口无日志输出。

4. 涉及私有数据

需要注意的是,当涉及私有数据的存储操作时候,另一个组织的链码节点也会有相类似的日志输出。

对应链码节点返回的私有数据,仍然是私有数据本身,而非私有数据的哈希。这也是容易理解的,因为具有权限的组织本身就存储私有数据本身。

Reference

项目源代码

项目源代码会逐步上传到 Github,地址为 https://github.com/windstamp

Contributor

  1. Windstamp, https://github.com/windstamp
上一篇下一篇

猜你喜欢

热点阅读