Hyperledger Fabric 获取提案hash(proposal_hash)的方法

应某甲方要求,需要在给他们开发的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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值