![](/img/trans.png)
[英]Can we restrict an account in Corda to accept only one specific state?
[英]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.