Cardano-db-sync: cardano-cli и db-sync показывают разное количество наград из эпохи 243

Созданный на 21 янв. 2021  ·  7Комментарии  ·  Источник: input-output-hk/cardano-db-sync

Начиная с эпохи 243 для некоторых адресов вознаграждения cardano-cli и db-sync показывают разное количество вознаграждений. Например, stack1u9z07jwyrlyh57dsvhmmdlt555vpvwdrky0ykf4le4k7zuc3pvuy0

Cardano-Cli

$ cardano-cli query stake-address-info --cardano-mode --mainnet --allegra-era --address stake1u9z07jwyrlyh57dsvhmmdlt555vpvwdrky0ykf4le4k7zuc3pvuy0
[
    {
        "address": "stake1u9z07jwyrlyh57dsvhmmdlt555vpvwdrky0ykf4le4k7zuc3pvuy0",
        "delegation": "pool14ku0z9rx9yx34zl00jtxtpyv6ehytfl8fewztavx7qvju7nrtr8",
        "rewardAccountBalance": 13258955846
    }
]

и db-sync

# SELECT SUM(reward.amount)
# FROM stake_address
# LEFT JOIN reward ON reward.addr_id = stake_address.id
# WHERE stake_address.view = 'stake1u9z07jwyrlyh57dsvhmmdlt555vpvwdrky0ykf4le4k7zuc3pvuy0';
     sum
-------------
 13222415370
(1 row)

Разница составляет 36,540476 ₳, что примерно равно размеру вознаграждения за голосование.

основная сеть, cardano-cli 1.24.2, cardano-db-sync 7.1.0

Самый полезный комментарий

Я думаю, что часть проблемы заключается в том, что можно разумно ожидать, что таблица с именем reward будет содержать все вознаграждения, но на самом деле это не так. Эта таблица содержит только вознаграждения за стекинг. Было бы желательно переименовать эту таблицу, чтобы отразить это.

Это еще больше сбивает с толку, поскольку таблица withdrawal содержит все снятия средств со счета вознаграждений.

Все 7 Комментарий

Похоже, эти награды за голосование теперь находятся в таблице «казны».

# SELECT treasury.amount
# FROM stake_address
# LEFT JOIN treasury ON treasury.addr_id = stake_address.id
# WHERE stake_address.view = 'stake1u9z07jwyrlyh57dsvhmmdlt555vpvwdrky0ykf4le4k7zuc3pvuy0';
  amount
----------
 36540476
(1 row)

Похоже, эти награды за голосование теперь находятся в таблице «казны».

~ Ой, похоже, ошибка. ~ Похоже, нет.

Нам нужно как-то прояснить (в схеме и / или связанных документах), что существует более одной таблицы событий, которые влияют на счета с балансовым вознаграждением:

  • награды за эпоху
  • снятие средств со счета
  • специальные мероприятия МИР. Специальные события MIR исходят из сертификатов MIR, но запланированы для границ блоков.

Таким образом, люди, пишущие запросы для отслеживания общего баланса, должны будут взять объединение событий.

Сертификаты MIR использовались для различных целей высокого уровня (но цель, конечно, не указана в цепочке), в том числе: вознаграждения, причитающиеся ITN, выплаты казначейства за победившие проекты, выплаты казначейства за участие в Catalyst.

Я думаю, что часть проблемы заключается в том, что можно разумно ожидать, что таблица с именем reward будет содержать все вознаграждения, но на самом деле это не так. Эта таблица содержит только вознаграждения за стекинг. Было бы желательно переименовать эту таблицу, чтобы отразить это.

Это еще больше сбивает с толку, поскольку таблица withdrawal содержит все снятия средств со счета вознаграждений.

Я пытался придумать самый изящный подход к этому, какой только мог найти.

Сначала мы создаем представление:

# create view reward_payment_view as
    select addr_id, amount, 'treasury' as source
    from treasury union select addr_id, amount, 'reward_epoch_' || epoch_no as source from reward ; 

мы можем запросить это представление как:

# select stake_address.view, reward_payment_view.amount, reward_payment_view.source
    from reward_payment_view inner join stake_address on reward_payment_view.addr_id = stake_address.id
    where stake_address.view = 'stake1u9z07jwyrlyh57dsvhmmdlt555vpvwdrky0ykf4le4k7zuc3pvuy0' ; 
                            view                             |   amount   |      source      
-------------------------------------------------------------+------------+------------------
 stake1u9z07jwyrlyh57dsvhmmdlt555vpvwdrky0ykf4le4k7zuc3pvuy0 |   36540476 | treasury
 stake1u9z07jwyrlyh57dsvhmmdlt555vpvwdrky0ykf4le4k7zuc3pvuy0 |  373554942 | reward_epoch_226
 stake1u9z07jwyrlyh57dsvhmmdlt555vpvwdrky0ykf4le4k7zuc3pvuy0 |  381550960 | reward_epoch_222
 stake1u9z07jwyrlyh57dsvhmmdlt555vpvwdrky0ykf4le4k7zuc3pvuy0 |  394285344 | reward_epoch_225
 stake1u9z07jwyrlyh57dsvhmmdlt555vpvwdrky0ykf4le4k7zuc3pvuy0 |  394335813 | reward_epoch_223
 stake1u9z07jwyrlyh57dsvhmmdlt555vpvwdrky0ykf4le4k7zuc3pvuy0 |  437204214 | reward_epoch_236
 stake1u9z07jwyrlyh57dsvhmmdlt555vpvwdrky0ykf4le4k7zuc3pvuy0 |  442787046 | reward_epoch_233
 stake1u9z07jwyrlyh57dsvhmmdlt555vpvwdrky0ykf4le4k7zuc3pvuy0 |  450575175 | reward_epoch_238
 stake1u9z07jwyrlyh57dsvhmmdlt555vpvwdrky0ykf4le4k7zuc3pvuy0 |  463125272 | reward_epoch_228
 stake1u9z07jwyrlyh57dsvhmmdlt555vpvwdrky0ykf4le4k7zuc3pvuy0 |  481675128 | reward_epoch_224
 stake1u9z07jwyrlyh57dsvhmmdlt555vpvwdrky0ykf4le4k7zuc3pvuy0 |  495852458 | reward_epoch_227
 stake1u9z07jwyrlyh57dsvhmmdlt555vpvwdrky0ykf4le4k7zuc3pvuy0 |  571559879 | reward_epoch_234
 stake1u9z07jwyrlyh57dsvhmmdlt555vpvwdrky0ykf4le4k7zuc3pvuy0 |  599359585 | reward_epoch_232
 stake1u9z07jwyrlyh57dsvhmmdlt555vpvwdrky0ykf4le4k7zuc3pvuy0 |  612352961 | reward_epoch_237
 stake1u9z07jwyrlyh57dsvhmmdlt555vpvwdrky0ykf4le4k7zuc3pvuy0 |  658610556 | reward_epoch_231
 stake1u9z07jwyrlyh57dsvhmmdlt555vpvwdrky0ykf4le4k7zuc3pvuy0 | 1319746538 | reward_epoch_219
 stake1u9z07jwyrlyh57dsvhmmdlt555vpvwdrky0ykf4le4k7zuc3pvuy0 | 1342842199 | reward_epoch_218
 stake1u9z07jwyrlyh57dsvhmmdlt555vpvwdrky0ykf4le4k7zuc3pvuy0 | 1374758087 | reward_epoch_216
 stake1u9z07jwyrlyh57dsvhmmdlt555vpvwdrky0ykf4le4k7zuc3pvuy0 | 2428239213 | reward_epoch_220
(19 rows)

Это view который я должен отправить предопределенным в db-sync ?

@dmitrystas Теперь это можно закрыть?

Я так думаю спасибо

Была ли эта страница полезной?
0 / 5 - 0 рейтинги