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

Hyperledger Fabric中Marbles账本查询报错及解决方案咨询

解决Marbles Demo账本查询与交易调用的问题

看起来你在尝试用Fabcar的查询脚本调用Marbles链码时踩了个小坑——函数名不匹配导致的链码错误!我来帮你一步步解决这个问题:

错误原因分析

你遇到的Received unknown invoke function name - 'readMarble'错误,核心原因是Marbles链码中并没有名为readMarble的函数。Marbles链码里用于查询单个 marble 的正确函数名是getMarble,拼写或名称错误直接触发了链码的500错误。

正确的账本查询操作步骤

1. 修改query.js脚本

打开fabcar目录下的query.js,调整以下关键部分:

  • 确保chaincodeId已设置为marbles(你已经完成这一步,没问题)
  • 将调用的函数名从readMarble改为getMarble
  • 传入正确的marble名称参数(比如你之前创建的marble1)

修改后的核心代码片段示例:

// 构造查询请求
const request = {
    chaincodeId: 'marbles',
    fcn: 'getMarble', // 这里替换为Marbles链码的正确查询函数名
    args: ['marble1'] // 替换为你实际创建的marble名称
};

2. 执行查询命令

确保Marbles对应的Fabric网络处于运行状态,在fabcar目录下执行:

node query.js

如果一切正常,你会收到该marble的详细信息,包括颜色、大小、所有者等。

执行Marbles交易的操作示例

如果要执行转移marble所有权这类交易操作,可以修改invoke.js脚本:

1. 修改invoke.js脚本

调整交易请求的函数名和参数:

// 构造交易请求
const request = {
    chaincodeId: 'marbles',
    fcn: 'transferMarble', // Marbles链码的转移交易函数
    args: ['marble1', 'alice'] // 参数为:marble名称、新所有者名称
};

2. 执行交易命令

在fabcar目录下执行:

node invoke.js

执行完成后,可以再用query.js查询该marble,确认所有者已更新。

额外注意事项

  • 确保user1在Marbles使用的mychannel通道上有对应的查询/交易权限(Marbles和Fabcar默认使用同一个通道,权限应该是兼容的)
  • 确认目标marble已经被正确初始化到账本中(可以通过Marbles的Web界面,或者调用initMarble函数创建)
  • 如果仍有问题,可以查看peer容器的链码日志排查细节:
    docker logs peer0.org1.example.com | grep marbles
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:48:59