繁体   English   中英

我们可以检查科尔达州的双重创建状态吗?

[英]Can we check double creation of a state in Corda?

在我的用例中,我有一个学生注册一个特定的程序,该程序又在分类账上创建了一个学生状态。

现在,如果同一名学生再次使用相同的证书注册,我想避免这样做并抛出一些异常或消息。

我可以想到的一种解决方案是,我可以在创建学生状态之前查询Vault,如果在分类账中未找到该学生,则仅允许他注册。

但是,这似乎是一个模糊的想法。 有人可以提供更好的方法或我不知道的其他方法吗?

您应该为状态实现模式,如以下示例所示:

class CashState(
        val owner: AbstractParty,
        val pennies: Long) : ContractState, QueryableState {
    override val participants get() = listOf(owner)

    override fun generateMappedObject(schema: MappedSchema): PersistentState {
        return when (schema) {
            is CashSchemaV1 -> CashSchemaV1.PersistentCashState(
                    this.owner,
                    this.pennies
            )
            else -> throw IllegalArgumentException("Unrecognised schema $schema")
        }
    }

    override fun supportedSchemas(): Iterable<MappedSchema> = listOf(CashSchemaV1)
}

模式本身:

object CashSchema

@CordaSerializable
object CashSchemaV1 : MappedSchema(schemaFamily = CashSchema.javaClass, version = 1, mappedTypes = listOf(PersistentCashState::class.java)) {

    @Entity
    @Table(name = "contract_cash_states")
    class PersistentCashState(
            @Column(name = "owner_name", unique=true, nullable = true)
            var owner: AbstractParty?,

            @Column(name = "pennies", nullable = false)
            var pennies: Long

            ) : PersistentState()
}

关键是使列唯一,因此,当您添加重复值时,将引发异常。

文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM