考虑Corda中的以下设计问题。假设我有一个ContractState
,例如Order
,它带有显式状态,例如它的ALIVE
或CANCELED
。后一种状态与完成的订单有关。我希望有一个事务,该事务采用单个ALIVE
输入状态Order
并在将其状态更改CANCELED
为时使用它。我可以进行原子过渡来完成此任务吗?换句话说,是否可以记录消耗状态的原因?
Order
有3个属性:Order(linearId, status, reason)
。linearId
为其余属性产生一个具有相同但具有不同值的新状态。这样,你的保管库中所有具有linearId
相同状态的状态都被视为同一状态的不同版本,因此只有一个UNCONSUMED
版本。是最新版本。Order(123, ALIVE, null)
-更新Tx ---> Order(123, CANCELED, "No longer needed")
。Order(123, ALIVE, null)
---取消Tx --->无输出。
谢谢!在问问题之前,我都知道这两种解决方案。我想确保基本上没有什么惯用的了。