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

Hyperledger Fabric Node.js SDK是否支持通过部分ID检索资产?

Hyperledger Fabric Node.js SDK 部分ID搜索资产相关说明
  • Hyperledger Fabric Node.js SDK 本身不直接内置通过ID片段模糊搜索资产的能力,底层逻辑限制如下:
    Fabric 世界状态默认是键值存储结构,原生提供的 getState 资产查询接口是精确匹配规则,只能通过完整资产ID查询对应资产,直接通过SDK调用原生查询接口时,传入ID片段无法返回匹配结果。

  • 实现ID片段搜索的可行方案
    该能力需要配合链码逻辑和世界状态数据库的查询能力共同实现,分两种部署场景:

    1. 使用CouchDB作为世界状态数据库(推荐方案)

      CouchDB 支持富查询和正则匹配能力,是实现模糊搜索的最优选择

      • 首先在链码的META-INF/statedb/couchdb/indexes目录下,为资产的ID字段配置查询索引,加速检索效率
      • 在链码中自定义模糊查询函数,使用CouchDB的$regex匹配规则筛选符合ID片段的资产,示例链码逻辑(Node.js版链码):
      async queryAssetsByPartialId(ctx, idFragment) {
        const query = {
          selector: {
            // 此处的id对应你资产结构体中存储资产ID的字段名
            id: { $regex: idFragment }
          }
        };
        const iterator = await ctx.stub.getQueryResult(JSON.stringify(query));
        const resultList = [];
        // 遍历迭代器组装查询结果
        while (true) {
          const res = await iterator.next();
          if (res.value) {
            resultList.push(JSON.parse(res.value.value.toString('utf8')));
          }
          if (res.done) {
            await iterator.close();
            return Buffer.from(JSON.stringify(resultList));
          }
        }
      }
      
      • Node.js SDK 侧直接调用上述自定义链码函数即可获取匹配结果,示例代码:
      const result = await contract.evaluateTransaction('queryAssetsByPartialId', 'bc12');
      const matchedAssets = JSON.parse(result.toString());
      
    2. 使用LevelDB作为世界状态数据库
      LevelDB 不支持富查询,只能手动在链码中维护全量资产ID集合,查询时遍历集合过滤出匹配的ID,再批量查询对应资产,该方案仅适合资产规模很小的测试场景,性能较差不推荐生产使用。
  • 注意事项

    • 正则模糊查询性能会随资产量级上升下降,若业务允许仅做前缀匹配,建议将正则规则限制为^开头的前缀匹配,查询效率会远高于任意位置的片段匹配
    • 禁止在SDK侧全量拉取所有资产后本地过滤,会严重消耗节点带宽和SDK运行性能

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 03:54:02