Warm tip: This article is reproduced from serverfault.com, please click

其他-Corda:在单个事务中更新和使用ContractState

(其他 - Corda: Update and consume ContractState in a single transaction)

发布于 2020-12-21 13:17:04

问题

考虑Corda中的以下设计问题。假设我有一个ContractState,例如Order,它带有显式状态,例如它的ALIVECANCELED后一种状态与完成的订单有关。我希望有一个事务,该事务采用单个ALIVE输入状态Order在将其状态更改CANCELED为时使用它我可以进行原子过渡来完成此任务吗?换句话说,是否可以记录消耗状态的原因?

Questioner
Maciej Bendkowski
Viewed
0
Adel Rustum 2020-12-21 23:09:46
  • 每当将状态添加为事务的输入时,都将其视为已消耗。
  • 假设Order有3个属性:Order(linearId, status, reason)
  • 为了模拟Corda中的更新,你的交易将输入要更新的状态;linearId为其余属性产生一个具有相同但具有不同值的新状态这样,你的保管库中所有具有linearId相同状态的状态都被视为同一状态的不同版本,因此只有一个UNCONSUMED版本。是最新版本。
  • Order(123, ALIVE, null)-更新Tx ---> Order(123, CANCELED, "No longer needed")
  • 如果状态为“取消”,你也可以考虑不创建输出;你只消耗它而不创建输出;这意味着它不再存在于分类帐中,而Corda也不会对其进行跟踪:Order(123, ALIVE, null)---取消Tx --->无输出。