应某甲方要求,需要在给他们开发的Hyperledger Fabric联盟链应用中,在查看链上数据的某个小需求里面,需要参照fabric区块链浏览器的方式给他们提供交易hash和proposal提案hash。其中交易hash在智能合约链码中可通过账本API的GetTxId()方法获取,也可以通过SDK中channel的queryTransactionByID()方法获取(Fabric的Java SDK),这里不再赘述。
本文重点探讨Hyperledger Fabric中怎么获取提案hash
1.在什么地方可以获取提案hash?
根据Fabric(本文中的fabric均指Hyperledger的Fabric)提案交易的流程,我们可知提案是交易Envelope的一部分,所以如果要查询某笔交易的提案hash,需要从它的交易信息中获取。
2.获取(解析)提案hash的方法
同交易hash,对于Fabric联盟链应用开发者而言,提案hash可以从两个入口出发去获取:
a.从智能合约链码中,调用账本API获取
b.从client客户端,调用client SDK获取
我们先介绍如何从client SDK获取:
1.获取步骤:
①获取交易
②从交易中拿到交易的Envelope
③从Envelope中解析提案hash字节数组
④提案hash字节数组转字符串
废话不多说,上代码:
2.获取及解析代码示例(Java):
private String findProposalHashFromTransaction(TransactionInfo transactionInfo)
throws InvalidProtocolBufferException {
//refer:txObj.payload.data.actions[0].payload.action.proposal_response_payload.proposal_hash
//1.txObj.payload
Common.Envelope envelop = transactionInfo.getProcessedTransaction().getTransactionEnvelope();
Common.Payload payload = Common.Payload.parseFrom(envelop.getPayload());
//2.txObj.payload.data.actions[0]
FabricTransaction.TransactionAction actions0 =
FabricTransaction.Transaction.parseFrom(payload.getData()).getActions(0);
//3.txObj.payload.data.actions[0].payload.action
FabricTransaction.ChaincodeEndorsedAction action =
FabricTransaction.ChaincodeActionPayload.parseFrom(actions0.getPayload()).getAction();
//4.txObj.payload.data.actions[0].payload.action.proposal_response_payload
FabricProposalResponse.ProposalResponsePayload proposalResponsePayload =
FabricProposalResponse.ProposalResponsePayload.parseFrom(action.getProposalResponsePayload());
//5.txObj.payload.data.actions[0].payload.action.proposal_response_payload.proposal_hash
ByteString proposalHash = proposalResponsePayload.getProposalHash();
//6. covert byte array to hex
String proposalHashStr = org.apache.commons.codec.binary.Hex.encodeHexString(proposalHash.toByteArray());
//log.info("proposalHashStr->{}",proposalHashStr);
return proposalHashStr;
}
从智能合约链码中获取的方式,我们将在之后进行探讨,可关注本博客以获取最新更新。
原创文章,若要转载请注明原文链接
若您有区块链应用项目需要开发落地,我们有专业的技术团队和成熟的解决方案,也有多个已经落地的区块链项目,如有区块链应用开发意向,请致邮:y1152979527@sina.cn
如有其它区块链开发问题需要探讨,请致邮:y1152979527@gmail.cn