【问题标题】:Corda - Persistence State V/S Linear StateCorda - 持久状态 V/S 线性状态
【发布时间】:2020-12-17 12:38:27
【问题描述】:

我们有大约 20 个与一对一或一对多或多对多关系相关的状态。一些州在性质上是独立的。 我们如何为这些状态选择黑白持久状态和线性状态。有没有可用的指南。任何指针都会有所帮助。

谢谢。

【问题讨论】:

    标签: corda


    【解决方案1】:
    1. LinearState 实现 ContractState

    2. 当您的状态会随着时间的推移而演变时,请使用 LinearState。如您所知,Corda 中的状态是最终状态,因此要模拟状态的更新,您可以使用具有 linearIdLinearState 来更新您的状态,您制作一个交易,其中输入是您想要更新的状态,并且输出是一个新状态,它与输入具有相同的linearId,但其余属性的值不同(即更新的值)。这样您就可以通过查询其linearId 来跟踪统计数据的演变:

      // Query for all linear states associated with a linear ID:
      val linearStateCriteria = LinearStateQueryCriteria(linearId = listOf(linearId), 
      status = Vault.StateStatus.ALL)
      val vaultCriteria = VaultQueryCriteria(status = Vault.StateStatus.ALL)
      val results = vaultService.queryBy<LinearState>(linearStateCriteria and vaultCriteria)
      
    3. 由于您的状态之间存在关系,您可能希望使用状态指针;顾名思义,它是一个指向状态的指针,有两种类型,固定指针和线性指针;前者适用于不进化的状态,后者适用于进化的状态,因此指针将始终指向状态的最新版本。以下参考链接中的更多信息:

    【讨论】:

    • 如果他使用 LinearPointer 是否意味着他正在泄露指向状态的隐私?特别是如果他的意思是与外部各方共享父状态?在这种情况下应该如何建模,是否应该只保留子状态的线性ID,以防万一他想在所有者端引用它?
    【解决方案2】:

    加上 Adel 所说的,根据您提供的信息,您似乎应该研究 QueryableState。

    PersistenceState 是导出到模式的所有映射状态的超类,可确保 [StateRef] 出现在数据库行上。 (QueryableState界面内部,Command+点击IntelliJ中的QueryableState即可查看)

    QueryableState 的重点是通过您自定义的模式将所有内容存储在数据库中。

    所以看起来你正在处理很多关系,如果你想通过模式将它们存储到数据库中,或者只是将它们存储在状态中,这将取决于你。我不明白你会如何通过 LinearStates 来表示这些关系。

    【讨论】:

      猜你喜欢
      • 2019-11-05
      • 2012-08-06
      • 2021-12-18
      • 2011-06-19
      • 2011-01-09
      • 1970-01-01
      • 1970-01-01
      • 2021-12-18
      • 1970-01-01
      相关资源
      最近更新 更多