You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在fabric-sdk-node中解码ProposalResponsePayload及相关返回内容

解码Hyperledger Fabric交易提案响应的方法

我来帮你搞定这两个字段的解码问题!你提到的这两个字段都是用Protobuf序列化的结构,BlockDecoder主要负责区块相关的解码,找不到对应方法很正常,咱们直接用Fabric官方的Protobuf定义来解码就行。

1. 解码 proposalResponse[0][i].payload(ProposalResponsePayload)

这个字段是ProposalResponsePayload结构,封装了提案响应的元数据和链码执行结果。解码步骤如下:

  • 确保项目已安装fabric-protos包(fabric-sdk-node v1.x会自带这个依赖)
  • 导入Protobuf定义并解码:
// 导入fabric-protos
const { protos } = require('fabric-protos');

// 解码ProposalResponsePayload
const proposalResponsePayload = protos.ProposalResponsePayload.decode(proposalResponse[0][i].payload);

// 解析其中的extension字段(ChaincodeAction结构)
const chaincodeAction = protos.ChaincodeAction.decode(proposalResponsePayload.extension);

// 提取链码返回的业务数据:chaincodeAction.response.payload就是shim.Success返回的Buffer
// 如果返回的是JSON格式,转成UTF-8字符串再解析
const businessResult = JSON.parse(chaincodeAction.response.payload.toString('utf8'));

注意:proposalResponse[0][i].response.payload和chaincodeAction.response.payload是同一内容,后者是从完整的提案响应结构中解析出来的。

2. 解码 proposalResponse[1](原始交易提案)

这个字段是发起交易时的原始Proposal对象,同样通过Protobuf解码:

// 解码Proposal
const proposal = protos.Proposal.decode(proposalResponse[1]);

// 解析提案的payload(ProposalPayload结构)
const proposalPayload = protos.ProposalPayload.decode(proposal.payload);

// 提取链码调用的参数(ChaincodeProposalPayload结构)
const chaincodeProposalPayload = protos.ChaincodeProposalPayload.decode(proposalPayload.input);

// 解析调用参数(每个参数都是Buffer,转成字符串查看)
const chaincodeInvocationSpec = protos.ChaincodeInvocationSpec.decode(chaincodeProposalPayload.input);
const invocationArgs = chaincodeInvocationSpec.chaincodeSpec.input.args.map(arg => arg.toString('utf8'));
console.log("链码调用参数:", invocationArgs);

补充说明

这些Protobuf结构的定义都来自Hyperledger Fabric官方的proto文件,fabric-protos包已经预先编译好了解码方法,直接调用即可。如果使用SDK v2.x,核心逻辑一致,仅导入路径可能略有差异。

内容的提问来源于stack exchange,提问作者aldred

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:27:05