【发布时间】:2018-07-11 17:02:48
【问题描述】:
从 Corda 文档中,它说我们可以在 Vault Extension 中拥有自定义架构。
但是对于 Vault Extension,它应该能够创建/管理与节点 Vault 数据库相关的自定义数据库架构并没有太多明确性。
我们会在 Corda 的功能版本中发布 API
【问题讨论】:
标签: database-schema corda
从 Corda 文档中,它说我们可以在 Vault Extension 中拥有自定义架构。
但是对于 Vault Extension,它应该能够创建/管理与节点 Vault 数据库相关的自定义数据库架构并没有太多明确性。
我们会在 Corda 的功能版本中发布 API
【问题讨论】:
标签: database-schema corda
在流内部,节点公开了一个 JDBC 连接,允许您编写本机自定义 SQL 查询(作为保险库扩展)。您可以使用 serviceHub.jdbcSession() 访问此 JDBC 连接。
如果您的问题是关于如何编写自定义架构,请参阅现有的 Corda Persistence API 文档。
然后您可以使用新的 Vault Query API 查询该自定义架构 - 请参阅现有的 [Corda Vault Query API][3] 文档。
【讨论】:
只是在上面添加一个示例,这里是 Yo! CorDapp。请参阅下面的YoSchemaV1:
// State.
data class State(val origin: Party,
val target: Party,
val yo: String = "Yo!") : ContractState, QueryableState {
override val participants get() = listOf(target)
override val contract get() = Yo()
override fun toString() = "${origin.name}: $yo"
override fun supportedSchemas() = listOf(YoSchemaV1)
override fun generateMappedObject(schema: MappedSchema) = YoSchemaV1.YoEntity(this)
object YoSchemaV1 : MappedSchema(Yo.State::class.java, 1, listOf(YoEntity::class.java)) {
@Entity @Table(name = "yos")
class YoEntity(yo: State) : PersistentState() {
@Column var origin: String = yo.origin.name.toString()
@Column var target: String = yo.target.name.toString()
@Column var yo: String = yo.yo
}
}
}
简而言之,你的状态对象需要实现QueryableState,如上。
完整的 CorDapp 可在此处获得:https://github.com/roger3cev/yo-cordapp
干杯
【讨论】: