You need to enable JavaScript to run this app. 如何通过cardano-db-sync正确查询Cardano ADA当前总供应量
优惠活动
大模型
产品
解决方案
定价
更多

如何通过cardano-db-sync正确查询Cardano ADA当前总供应量

基于cardano-db-sync的ADA全链总供应量正确查询方案与异常排查

现有官方查询逻辑的偏差定位

  • 官方文档提供的总供应量查询语句,实际仅覆盖UTXO集合中的未花费交易输出金额,未纳入链上其余形态的ADA持有规模,计算结果会随日常UTXO交易的动态变化持续波动,与参考平台的实际总供给数据存在百万级ADA的统计偏差
  • 全链总供应量的构成缺口,主要来自所有质押账户中尚未触发提取操作的可支取资金,这部分资金不属于UTXO集合的统计范围,是原查询遗漏的核心模块

奖励与提取总额统计倒挂的原因说明

实际执行统计查询时,会得到“已提取资金总规模远大于已发放奖励总规模”的结果,示例输出如下:

-- 已发放奖励总规模(单位:ADA)
select sum(amount) / 1000000 from reward;    
--------------------
 554006568

-- 已完成提取的资金总规模(单位:ADA)
select sum(amount) / 1000000 from withdrawal;    
--------------------
 875322654

该异常并非链上数据错误,核心原因是两张表的统计口径并不完全对等:

  • withdrawal表记录的是用户从质押账户地址向外划转的所有可支取资金,不区分资金来源:既包括协议自动分发的质押奖励,也包括用户从外部地址转入质押账户、后续又划转出去的自有本金
  • reward表仅记录协议层面自动分发的质押类奖励,不统计用户自行转入质押账户的资金,也未覆盖协议迭代历史中部分早期奖励条目的归档内容
    因此两张表的统计结果不存在“已发放总额必须大于已提取总额”的对应关系,提取总额高于奖励发放总额是正常的统计口径差异,不是链上数据异常。

正确的全链总供应量查询逻辑

全链ADA总供应量的核心构成分为两部分:

  1. UTXO集合中所有未被花费的交易输出总金额
  2. 所有质押账户中尚未提取的可支取余额(这部分金额不会体现在UTXO集合的统计范围内)

注意:不要通过“已发放奖励总和 - 已提取资金总和”来计算未提取奖励余额,两者统计口径不对等,会产生大幅偏差,直接读取account表的withdrawable_amount字段求和是唯一准确的统计方式。
参考查询语句:

WITH unspent_utxo_total AS (
    SELECT SUM(value)::DOUBLE PRECISION / 1000000 AS total_utxo
    FROM tx_out
    -- 排除所有已经被花费的UTXO
    WHERE NOT EXISTS (
        SELECT 1 
        FROM tx_in
        WHERE tx_in.tx_out_id = tx_out.tx_id
          AND tx_in.tx_out_index = tx_out.index
    )
),
account_available_balance AS (
    SELECT SUM(withdrawable_amount)::DOUBLE PRECISION / 1000000 AS total_unwithdrawn
    FROM account
)
SELECT 
    total_utxo + total_unwithdrawn AS current_chain_total_supply
FROM unspent_utxo_total, account_available_balance;

内容来源于stack exchange,答案作者user3755529

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.31 02:45:03