我是Hyperledger Composer的初学者,我想问一下,在与资产相关联后,是否可以更新合同内的属性?
我能够更新资产中的属性,但是当我尝试时,例如:
document.contract.totalSigners = 3;
return getAssetRegistry(NS + '.Document')
.then(function (documentRegistry) {
return documentRegistry.update(document);
});
结果:合同中的属性未更新。
我知道合同与资产相关联,所以我想知道是否允许更新合同或是否有其他方式来执行更新过程?
此外,由于我拥有与合同关联的所有者资产,如果将来删除文档,我该如何删除所有者?以下是我的架构:
participant Owner extends Business {
}
asset Contract identified by contractId {
o String contractId
--> Owner owner
}
asset Document identified by documentId {
o String documentId
o DocumentStatus status
--> Contract contract
}
答案 0 :(得分:1)
是的,可以更新资产。贸易网络样本就是这样 - 改变现有资产的所有者。
/**
* Track the trade of a commodity from one trader to another
* @param {org.acme.trading.Trade} trade - the trade to be processed
* @transaction
*/
async function tradeCommodity(trade) { // eslint-disable-line no-unused-vars
// set the new owner of the commodity
trade.commodity.owner = trade.newOwner;
const assetRegistry = await getAssetRegistry('org.acme.trading.Commodity');
// persist the state of the commodity
await assetRegistry.update(trade.commodity);
}
(贸易网络样本可在Playground或github找到) 请注意,此示例使用async / await而不是promises,这适用于更高版本的Composer。希望您使用的是Composer v0.19和Fabric 1.1 - 如果没有,请尽可能升级。
可以在事务中删除所有者,并且您将访问participantRegistry.remove而不是assetRegistry - 您可能希望在删除之前检查所有者是否拥有其他合同,并且您可以使用查询。