Cardano-db-sync: 由几个lovelaces奖励表

创建于 2020-11-12  ·  12评论  ·  资料来源: input-output-hk/cardano-db-sync

我无法通过 cardano-submit-api 发送交易,它显示“WithdrawalsNotInRewardsDELEGS”,暗示错误的奖励,或试图提取并非所有奖励。 我检查了所有部分,可能出了问题。 之后,我比较了从 db-sync 和 yoroi api 获得的随机地址的奖励。 这些是一些不匹配的(在lovelaces中):

image
每行代表来自该 SQL 的 db-sync 奖励:
SELECT (SELECT COALESCE(SUM(rewards.amount), 0) FROM ( SELECT amount FROM reward WHERE addr_id=$1 UNION ALL SELECT amount FROM reserve WHERE addr_id=$1 ) rewards ) - ( SELECT COALESCE(SUM(amount), 0) FROM withdrawal WHERE addr_id=$1 ) AS "remainingRewards"
减去来自 yoroi api 的奖励。

@erikd发生了什么?

编辑:yoroi 也从 db-sync 中获取它,所以这些可能是两个错误值的差异。 无论哪种方式,错误都源于 db-sync

最有用的评论

对不起,我确实提前打电话了。 看起来问题已解决,我正在监控它,并会在几天后报告。

所有12条评论

我们在 Yoroi 也注意到了这一点

以下是 7 个不同的 cardano-db-sync 实例的结果,其中实际值为 30428426

backend#1 30428424
backend#2 30428424
backend#3 30428424
backend#4 30428423
backend#5 30428430
backend#6 30428424
backend#7 30428426

如您所见,只有 1/7 的后端得到了正确的结果

我们已经仔细检查了这些不正确的值是否存储在 SQL 数据库中,所以我们知道这个问题不在我们的堆栈中

@SebastienGllmt什么? 不同的db-sync实例给出不同的结果??? 他们都运行相同的版本吗?

@xdzurman你能简化那个 SQL 查询吗? 最好有三栏,奖励,储备和差异。

我怀疑查询实际上是错误的。 奖励表如下所示(我的实例当前未同步):

cexplorer=# select * from reward ; 
 id | addr_id | amount | epoch_no | pool_id | block_id 
----+---------+--------+----------+---------+----------
(0 rows)

因此,对于每个epoch都有一个奖励金额(即该 epoch 奖励的快照),如果没有正确探索它,我什至不确定reserve表中有什么。

@erikd这是我们在 7 个不同的后端运行的查询,它们给出了不同的结果。 它们都是相同版本的 cardano-db-sync 和相同的节点版本

  select stake_address.hash_raw as "stakeAddress"
       , "totalReward".*

  from stake_address

  left outer join (
    SELECT addr_id, amount
    FROM reward
  ) as "totalReward" on stake_address.id = "totalReward".addr_id

  where encode(stake_address.hash_raw, 'hex') = 'e1567298bc998d188d936f105f9e9e616f1980adacc06fc5732a57f9cc'

此 SQL 查询中指定的地址只获得过一次奖励,因此更易于使用。

我怀疑查询实际上是错误的。 奖励表如下所示(我的实例当前未同步):

cexplorer=# select * from reward ; 
 id | addr_id | amount | epoch_no | pool_id | block_id 
----+---------+--------+----------+---------+----------
(0 rows)

因此,对于每个epoch都有一个奖励金额(即该 epoch 奖励的快照),如果没有正确探索它,我什至不确定reserve表中有什么。
image

我假设 - 储备金持有 ITN 奖励。 奖励表指定在该时期开始时收到的奖励。 所以剩余的奖励是所有奖励的总和,它的奖励减去提款。

我们发现了类似的问题。 137 名代表已经撤回了 500 个 ADA。 显示在db-sync里面的db表中退出。 在那之后,他们中的一些人得到了负余额。 要么这与这个问题有关,要么我们做错了什么。

例如:

一个已经提取了 500 ADA,但根据 db-sync 仅获得了 200 ADA。 我的示例适用于 214 或之后的时代

@mmahut我不确定。 #413 上修复的错误也很容易导致此问题。 或者可能存在不止一个问题。 @xdzurman

@mmahut这是跨不同的实例? 我需要一种简单的方法来生成它,并且拥有多个实例并不是一个简单的复制案例。

对不起,我确实提前打电话了。 看起来问题已解决,我正在监控它,并会在几天后报告。

它看起来对我来说也是固定的,现在关闭。 如果出现任何问题,请随时重新打开。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

xdzurman picture xdzurman  ·  3评论

erikd picture erikd  ·  4评论

kzka90 picture kzka90  ·  3评论

erikd picture erikd  ·  10评论

rhyslbw picture rhyslbw  ·  4评论