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

Hyperledger Fabric与Composer:能否在运行时动态选择交易背书方?

动态选择接收方作为Hyperledger Fabric/Composer的背书方

当然可以实现运行时动态指定接收方作为背书方!这是Fabric灵活权限模型的典型应用场景,结合Composer的封装能力,我们可以通过以下几种方式来落地:

1. 先设置灵活的基础背书策略

首先在链码实例化时,不要把背书方固定死为某几个组织,而是设置一个覆盖所有潜在接收方组织的策略表达式。比如如果你的潜在接收方是OrgB、OrgC、OrgD,背书策略可以写成:

OR('OrgB.member', 'OrgC.member', 'OrgD.member')

这个策略允许任意一个接收方组织的成员背书,但这只是第一步——我们需要确保只有交易中指定的那个接收方的背书才有效,而不是随便哪个接收方都能背书。

2. 在链码/Composer交易逻辑中动态校验背书身份

接下来,在你的资产转移交易处理器里,加入逻辑来验证:

  • 从交易参数中提取目标接收方(比如B公司的参与者ID)
  • 获取该交易的背书签名集合,检查其中是否包含目标接收方对应的身份签名
  • 如果签名不匹配,直接拒绝交易

举个Composer交易处理器的简化示例:

/**
 * 资产转移交易
 * @param {org.example.TransferAsset} tx 转移交易
 * @transaction
 */
async function transferAsset(tx) {
    // 获取当前交易的背书信息
    const txInfo = getCurrentTransaction();
    const endorsements = txInfo.getEndorsements();
    
    // 获取目标接收方的身份标识(比如参与者的MSPID和证书指纹)
    const recipient = tx.newOwner;
    const recipientMSP = recipient.organization.mspId;
    const recipientCertHash = recipient.getIdentifier(); // 或者从证书提取指纹
    
    // 校验是否有来自目标接收方的有效背书
    const hasValidEndorsement = endorsements.some(endorsement => {
        const endorserMSP = endorsement.endorser.mspid;
        const endorserCertHash = endorsement.endorser.getIdentity().getIdentifier();
        return endorserMSP === recipientMSP && endorserCertHash === recipientCertHash;
    });
    
    if (!hasValidEndorsement) {
        throw new Error('交易未获得指定接收方的有效背书');
    }
    
    // 执行资产转移逻辑
    tx.asset.owner = tx.newOwner;
    const assetRegistry = await getAssetRegistry('org.example.Asset');
    await assetRegistry.update(tx.asset);
}

3. 进阶:结合Fabric的属性背书策略(可选)

如果你的Fabric网络启用了MSP属性扩展,还可以给每个接收方参与者添加自定义属性(比如recipientRole: true),然后在背书策略中使用基于属性的表达式:

AND('OrgB.member', 'attr("recipientRole", "true")')

然后在交易时,动态给指定的接收方身份临时激活该属性(或者通过CA预先配置),这样只有被标记为当前交易接收方的身份才能满足背书策略。不过这种方式需要依赖Fabric的属性管理模块,配置稍复杂。

关键注意事项

  • 确保你的Composer业务网络定义(BND)中,给接收方参与者分配了足够的权限来发起背书操作
  • 背书策略的基础范围不能太窄,否则无法覆盖所有潜在接收方;也不能太宽,要通过链码逻辑做二次校验来确保安全性
  • 测试时要模拟不同接收方的场景,验证只有指定的接收方背书后交易才能提交成功

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:57:42