从Corda文档中,它说我们可以在Vault Extension中使用自定义架构。
但是,Vault Extension没有太多清晰度,它应该能够创建/管理与节点库数据库相关的自定义数据库架构。
我们是否要在Corda的功能发布中发布API
答案 0 :(得分:5)
在内部流程中,节点公开JDBC连接,允许您编写本机自定义SQL查询(作为文件库扩展名)。您可以使用serviceHub.jdbcSession()
访问此JDBC连接。
如果您的问题是关于如何编写自定义架构,请参阅现有的Corda Persistence API文档。
然后,您可以使用新的Vault Query API查询该自定义架构 - 请参阅现有的[Corda Vault查询API] [3]文档。
答案 1 :(得分:2)
只是为上面添加一个示例,这里是哟的自定义架构! 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
干杯