【问题标题】:Cordapp fails to execute flow because TransactionState complains that inner class state is bundled with same contractCordapp 无法执行流程,因为 TransactionState 抱怨内部类状态与同一个合同捆绑在一起
【发布时间】:2020-01-16 17:25:00
【问题描述】:

我们有一个非常简单的cordapp,它可以创建一个带有流的状态。然而,当我们运行流测试时,我们得到了一个相当奇怪的警告:

[WARN] 17:07:15,982 [Mock network] contracts.TransactionState. - State class io.dazraf.multisig.contracts.MultiSigContract$MultiSigAsset belongs to contract io.dazraf.multisig.contracts.MultiSigContract, but is bundled with contract MultiSigContract in TransactionState. Annotate MultiSigAsset with @BelongsToContract(MultiSigContract.class) to remove this warning. {actor_id=Only For Testing, actor_owning_identity=O=Mock Company 1, L=London, C=GB, actor_store_id=TEST, fiber-id=10000001, flow-id=0d663be3-b2e4-4a72-bb49-ba80867f1698, invocation_id=29075169-0b94-4167-8c9d-689b28b7337f, invocation_timestamp=2020-01-15T17:07:15.161Z, origin=Only For Testing, session_id=29075169-0b94-4167-8c9d-689b28b7337f, session_timestamp=2020-01-15T17:07:15.161Z, thread-id=209}

状态类是合约的内部类,不需要@BelongsToContract 注释。将状态类移动到顶层,并按规定对其进行注释,并不能解决问题。

我们这里有一个复制器项目,其中包含完整源代码: https://github.com/dazraf/corda-multi-sig-reproducer

感谢您的任何帮助。谢谢。

【问题讨论】:

  • 你确定是这个原因吗?这只是一个警告;您在节点的日志中看到任何错误语句吗?
  • 没关系,我刚刚在 Slack 上看到问题已解决。

标签: corda


【解决方案1】:

在合约代码中,CONTRACT_ID 需要是完全限定名称。即

class MultiSigContract : Contract {
companion object {
  const val CONTRACT_ID: ContractClassName = "io.dazraf.multisig.contracts.MultiSigContract"
}
...

代替:

class MultiSigContract : Contract {
companion object {
  const val CONTRACT_ID: ContractClassName = "MultiSigContract"
}
...

【讨论】:

    猜你喜欢
    • 2012-03-24
    • 1970-01-01
    • 1970-01-01
    • 2011-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-04
    • 2012-05-02
    相关资源
    最近更新 更多