同一合同中的多个州无法通过验证

时间:2018-08-01 06:37:27

标签: corda

这是我在CordApp中实现的: CordApp

现在在进行流量测试时,它一直通过到合同C。但是,合同D的流量测试失败。根据日志,它正在尝试使用同一命令验证所有状态(即i / p和o / p)。

我发现了一个类似的问题:Transaction verification failed when using different type of states as input and output

但是,如果那是真的,那么我的Contract C Flow测试用例也应该失败了?

尽管如此,如答案中所述,我删除了对合同D中输入状态的验证,因此一个合同将仅验证一个状态。但是还会出现同样的错误。

有什么问题的指针吗?

1 个答案:

答案 0 :(得分:2)

请注意:

  • 合同不验证单个状态,而是验证整个交易
  • 验证交易时,将同时运行输入状态和输出状态的合同

因此,在您的情况下,如果我正确理解了您的图表:

  • 第一个事务(从左开始)没有输入,输出为class MyClass(object): @classmethod def class_method(cls): pass def instance_method(self): pass @staticmethod def static_method(): pass def blas(): pass t = MyClass() isinstance(t.__class__.__dict__[t.class_method.__name__], classmethod) # True isinstance(t.__class__.__dict__[t.static_method.__name__], classmethod) # False isinstance(t.__class__.__dict__[t.instance_method.__name__], classmethod) # False isinstance(t.__class__.__dict__[t.blas.__name__], classmethod) # False ,并且通过运行StateA(与ContractA相关联)进行了验证
  • 第二个事务没有输入,输出StateA,并且通过运行StateB(与ContractB关联)进行了验证
  • 第三笔交易具有输入StateB,输出StateB,并通过运行StateC(与ContractB相关联)和StateB(与{相关联)进行验证{1}})
  • 第四笔交易(在最右边)具有输入ContractCStateC,输出StateA,并通过运行StateC(与{{1 }}},StateD(与ContractA相关)和StateA(与ContractC相关)