You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查询Corda State在账本中占用的存储空间大小

Corda State 存储容量获取方案
  • 方法1:通过Corda序列化框架直接计算(适配开发阶段快速估算)
    Corda底层存储State时采用内置AMQP序列化协议,使用和存储场景一致的序列化上下文处理State实例,得到的字节长度就是实际落盘的近似大小,误差可忽略。
    代码示例(Kotlin):
import net.corda.core.contracts.ContractState
import net.corda.core.serialization.SerializationDefaults
import net.corda.core.serialization.serialize

fun calculateStateSize(state: ContractState): Int {
    // 使用存储场景专属序列化上下文,和账本落盘规则完全对齐
    val serializedResult = state.serialize(SerializationDefaults.STORAGE_CONTEXT)
    return serializedResult.size
}

如果用Java开发,调用对应序列化API的逻辑一致。

  • 方法2:节点数据库直接查询(获取精确实际占用值)
    Corda节点所有未消费/已消费State都存储在VAULT_STATES表中,可直接执行SQL查询得到单条State的精确存储大小:
SELECT 
  OCTET_LENGTH(TRANSACTION_ID) + OCTET_LENGTH(OUTPUT_INDEX) + OCTET_LENGTH(CONTRACT_STATE) AS state_total_size
FROM VAULT_STATES 
WHERE 
  STATE_STATUS = 0 -- 0代表未消费,1代表已消费,可按需调整
  AND TRANSACTION_ID = '目标交易哈希' 
  AND OUTPUT_INDEX = 目标输出序号;

如果需要统计某一类自定义State的总存储占用,可增加过滤条件CONTRACT_STATE_CLASS_NAME = '你的State类全限定名',对state_total_size做求和运算即可。

注意事项:

  1. 以上计算的是单份State副本在单个节点的存储大小,如果节点配置了账本多副本备份、多节点共同存储同一份State,总占用需要乘以对应倍数。
  2. State大小不包含关联附件的存储占用,附件大小需单独查询NODE_ATTACHMENTS表统计。
  3. 数据库层面统计的大小已经包含表字段、索引的额外开销,比序列化计算的数值略高,属于正常情况。

内容的提问来源于stack exchange,提问作者user10488162

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 23:15:03