【问题标题】:Corda - CommonQueryCriteria purpose of externalIds propertyCorda - externalIds 属性的 CommonQueryCriteria 用途
【发布时间】:2021-08-26 05:11:23
【问题描述】:

Corda vault API 包含一个名为 CommonQueryCriteria 的类,其实现方式如下:

abstract class CommonQueryCriteria : QueryCriteria() {
    abstract val status: Vault.StateStatus
    open val relevancyStatus: Vault.RelevancyStatus = Vault.RelevancyStatus.ALL
    open val constraintTypes: Set<Vault.ConstraintInfo.Type> = emptySet()
    open val constraints: Set<Vault.ConstraintInfo> = emptySet()
    open val participants: List<AbstractParty>? = null
    abstract val contractStateTypes: Set<Class<out ContractState>>?
    open val externalIds: List<UUID> = emptyList()
    open val exactParticipants: List<AbstractParty>? = null
    override fun visit(parser: IQueryCriteriaParser): Collection<Predicate> {
    return parser.parseCriteria(this)
    }
}

externalIds 属性的用途是什么?

注意:这肯定不能用来映射UniqueIdentifier.externalId,因为:

  • 存在类型不匹配(UUIDString?)。
  • LinearStateQueryCriteria 用于通过linearIdexternalId 查询状态。

【问题讨论】:

    标签: corda


    【解决方案1】:

    这是为了支持 Corda 4.3 中的帐户查询而引入的: https://github.com/corda/accounts/blob/master/docs.md#querying-the-vault-by-account

    Vault Query 文档在讨论拥有密钥时在页面底部提到了这个新属性: https://docs.corda.net/docs/corda-os/4.8/api-vault-query.html#mapping-owning-keys-to-external-ids

    诚然,这不是很清楚,应该参考CommonQueryCriteria(不是VaultQueryCriteria)并举例说明。

    【讨论】:

      【解决方案2】:

      但是,如果我们查看帐户库提供的 CreateAccount 流,则 AccountInfo 是使用 UniqueIdentifier 创建的,而 id

      val newAccountInfo = AccountInfo(
               name = name,
               host = ourIdentity,
               identifier = UniqueIdentifier(id = identifier)
      )
      

      UniqueIdentifier 的构造函数同时具有externalIdid

      data class UniqueIdentifier
         constructor(val externalId: String? = null, val id: UUID = UUID.randomUUID())
      

      因此,实际上,如果确实引入了 externalId 以支持帐户查询,则保管库查询实际上使用的是 AccountInfoUniqueIdentifier.id 而不是它的 externalId(假设正如我所怀疑的那样,没有人会手动创建 AccountInfo 来覆盖 CreateAccount() 函数)。

      【讨论】:

      • “计算机科学中只有两个难题:缓存失效和命名” - Phil Karlton 似乎 R3 也遇到了这个问题。
      猜你喜欢
      • 1970-01-01
      • 2020-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-06
      • 2019-08-27
      • 2011-03-24
      相关资源
      最近更新 更多