保存后更新Hyperledger Composer Contract

时间:2018-04-19 04:11:44

标签: hyperledger hyperledger-composer

我是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
}

1 个答案:

答案 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 - 您可能希望在删除之前检查所有者是否拥有其他合同,并且您可以使用查询。