我有两个不同的net.corda.core.contracts.ContractState实现,比如说StateA和StateB,来模拟两种不同类型的on-ledger事实。在某些时候,我想改进StateA的一个实例。对StateA的更新只对StateB的实例有意义,因此StateA引用的Contract必须能够同时评估StateA和StateB。然而,为了更新StateA而需要的StateB在这一点上并没有发展。 StateA和StateB被建模为不相交的实体,因为StateB也可能在其他某个时间点发生变化,与StateA无关。
目前我正在创建一个StateA和StateB作为输入的事务,以及演进的StateA'和与输出相同的StateB,这使我能够访问StateA的Contract的verify() - 函数中的StateA和StateB。在验证事务之后,我可以看到具有相同版本的StateB的两行作为序列化对象持久存储到VAULT_STATES表(列CONTRACT_STATE)中。虽然由于StateB被交易消费和重新创建,但在某种程度上可以预期这一点,但是为了在合同中访问/评估它而存储相同值的多个副本似乎是浪费的。有没有办法避免这种行为?我在通过Transaction-Command提供StateB时犹豫不决,因为在验证交易时也应保证其有效性。
答案 0 :(得分:0)
好问题。你所观察到的确实是预料之中的。在大多数情况下,如果将一个输入和输出状态添加到事务中,则预期输出将以某种方式与输入不同。
很明显,在您的用例中,不需要进行任何更改!我看到有两个选项:
verify()
函数仍可访问它们。如果数据需要发展,那么您可能会更新附件,然后将其重新附加到您的交易中,从而取代之前的交易。