corda - Corda 数据篡改尝试
问题描述
我已经运行了 Corda IOU 示例,在扫描 H2 数据库后,我在 h2 数据库中找到了表 IOU_STATES。我将值从 50 更改为 70。然后刷新 Ui 但在 UI 上它仍然显示值 50...我需要知道 corda 在 H2 或任何本地存储中实际存储数据的位置... VaultQueryBy 如何从本地或 H2 检索它?那么如何在 UI 上显示未篡改的值呢?
编辑:通过 SQL 语句更改状态值后,它不会反映在 UI 上。UI 默认调用 API 调用 VaultQueryBy ...我的问题是,即使我更改了 DB 中的值,它仍然如何在同一节点上显示未篡改的值...?
谢谢
解决方案
实际状态本身存储在 中NODE_TRANSACTIONS
,作为将其创建为输出的事务的 blob 的一部分。
有关状态的数据也被存储:
- 在
VAULT_STATES
中,作为一个 blob - 在
VAULT_FUNGIBLE_STATES
中,如果它实现了FungibleAsset
接口,则作为 blob - 在
VAULT_LINEAR_STATES
中,如果它实现了LinearState
接口,则作为 blob - 如果状态实现接口,则在一个或多个用户定义的自定义表中
QueryableState
,作为一组人类可读字段
在示例 CorDapp 中:
IOUState
实现QueryableState
接口以将其数据以人类可读的形式存储在名为的自定义用户定义表中IOU_STATES
(请参阅https://github.com/corda/cordapp-example/blob/release-V3/kotlin-source/src/main/ kotlin/com/example/schema/IOUSchema.kt#L23 )- UI 正在从表中加载数据,方法是从 中
NODE_TRANSACTIONS
获取事务 ID 和输出索引,VAULT_STATES
以在正确的事务 blob 中定位正确的状态
因此,您的更改不会反映在前端。
推荐阅读
- amazon-web-services - 如何将 SSL 证书添加到 AWS API 的 awscli / aws sdk
- java - JPA:如何使用 @NamedQuery 指定来自不同 DB2 模式的表。Schema.Table 不能是 FROM 子句的第一个声明
- c - 将灰度 8 位转换为 32 位
- github - 从 Github 安装汇总包
- reactjs - Azure React Msal 停止静默刷新并在 30 分钟后强制登录?
- sql - 浮点数的 SQL 分组精度
- c# - 如何解决可能的一对一关系问题 - Entity Framework Core
- javascript - 如何用字符串(ReactJS)替换空格并在 HTML 中呈现?
- c++ - 读取设置点的第二个值时出现问题 - 包 pid (ROS)
- java - spring 依赖注入在使用 @WebListener 注释的类中不起作用