Cardano-db-sync: Депозит после выхода из пула должен быть в таблице вознаграждений.

Созданный на 13 нояб. 2020  ·  18Комментарии  ·  Источник: input-output-hk/cardano-db-sync

После удаления пула депозит должен поступить на счет вознаграждений. Хотя он отображается в cardano-cli, его нельзя найти в базе данных.

cardano-cli shelley query stake-address-info \
> --mainnet \
> --address stake1uywjy7h05jmhx9y3wzy94td6xz4txynuccgam0zfn800v8qq33z29
[
    {
        "address": "stake1uywjy7h05jmhx9y3wzy94td6xz4txynuccgam0zfn800v8qq33z29",
        "delegation": "pool1qnrqc7zpwye2r9wtkayh2dryvfqs7unp99f2039duljrsaffq5c",
        "rewardAccountBalance": 500009820
    }
]

image

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

@erikd
Из спецификации бухгалтерской книги :

Стр.21

Напомним, что компенсация за пенсию из пула ставок осуществляется не тогда, когда сертификат, планирующий
вывод на пенсию обрабатывается, но на границе эпохи, для которой вывод на пенсию запланирован.

Стр. 40

• Функция poolRefunds используется для расчета общей суммы возвратов, которые должны быть распределены.
для пулов ставок, которые планируется прекратить. Обратите внимание, что в этом вычислении используется номер временного интервала, соответствующий граничному интервалу эпохи, когда вычисление выполняется. Вернувшийся
map сопоставляет хэш-ключи оператора пула с возвратами, которые в конечном итоге будут возвращены
зарегистрированный бонусный счет.

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

Но таблица 'вознаграждений' - это не то же самое, что изменение stack_address ... Если мы это сделаем, мы также должны сохранить в этой таблице другие вещи, например, награды ITN (таблица 'резерв' на данный момент)

Единственный другой способ получить эти депозиты вместе с вознаграждениями - это запросить в таблице выбытия пула, истек ли пул, подключенный к этому адресу ставки, в заданную эпоху, и добавить жестко запрограммированное значение 500000000 к вознаграждениям, если это значение еще не было отозвано, что снова требует вычислений, если снятие средств не превышает вознаграждение до этого момента времени, и так далее, и так далее, что кажется действительно неуклюжим.

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

Если бы я выбрал получение этих 500 ADA из таблицы pool_retirement, если у пула несколько владельцев, как мне узнать, на какой адрес ставки были вознаграждены эти 500 ADA?

если у пула несколько владельцев, как мне узнать, на какой адрес доли были вознаграждены эти 500 ADA?

депозит возвращается на адрес вознаграждения (всегда один для пула), а не на адрес владельца

депозит возвращается на адрес вознаграждения (всегда один для пула), а не на адрес владельца
В этом есть смысл, спасибо!

Значит, тогда депозит списанного пула будет возвращен на адрес вознаграждения пула, который указан в таблице pool_update, верно?

Я спрашиваю, потому что у меня есть текущий пример, который меня смущает:

SELECT SUM(amount) as reward, NULL as withdrawal
FROM reward
         LEFT JOIN stake_address sa on reward.addr_id = sa.id
WHERE sa.view = 'stake1u9rqg96sdsdrqshpx0x77jna40ws90drts2wks7vuy63dpqj6txws'
UNION
SELECT NULL, SUM(amount)
FROM withdrawal
         LEFT JOIN tx ON withdrawal.tx_id = tx.id
         LEFT JOIN block ON tx.block_id = block.id
         LEFT JOIN stake_address sa on withdrawal.addr_id = sa.id
WHERE sa.view = 'stake1u9rqg96sdsdrqshpx0x77jna40ws90drts2wks7vuy63dpqj6txws';

Этот запрос дает нам общее количество вознаграждений и общее количество снятых с примерного адреса ставки. Разница между ними составляет ровно 500000000 ловеласов. Конечно, это могло быть совпадением, но это довольно сложно представить, поскольку есть и другие подобные примеры. Итак, давайте просто предположим, что это возвращенный депозит пула, тогда этот адрес ставки должен появиться как адрес вознаграждения в таблице pool_update, верно?

SELECT pool_retire.hash_id, sa.view FROM pool_retire
    LEFT JOIN pool_update pu ON pool_retire.hash_id = pu.hash_id
    LEFT JOIN stake_address sa on sa.id = pu.hash_id
WHERE sa.view = 'stake1u9rqg96sdsdrqshpx0x77jna40ws90drts2wks7vuy63dpqj6txws'

Но этот запрос не дал результатов. Я смог выяснить, что адрес доли является совладельцем удаленного пула (pool_hash_id = 8), что привело меня к моему первому вопросу.

Мне просто интересно, как я могу определить, откуда эти 500 ADA. Может ли этот депозит быть связан с ИНН?

Значит, тогда депозит списанного пула будет возвращен на адрес вознаграждения пула, который указан в таблице pool_update, верно?

Правильно

Но этот запрос не дал результатов

sa.id! = pu.hash_id -> sa.id = pu.reward_addr_id

Мне просто интересно, как я могу определить, откуда эти 500 ADA. Может ли этот депозит быть связан с ИНН?

Почти наверняка нет.

Куда мы идем с этой проблемой? Кажется, было немного туда-сюда. Хотите сообщить мне текущее состояние дел по этому поводу?

Несомненно, проблема была перехвачена ... Так что ничего не изменилось в вопросе - депозит, который должен вернуться на адрес вознаграждения после удаления пула, нигде явно не находится в базе данных (например, 500 ADA прибыли в эпоху 245). Но вы должны проверить таблицу вывода на пенсию пула, является ли пул, адрес владельца которого является адресом вознаграждения, который вы ищете, а затем вручную добавить жестко запрограммированное значение `` 500 '' к вознаграждениям пользователя, ЕСЛИ эта сумма из этого точного вывода на пенсию не была снята. пока что. Это кажется мне действительно громоздким, и я предложил, может ли это войти в таблицу вознаграждений или где-то еще, но явно.

депозит, который должен вернуться на адрес вознаграждения после удаления пула, явно нигде не находится в БД

У вас есть пример адреса основной сети, который я могу изучить?

e11d227aefa4b773149170885aadba30aab3127cc611ddbc4999def61c / stack1uywjy7h05jmhx9y3wzy94td6xz4txynuccgam0zfn800v8qq33z29

У вас неправильное представление о возврате депозита. Возврат депозита попадает не в таблицу reward а в таблицу tx . Итак, давайте найдем это.

По интересующему нас адресу:

cexplorer=# select id, view, registered_tx_id from stake_address
               where view = 'stake1uywjy7h05jmhx9y3wzy94td6xz4txynuccgam0zfn800v8qq33z29' ;
  id  |                            view                             | registered_tx_id 
------+-------------------------------------------------------------+------------------
 2820 | stake1uywjy7h05jmhx9y3wzy94td6xz4txynuccgam0zfn800v8qq33z29 |          2420601

поле id может отличаться в разных экземплярах db-sync , но id будет полезно для этого исследования.

Немного сложно, но возврат можно увидеть, используя:

cexplorer=# select stake_deregistration.id, stake_deregistration.addr_id, stake_deregistration.tx_id,
               tx.deposit, block.epoch_no from stake_deregistration
               inner join tx on tx.id = stake_deregistration.tx_id
               inner join block on block.id = tx.block_id
               where stake_deregistration.addr_id = 2820 ; 
 id  | addr_id |  tx_id  | deposit  | epoch_no 
-----+---------+---------+----------+----------
 730 |    2820 | 2842157 | -2000000 |      223

Точно так же регистрация может выглядеть с использованием:

cexplorer=# select stake_registration.id, stake_registration.addr_id, stake_registration.tx_id, tx.deposit,
               block.epoch_no from stake_registration inner join tx on tx.id = stake_registration.tx_id
               inner join block on block.id = tx.block_id
               where stake_registration.addr_id = 2820 ; 
  id   | addr_id |  tx_id  | deposit | epoch_no 
-------+---------+---------+---------+----------
  1649 |    2820 | 2421547 | 2000000 |      208
 86926 |    2820 | 2842177 | 2000000 |      223
(2 rows)

Я предполагаю, что это был адрес доли:

  • зарегистрированный в эпоху 208
  • снята с учета в эпоху 223
  • перерегистрирован снова в эпоху 223.

Все это имеет смысл?

Это имеет смысл для регистрации долей, но я говорил о выходе из пула. И 500 ADA, которые должны быть возвращены на адрес вознаграждения владельца пула.

Я все еще не думаю, что это связано с адресом вознаграждения. У вас есть пример вывода пула на пенсию?

Связь или тот факт, что она появится где-то в базе данных, на самом деле является моим запросом на функцию, а не ошибкой в ​​текущей версии. Пример удаленного пула: pool134dws3tyc7kphwl6gks26cm6l390554lns9lyatm3gkxs6dwj2z. Адрес, который я отправил ранее, является его владельцем

@erikd
Из спецификации бухгалтерской книги :

Стр.21

Напомним, что компенсация за пенсию из пула ставок осуществляется не тогда, когда сертификат, планирующий
вывод на пенсию обрабатывается, но на границе эпохи, для которой вывод на пенсию запланирован.

Стр. 40

• Функция poolRefunds используется для расчета общей суммы возвратов, которые должны быть распределены.
для пулов ставок, которые планируется прекратить. Обратите внимание, что в этом вычислении используется номер временного интервала, соответствующий граничному интервалу эпохи, когда вычисление выполняется. Вернувшийся
map сопоставляет хэш-ключи оператора пула с возвратами, которые в конечном итоге будут возвращены
зарегистрированный бонусный счет.

@xdzurman Извините за это:

Отношение или тот факт, что он будет где-то отображаться в базе данных, на самом деле является моим запросом на функцию,

В чем именно заключается запрос функции?

@erikd Чтобы поместить депозит пула (500 ADA) где-нибудь в базе данных, после того, как пул будет удален. В настоящее время его нельзя явно связать с адресом вознаграждения, которому он принадлежит.

Закрытие этого в пользу https://github.com/input-output-hk/cardano-db-sync/issues/474 .

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