从Hyperledger Fabric Node SDK中的函数InvokeChaincode()获取链码调用方ID

时间:2018-08-10 09:03:06

标签: node.js go hyperledger-fabric blockchain hyperledger

让我们假设以下网络体系结构:

A -> Chaincode1 -> fabcar

A 是应用程序, Chaincode1 是Go中的链代码,而 fabcar 是Node.js中的链代码。 它们在同一频道:“ mychannel”。

执行 Chaincode1 中的操作APIstub.InvokeChaincode,例如APIstub.InvokeChaincode("fabcar", chainCodeArgs, "mychannel")时,链代码 fabcar 可能存在(链代码称为)以获取呼叫者链码的 id

fabcar 链代码中的getCreator()方法仅返回调用者组织;但是所需的信息是 chaincode id 或仅与 Chaincode1 相关的某些信息。


更新

我尝试了Hyperledger官方文档https://fabric-shim.github.io/ChaincodeStub.html#getSignedProposal__anchor

中编写的getSignedProposal()方法

getSignedProposal()方法返回类型为SignedProposal的已签名交易建议的完全解码对象。 SignedProposal对象代表客户端应用程序发送到链码的请求对象。

执行以下代码:

const proposal = stub.getSignedProposal();
console.log("signed proposal: ", proposal);

结果如下:

signed proposal:  { signature: <Buffer 30 45 02 21 00 c3 a7 91 4c 74 f9 c2 97 04 fc 84 91 6a 71 2d 69 ad 0e a9 22 f2 ed 53 a3 66 97 56 17 d7 d7 3a e6 02 20 13 26 8a 4f f6 3d 86 4e f9 35 ae ... >,
  proposal:
   { header: { signature_header: [Object], channel_header: [Object] },
     payload: { input: [Object], TransientMap: [Object] } } }

似乎真的很难理解,哪一个信息可以检索呼叫链代码ID 。 这是与SignedProposal类型有关的文档链接:https://fabric-shim.github.io/global.html#SignedProposal

2 个答案:

答案 0 :(得分:2)

否,当前无法执行此操作,因为链码本身没有身份。

答案 1 :(得分:2)

  

fabcar链码中的getCreator()函数只返回调用者组织,我希望链码ID或某些仅连接到Chaincode1的信息。

您可以使用GetSignedProposal方法,即:

// data elements part of a transaction proposal.
GetSignedProposal() (*pb.SignedProposal, error)

SignedProposal包含原始链码客户端发送的交易建议的信息,如果链码被简单地转发到链码调用SignedProposal,则可以提取先前链码的信息。

注意:如果您有复杂的链码调用链,例如 chaincode1 调用 chaincode2 调用chaincode3,SignedProposal将包含 chaincode1 的信息,即您不会了解 chaincode2 < / em>。