检测到循环ACL规则,规则条件正在调用同一规则

时间:2018-10-25 13:25:20

标签: hyperledger-fabric hyperledger hyperledger-composer

在超级账本中添加新数据时出现错误。

更新正常。

这是我面临问题的一​​些代码

if(isExist) {
                const oldProOwnVal =  await PropertyOwnersRegistry.get(isExist.ownershipId);

                owners.ownership_start_date = oldProOwnVal.ownership_start_date;
                owners.created_at = oldProOwnVal.created_at;
                owners.updated_at = updatedProperty.timestamp;
                const mergeOwner = Object.assign(oldProOwnVal, owners);
                await PropertyOwnersRegistry.update(mergeOwner);
            } else {
                newKey =  'xxxx-xxxx-4xxx-yxxx-xxxx'.replace(/[xy]/g, function(c) {
                    var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
                    return v.toString(16);
                });
                const newOwnerRes = factory.newResource(NS, 'PropertyOwners', newKey);


                owners.ownership_start_date = updatedProperty.timestamp;
                owners.created_at = updatedProperty.timestamp;
                owners.updated_at = updatedProperty.timestamp;
                const newOwner = Object.assign(newOwnerRes, owners);
                await PropertyOwnersRegistry.add(newOwner);
            }

仅在第

行出现问题
await PropertyOwnersRegistry.add(newOwner);

不知道这里会发生什么。

2 个答案:

答案 0 :(得分:1)

在调用Composer API之前,这可能是您的设置方式-例如getAssetRegistry(资产)或getParticipantRegistry(参与者)-否则{{1 }}在第2部分中。我没有看到您的模型或先前的代码-因此,请在以下适当位置进行补充:

这应该可行(未尝试)-注意-如果您要进行背书等测试,则您的代码不确定,

add

答案 1 :(得分:1)

我有一个类似的问题,但就我而言,我之前是在更新两个资产,而我没有等到另一个完成。这就是我的意思

  const prodRegistry = await getAssetRegistry('org.trade.com.Product');
  const chequeReg = await getAssetRegistry('org.trade.com.Cheque');
  chequeRegistry.update(cheque);
  await prodRegistry.updateAll(products);

解决方法是先等待第一个注册表完成资产更新,然后再更新另一个。

await chequeReg.update(cheque);
await prodRegistry.updateAll(products);