gpt4 book ai didi

corda - Corda 中的州唯一标识

转载 作者:行者123 更新时间:2023-12-03 21:20:11 25 4
gpt4 key购买 nike

我想在数据库中创建具有唯一 ID 的状态。有我的州代码

data class SampleState(
val partyA: Party,
val partyB: Party,
val value: Int,
val id: String,
override val linearId: UniqueIdentifier = UniqueIdentifier(id),
val properties: LCProperties = LCProperties("ABC")) : LinearState {...}

当我提交两个相似的 SampleState 时,数据库中有两个不同的 State,具有两个不同的 linearId。那么,有谁能告诉我,如何确保数据库中 SampleState 对象的“id”是唯一的?
我在 Flows 和 Contracts 中使用相同的代码来捕获这种情况,例如
  val results = builder {

val quantityIndex = SampleSchemaV1.PersistentSample::id.equal(id);

val customCriteria1 = QueryCriteria.VaultCustomQueryCriteria(quantityIndex)

val criteria = generalCriteria.and(customCriteria1);

serviceHub.vaultService.queryBy<SampleState>(criteria)
}
if(results.states.count() > 0)
throw IllegalArgumentException("id $id is exist")

但是,即使在 1 秒内(提交事务 1,1 秒后,提交事务 2),它也不能在几乎相似的时间内处理两个提交样本状态事务

最佳答案

在您的州代码中,它是这一行:

override val linearId: UniqueIdentifier = UniqueIdentifier(id)

这会为您创建一个唯一的 ID。您传递给 UniqueIdentifier 的 id 将生成的唯一 id 绑定(bind)到您的 id。但是,所有相等和比较都仅基于唯一 ID。

查看源代码中的 UniqueIdentifier.kt,您会看到这是底层代码:
data class UniqueIdentifier(val externalId: String? = null, val id: UUID = UUID.randomUUID()) : Comparable<UniqueIdentifier> {
override fun toString(): String = if (externalId != null) "${externalId}_$id" else id.toString()

This是一篇关于 Java 的 randomUUID 在确保 id 唯一性方面有多好的文章

您还可以阅读有关 UniqueIdentifier here 的更多信息

关于corda - Corda 中的州唯一标识,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52033762/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com