如何使用Corda Vault Extension创建自定义架构

时间:2017-07-13 14:14:36

标签: database-schema corda

从Corda文档中,它说我们可以在Vault Extension中使用自定义架构。

但是,Vault Extension没有太多清晰度,它应该能够创建/管理与节点库数据库相关的自定义数据库架构。

我们是否要在Corda的功能发布中发布API

2 个答案:

答案 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

干杯