【发布时间】:2018-03-06 20:09:20
【问题描述】:
commands webinar 声明(在 3:10 左右)“输入和输出状态始终按类型分组,并且每个组都需要一个命令。”叙述者似乎暗示,如果一个事务由多个命令组成,那么每个命令将与事务中提出的状态转换的不同子集相关联。
但是,LedgerTransaction 的结构中似乎没有捕捉到这样的观点。它由完全独立的inputs、outputs 和commands 列表组成。没有任何东西表示特定命令与特定输入或输出状态之间的关联。
在我的合同代码中,我可以按类型对状态进行分组,例如:
override fun verify(tx: LedgerTransaction) {
val fooStates = tx.inputsOfType<FooState>()
val barStates = tx.inputsOfType<BarStates>()
但我只是根据选择进行分组 - 我不必这样做,并且没有将这些组与特定命令联系起来。
那么当网络研讨会说“每个组都需要一个命令”时,它指的是什么?
如果命令和状态转换之间的关系如网络研讨会所述那样存在,签名与命令相关联的意义就很清楚了。但实际上,由于LedgerTransaction 类没有捕获此类关系,因此不会在每个命令的基础上签署特定的转换。
在section on commands 的关键概念中,有一个优惠券命令和一个支付命令,因此必须在债券状态转换上签字的人可能与需要在债券状态转换上签字的人不同。现金状态转换。但是在代码中,没有任何东西将优惠券命令与与命令关联的签名者在签名时同意的特定状态联系起来。
这个规定要求每个组必须有一个相关联的命令,只是开发人员应该在他们的合约验证逻辑中实现的东西,而不是试图捕获的东西交易结构?
【问题讨论】:
标签: corda