Corda:在单个事务中更新和使用ContractState 问题
考虑Corda中的以下设计问题。假设我有一个Corda:在单个事务中更新和使用ContractState 问题,corda,Corda,考虑Corda中的以下设计问题。假设我有一个ContractState,比如说Order,它带有一个明确的状态,例如它是活动的或者取消的。后一种状态与已完成的订单相关。我想要一个事务,它接受一个活动的输入状态订单,并在将其状态更改为已取消时使用它。我可以用原子转换来完成这个任务吗?换句话说,是否可以记录一个状态被消耗的原因? 任何时候,当一个状态被添加为事务的输入时,它都被视为已消费 比如说,Order有3个属性:Order(linearId、status、reason) 为了模拟Corda中的
ContractState
,比如说Order
,它带有一个明确的状态,例如它是活动的
或者取消的
。后一种状态与已完成的订单相关。我想要一个事务,它接受一个活动的输入状态订单
,并在将其状态更改为已取消时使用它。我可以用原子转换来完成这个任务吗?换句话说,是否可以记录一个状态被消耗的原因?
- 任何时候,当一个状态被添加为事务的输入时,它都被视为已消费
- 比如说,
Order
有3个属性:Order(linearId、status、reason)
- 为了模拟Corda中的更新,您的事务将以要更新的状态作为输入;并生成一个新状态,该状态具有相同的
linearId
,但其余属性的值不同。这样,vault中具有相同linearId
的所有状态都将被视为相同状态的不同版本,只有一个未使用的版本;这是最新的版本
订单(123,活动,空)
——更新发送--->订单(123,取消,“不再需要”)
如果状态被“取消”,您也可以考虑不创建输出;你只是消耗它,而不是创造一个输出;这意味着它不再存在于分类账上,Corda也不会跟踪它:
订单(123,活动,空)
——取消发送--->无输出
- 任何时候,当一个状态被添加为事务的输入时,它都被视为已消费
- 比如说,
Order
有3个属性:Order(linearId、status、reason)
- 为了模拟Corda中的更新,您的事务将以要更新的状态作为输入;并生成一个新状态,该状态具有相同的
linearId
,但其余属性的值不同。这样,vault中具有相同linearId
的所有状态都将被视为相同状态的不同版本,只有一个未使用的版本;这是最新的版本
订单(123,活动,空)
——更新发送--->订单(123,取消,“不再需要”)
如果状态被“取消”,您也可以考虑不创建输出;你只是消耗它,而不是创造一个输出;这意味着它不再存在于分类账上,Corda也不会跟踪它:
订单(123,活动,空)
——取消发送--->无输出
谢谢!在问这个问题之前,我知道这两种解决方案。我想确定没有比这更地道的了。谢谢!在问这个问题之前,我知道这两种解决方案。我想确定没有比这更地道的了。