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

如何在Hyperledger Composer中校验特定资产与参与者的交易是否存在

解决区块链交易重复提交校验问题

针对你描述的业务场景——提交包含参与者TATA、资产FINANCEPROGRAM的交易前,需校验该组合的交易是否已存在(存在则拒绝提交),我整理了修正后的实现方案:

业务场景回顾

  • 现有参与者:IDFC、TATA、MRF
  • 目标资产:FINANCEPROGRAM
  • 待提交交易字段:参与者(TATA)、资产(FINANCEPROGRAM)、loanAmount、loantenure
  • 核心校验规则:同一参与者+同一资产的交易只能存在一次,重复提交需拒绝

修正后的查询与校验代码

原查询存在语法错误(参数名含空格、资源引用不完整),以下是修正后的完整实现:

// 定义重复交易查询语句,确保实体和参数名无语法问题
const duplicateCheckQuery = query('SELECT com.ett.blockchain.Programmeben WHERE (beneficiary == _$beneficiary AND bankprogramme == _$bankProgram)');

// 执行查询并处理校验逻辑
return query(duplicateCheckQuery, {
    // 传入完整的区块链资源引用格式:resource:命名空间.类型#ID
    beneficiary: 'resource:com.ett.blockchain.Beneficiary#TATA',
    bankProgram: 'resource:com.ett.blockchain.Program#FINANCEPROGRAM'
})
.then(results => {
    // 判断是否存在重复交易
    if (results.length > 0) {
        // 存在重复,抛出错误拒绝提交
        throw new Error('提交失败:该参与者已拥有对应资产的交易记录,无法重复提交');
    } else {
        // 无重复,允许继续执行交易流程
        return true;
    }
})
.catch(error => {
    // 捕获并处理查询异常
    console.error('校验重复交易时出错:', error);
    throw error;
});

关键细节说明

  • 资源引用完整性:区块链中的参与者和资产都是资源实例,必须使用resource:命名空间.实体类型#实例ID的完整格式,不能仅传递ID,否则查询无法匹配到正确资源。
  • 参数名一致性:查询语句中的参数(如_$bankProgram)不能包含空格,且需与后续传递的参数键名完全一致,否则会出现参数绑定失败。
  • 校验逻辑位置:建议将这段校验代码放在交易提交的前置逻辑中(比如交易处理器函数的开头),确保在执行交易写入前完成重复检查。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:25:52