我可以在事务中引用未提交的输入状态吗?

时间:2018-08-26 03:58:55

标签: corda

创建新交易时,我可以引用未提交状态作为输入状态吗?

例如 将颜色属性设置为“蓝色”的总帐发出新的绘画状态。 在所有各方签字之前(因此绘画状态保持未提交),我发出了一个新事务,将未提交状态用作输入,将新绘画状态用作输出(将绘画颜色属性设置为“红色”)。

1 个答案:

答案 0 :(得分:0)

在使用StateRef的事务中引用输入,其定义如下:

data class StateRef(val txhash: SecureHash, val index: Int)

位置:

  • txhash是创建输入状态的事务的哈希值
  • index是输入状态在创建它的事务的输出中的索引

如果要在提交第一个事务之前创建第二个使用输入状态的事务,则可以执行以下操作:

  • 完全建立第一笔交易
  • 根据第一笔交易的ID手动构建StateRef
  • 将此StateRef作为第二笔交易的输入

您甚至可以通过这种方式构建整个交易链。

但是...

在提交第一笔交易之前,执行第二笔交易时,您将看到奇怪的行为。例如:

  • 如果您尝试verify进行第二笔交易,则您的节点将尝试使用该节点的保管库将所有输入的StateRef转换为实际状态。这将失败,因为您尚未存储第一笔交易
  • 如果您将第二笔交易发送给交易对手,并且他们尝试解决其依赖关系图,则您的节点将尝试从其交易存储中检索第一笔交易并将其发送出去。再次,这将失败,因为您尚未存储第一笔交易

因此,如果您以这种方式构建事务链而没有在创建状态时提交每个状态,则必须非常注意以后提交事务的顺序以及在第二,第三,等等。