首页
学习
活动
专区
工具
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 环境状态应用程序的性能和可靠性标准,在云基础设施弹性方面可能实现的目标。

    12110

    何在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

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

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

    1.5K30

    何在Excel实现手写签名?

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

    63630

    何在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

    何在 Flask 实现用户登录

    在 Flask 实现用户登录功能通常涉及以下几个步骤:设置 Flask 应用、创建用户模型、处理用户注册、实现登录逻辑以及保护受限路由。下面就是我总结得一些经验,可以一起聊一聊。...1、问题背景在使用 Flask 框架构建 Web 应用程序时,通常需要实现用户登录功能。常见的需求是将用户名和密码与数据库的数据进行比较,并根据比较结果进行相应的操作。...True) username = db.Column(db.String, unique=True) password = db.Column(db.String)最后,我们需要在视图函数实现登录逻辑...Flask-SQLAlchemy 和 bcrypt 模块来实现用户登录的功能。...通过以上步骤,我们可以在 Flask 应用实现一个简单的用户登录系统。这个示例展示了如何使用 Flask-Login 来管理用户会话,处理登录、注销,并保护受限路由。

    18410

    何在MATLAB实现各种特殊上标?

    最近遇到同学提出的字母上标问题,要求在字母正上方标注横线或者尖角,在数学这是常见的标识方法,但在MATLAB中有其特殊的表示方法。...本人在学习也搜索相关的表达方式,发现大多数表述不完整,或者实现方式不对,因此抽时间整理并编写代码,将大多数上下标的实现方式以代码的形式展示出来,供大家学习交流。...1、上下标示例展示: 本文只针对特殊上标情况,上下角标可由符号“^”或者“_”实现,故不在本文讨论范围之内,特殊上标的示例如下图所示。 ? 图示中所有上标标识均可由代码实现。...2、应用举例及代码实现 ?...完整代码 clear;clc;close all; figure('Position',[300 100 800 600],'Color','w'); title('MATLAB特殊上标实现演示

    4.3K20

    何在Kubernetes实现容器原地升级

    然而,在部署业务时,Pod除了业务容器,经常会有一个甚至多个SideCar Container,如何在不影响业务Container的情况下,完成对SideCar Container的原地升级呢,这正是本文需要探讨的技术实现...因此,我们迫切希望能实现,只升级Pod的某个Container,而不用重建整个Pod,这就是我们说的容器原地升级能力。 Kubernetes是否已经支持Container原地升级 答案是:支持!...为了实现容器原地升级,我们更改Pod.Spec对应容器的Image,就会生成kubetypes.UPDATE类型的事件,在syncLoopIteration调用HandlePodUpdates进行处理...PodActions,记录为了达到期望状态需要执行的变更内容。...了解技术原理后,我们可以开发一个CRD/Operator,在Operator的逻辑实现业务负载层面的灰度的或者滚动的容器原地升级的能力,这样就能解决臃肿Pod只更新某个镜像而不影响其他容器的问题了

    6.6K72
    领券