首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在corda中实现Queryable状态?

在Corda中,要实现Queryable状态,需要按照以下步骤进行操作:

  1. 定义状态类:首先,创建一个继承自QueryableState的状态类。QueryableState是Corda提供的接口,用于支持状态的查询功能。
代码语言:txt
复制
data class MyState(val data: String) : ContractState, QueryableState {
    // 状态属性和构造函数
    // ...
    
    override fun supportedSchemas(): Iterable<MappedSchema> {
        return listOf(MySchemaV1)
    }

    override fun generateMappedObject(schema: MappedSchema): PersistentState {
        return when (schema) {
            is MySchemaV1 -> MySchemaV1.PersistentMyState(data)
            else -> throw IllegalArgumentException("Unrecognized schema $schema")
        }
    }

    override fun supportedQueryNames(): Iterable<String> {
        return listOf("getDataByValue")
    }

    override fun generateMappedObject(schema: MappedSchema, params: QueryCriteria): Iterable<AbstractParty> {
        return when (params) {
            is QueryCriteria.VaultCustomQueryCriteria -> {
                val dataValue = params.constraints.singleOrNull()?.values?.singleOrNull()
                if (dataValue != null) {
                    val results = mutableListOf<AbstractParty>()
                    // 查询数据并返回结果
                    // ...
                    return results
                } else {
                    throw IllegalArgumentException("Invalid query criteria: $params")
                }
            }
            else -> throw IllegalArgumentException("Unrecognized query criteria $params")
        }
    }
}
  1. 定义模式类:创建一个继承自MappedSchema的模式类,用于定义状态在数据库中的模式。
代码语言:txt
复制
object MySchemaV1 : MappedSchema(schemaFamily = MySchema.javaClass, version = 1, mappedTypes = listOf(PersistentMyState::class.java)) {
    @Entity
    @Table(name = "my_states")
    class PersistentMyState(
        @Column(name = "data")
        var data: String
    ) : PersistentState() {
        // 模式属性和构造函数
        // ...
    }
}
  1. 注册模式类:在Corda的node.conf配置文件中,将模式类注册到数据库中。
代码语言:txt
复制
database {
    # ...
    transactionIsolationLevel: READ_COMMITTED
    schema: [
        {
            name: "my_schema",
            tables: [
                "my_states"
            ]
        }
    ]
}
  1. 实现查询逻辑:在状态类中的generateMappedObject方法中,根据查询条件执行相应的查询逻辑,并返回结果。
代码语言:txt
复制
override fun generateMappedObject(schema: MappedSchema, params: QueryCriteria): Iterable<AbstractParty> {
    return when (params) {
        is QueryCriteria.VaultCustomQueryCriteria -> {
            val dataValue = params.constraints.singleOrNull()?.values?.singleOrNull()
            if (dataValue != null) {
                val results = mutableListOf<AbstractParty>()
                // 查询数据并返回结果
                // ...
                return results
            } else {
                throw IllegalArgumentException("Invalid query criteria: $params")
            }
        }
        else -> throw IllegalArgumentException("Unrecognized query criteria $params")
    }
}
  1. 使用Queryable状态:在Corda流程中,可以使用VaultQueryService来执行查询操作。
代码语言:txt
复制
val queryCriteria = QueryCriteria.VaultCustomQueryCriteria(builder.equal(MySchemaV1.PersistentMyState::data, "someValue"))
val results = serviceHub.vaultService.queryBy<MyState>(queryCriteria).states

以上是在Corda中实现Queryable状态的步骤。通过定义Queryable状态类、模式类和实现查询逻辑,可以在Corda中实现灵活的状态查询功能。对于Corda的更多详细信息和使用方法,可以参考腾讯云的Corda产品介绍

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【工控技术】如何在 WinCC 实现变量状态监视和连接状态监视?

监视一个变量的状态 通过全局脚本动作返回被检查变量的状态实现对变量状态的监视,同时触发一条报警。 在该 FAQ 的第一部分创建一个检视变量的全局脚本动作藉此仅在输出窗口中输出一条信息。...在第二部分配置全局脚本动作以实现即在窗口中输出消息又触发一条报警的目的。 1. 通过以下步骤创建全局脚本动作以实现仅在输出窗口中输出一条信息 ....现在当启动运行系统时,一旦被监视变量的状态发生改变,关于此变量状态的一条信息就会输出到 Global Script diagnostics 窗口。 2....通过以下步骤创建全局脚本动作,以实现输出一条消息到对话窗口的同时也触发一条报警 . 步骤 1 创建一个“ 二进制”类型的内部变量(该变量用于触发报警)。在本例变量名称为 “Trigger”。...现在当启动运行系统时,一旦被监视变量的状态发生改变,关于此变量状态的信息就会输出到 Global Script diagnostics 窗口,另外当该变量的状态不正常时也会触发一条报警。

3.4K30
  • 何在Kubernetes更好地管理有状态应用

    在以基于容器的微服务为特征的云原生计算的动态世界,Kubernetes 已成为编排容器化应用程序的标准。它在管理无状态应用程序方面的灵活性得到了广泛认可。...然而,它在有状态应用程序方面存在 挑战——这些应用程序在会话维护状态,并且本质上无法容忍中断。...可靠性-耐用性二分法 虽然 Kubernetes 提供了用于维护有状态应用程序耐用性的功能——通过各种中断维护对持久卷的访问——但它在“高九”可用性和性能一致性方面难以实现可靠性。...在 Kubernetes 增强可靠性的策略 有几种方法可以尝试提高 Kubernetes 在有状态应用程序的可靠性: 高级可观察性和自动化:实施强大的可观察性工具并自动化修复可以帮助预先解决和解决可能影响应用程序可用性的问题...这种演变不仅仅是适应变化,而是引领重新定义 Kubernetes 环境状态应用程序的性能和可靠性标准,在云基础设施弹性方面可能实现的目标。

    12010

    何在SwiftUI实现interactiveDismissDisabled

    何在SwiftUI实现interactiveDismissDisabled 想获得更好的阅读体验,可以访问我的博客www.fatbobman.com[1] 本文中我们将探讨如何实现一个SwiftUI...去年9月,我在文章【在SwiftUI制作可以控制取消手势的Sheet】[3]中介绍了健康笔记2.0[4]版本的Sheet控制实现方法。...在今年推出的SwiftUI 3.0版本,苹果添加了一个新的View扩展:interactiveDismissDisabled,该扩展实现了上面的第一个要求——通过代码控制是否允许手势取消Sheet。...这种实现是我所喜欢的,也给了我很大的启发。 在WWDC 2021 观后感[6]一文,我们已经探讨过SwiftUI3.0将会影响非常多的第三方开发者编写SwiftUI扩展的思路和实现方式。...在之前的版本[8],用户使用手势取消时的通知和其他的逻辑是分离的,在使用不仅繁琐,而且影响代码的观感。本次将一并解决这个问题。

    3.9K40

    何在 Git 重置、恢复,返回到以前的状态

    在本文中,我们将带你了解如何去重置、恢复和完全回到以前的状态,做到这些只需要几个简单而优雅的 Git 命令。 重置 我们从 Git 的 reset 命令开始。...如果我们在链的每个提交向文件添加一行,一种方法是使用 reset 使那个提交返回到仅有两行的那个版本,:git reset HEAD~1。...使用一个 git revert 命令可以实现上述目的,比如: $ git revert HEAD 因为它添加了一个新的提交,Git 将提示如下的提交信息: Revert "File with three...从本质上来说,Git 将一个分支的每个不同提交尝试“重放”到另一个分支。...因此,我们使用基本的 Git 命令,可以变基一个 feature 分支进入到 master ,并将它拼入到 C4 (比如,将它插入到 feature 的链)。

    3.9K20

    【DB笔试面试511】如何在Oracle写操作系统文件,写日志?

    题目部分 如何在Oracle写操作系统文件,写日志? 答案部分 可以利用UTL_FILE包,但是,在此之前,要注意设置好UTL_FILE_DIR初始化参数。...在CLIENT_INFO列存放程序的客户端信息;MODULE列存放主程序名,包的名称;ACTION列存放程序包的过程名。该包不仅提供了设置这些列值的过程,还提供了返回这些列值的过程。...如何在存储过程暂停指定时间? DBMS_LOCK包的SLEEP过程。例如:“DBMS_LOCK.SLEEP(5);”表示暂停5秒。 DBMS_OUTPUT提示缓冲区不够,怎么增加?...如何在Oracle写操作系统文件,写日志? 可以利用UTL_FILE包,但是,在此之前,要注意设置好UTL_FILE_DIR初始化参数。...这个功能可以使用DBMS_ERRLOG包实现。 本文选自《Oracle程序员面试笔试宝典》,作者:李华荣。

    28.8K30

    何在Excel实现手写签名?

    前言 Hello各位,本葡萄又来啦,今天遇到的场景是这样的:在日常业务流程,经常需要某一流程环节相关责任人员进行审批签字,早期许多公司为了省事就直接会把这位负责人的签名以键盘打字(楷体)的形式打印出来...,但是这样的坏处就是会导致所有的负责人的签名都是一样的,没有美感,为了解决这个问题,一些公司就开始使用手写签名(用鼠标写出来的签名)代替电子签名,今天本葡萄就为大家简单的介绍下手写签名到底是怎么实现的。...话不多说,先上效果图: 看完效果图之后,下面为大家介绍实现的详细过程。 使用Html+JavsScript实现手写签名的添加 1.实现Html界面 <!...sign").jSignature("reset") document.getElementById("signArea").style.visibility = 'hidden' } 这一步的作用是实现在...Excel单元格添加手写签名的功能,右键菜单选择手写签名后会调用对应的签名插件,在签名插件上可以用鼠标进行输入,输入完之后点击确认就会显示在单元格

    63330

    何在Impala实现拉链表

    记录一个事物从开始,一直到当前状态的所有变化的信息。传统数据仓库一般采用拉链的方式保留主数据(例如客户信息)的变化数据,采用这种设计方式的主要原因是减少数据冗余。...这个需求在Hadoop主要是有以下两种实现方式选择: 1.每天保留一份全量的切片数据。Hadoop平台由于采用通用的硬件设备,因此存储空间的成本较低,因此建议采用时间切片的方式保留每天的主数据信息。...当前数据单独存放在当前表,历史数据存放在历史表,并按时间分区。 2.在Hadoop之上也可以实现拉链表。...[nzo0qrj5sc.jpeg] [rmn6i643g9.png] 3.拉链流程实现 ---- 1.首先在USER_HIS表创建一个’9999-12-31’的分区用于存储所有用户开链数据 ALTER...adddate(now(), -3), 'yyyy-MM-dd') FROM USER; (可左右滑动) 这里用三天前的日期方便演示,此时拉链表的数据如下: [owmto8fztk.jpeg] 所有用户数据为开链状态

    3.1K100

    何在 Kubernetes 对无状态应用进行分批发布

    在 Kubernetes 针对各种工作负载,提供了多种控制器,其中 Deployment 为官方推荐,被用于管理无状态应用的 API 对象。...Deployment 提供了 RollingUpdate 滚动升级策略,升级过程根据 Pod 状态,采用自动状态机的方式,通过下面两个配置,对新老 Pod 交替升级,控制升级速率。...具体对比分析与实现,可参考网上文章 ,这里不做过多展开: 滚动 Rolling:渐进式创建新版本,然后停止老版本,自动完成整个流程。...蓝绿 Blue/Green:创建出新版本,与老版本并存,通过切换流量实现发布与回滚。 重建 Recreate:杀死所有老版本,再用新版本重建。适用于开发、测试环境重新初始化。...若发布过程中出现异常状态,如何及时发现错误,设置滚动升级卡点,或做到自动回滚呢?

    1.5K30

    何在Openharmony实现USB复合设备

    背景 如何让Openharmony设备HDC接口(OTG接口)作为一个复合设备,实现HDC(HDC:鸿蒙设备连接器) + CDC ACM(USB 虚拟串口),而设备本身支持HDC。...实现USB复合设备之前,需要了解一些概念。...USB Gadget驱动 是通过USB来模拟其它类型的设备,USB Gadget UAC驱动 用来模拟声卡外设;USB Gadget Serial驱动用来模拟串口外设,等等等等。...其中USB设备控制器(UDC)驱动负责USB设备控制器(UDC)和主机侧USB控制器(UHC)之间的数据传输;而Gadget功能驱动(function)负责实现功能协议(UDC等)。...在OpenHarmony如何配置 在OpenHarmony,USB这一块依旧采用内核驱动,所以整体套路都是一样。也是通过configfs配置USB功能。

    29910

    何在 PowerBI 实现矩阵行迷你图

    在 Power BI 矩阵内使用迷你图是重要的需求,矩阵的能力也被提升了一截,可以让可视化更加丰富。...效果如下: 这里显示了每位销售经理的 YTD 销售完成以及他的目标之间的差异,并通过迷你图实现了快速预览,以便直观看出其销售趋势。...Power BI 没有此功能,请确保更新至 2021 年 12 月 版,Power BI Desktop 最新版永久下载地址:https://excel120.com/#/pbid 在矩阵中使用迷你图 在矩阵添加一个度量值...,:KPI,再点击添加迷你图,如下: 这里的逻辑是: Y 轴使用了度量值字段 X 轴使用了维度字段 设置迷你图的显示 可以进一步设置迷你图的显示,如下: 可以设置线条和标记的颜色。...总结 本文给出了在 Power BI 何在矩阵中使用迷你图的方法,并与工具提示页配合实现了更丰富的可视化效果。

    6K30
    领券