我已经运行了Corda IOU示例,在扫描H2数据库之后,我在h2数据库中找到了表IOU_STATES。我将值从50更改为70。然后刷新Ui,但在UI上它仍然显示值50 ...我需要知道corda在H2或任何本地存储中实际存储数据的位置... VaultQueryBy如何从本地或H2检索数据?那么如何在UI上显示不受干扰的值?
编辑:通过SQL语句更改状态值后,它不会反映在UI上。 UI默认调用API,该API会调用VaultQueryBy ...我的问题是,即使我更改了DB中的值后,其在同一节点上如何仍显示不受篡改的值...?
Thnx
答案 0 :(得分:2)
实际状态本身存储在NODE_TRANSACTIONS
中,作为将其创建为输出的事务Blob的一部分。
关于状态的数据也被存储:
VAULT_STATES
中,作为斑点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)NODE_TRANSACTIONS
的交易ID和输出索引,以在正确的交易Blob中定位正确的状态,从而从VAULT_STATES
表中加载数据结果,您的更改没有反映在前端。