После удаления пула депозит должен поступить на счет вознаграждений. Хотя он отображается в cardano-cli, его нельзя найти в базе данных.
cardano-cli shelley query stake-address-info \
> --mainnet \
> --address stake1uywjy7h05jmhx9y3wzy94td6xz4txynuccgam0zfn800v8qq33z29
[
{
"address": "stake1uywjy7h05jmhx9y3wzy94td6xz4txynuccgam0zfn800v8qq33z29",
"delegation": "pool1qnrqc7zpwye2r9wtkayh2dryvfqs7unp99f2039duljrsaffq5c",
"rewardAccountBalance": 500009820
}
]
Но таблица 'вознаграждений' - это не то же самое, что изменение 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)
Я предполагаю, что это был адрес доли:
Все это имеет смысл?
Это имеет смысл для регистрации долей, но я говорил о выходе из пула. И 500 ADA, которые должны быть возвращены на адрес вознаграждения владельца пула.
Я все еще не думаю, что это связано с адресом вознаграждения. У вас есть пример вывода пула на пенсию?
Связь или тот факт, что она появится где-то в базе данных, на самом деле является моим запросом на функцию, а не ошибкой в текущей версии. Пример удаленного пула: pool134dws3tyc7kphwl6gks26cm6l390554lns9lyatm3gkxs6dwj2z. Адрес, который я отправил ранее, является его владельцем
@erikd
Из спецификации бухгалтерской книги :
Стр.21
Напомним, что компенсация за пенсию из пула ставок осуществляется не тогда, когда сертификат, планирующий
вывод на пенсию обрабатывается, но на границе эпохи, для которой вывод на пенсию запланирован.
Стр. 40
• Функция poolRefunds используется для расчета общей суммы возвратов, которые должны быть распределены.
для пулов ставок, которые планируется прекратить. Обратите внимание, что в этом вычислении используется номер временного интервала, соответствующий граничному интервалу эпохи, когда вычисление выполняется. Вернувшийся
map сопоставляет хэш-ключи оператора пула с возвратами, которые в конечном итоге будут возвращены
зарегистрированный бонусный счет.
@xdzurman Извините за это:
Отношение или тот факт, что он будет где-то отображаться в базе данных, на самом деле является моим запросом на функцию,
В чем именно заключается запрос функции?
@erikd Чтобы поместить депозит пула (500 ADA) где-нибудь в базе данных, после того, как пул будет удален. В настоящее время его нельзя явно связать с адресом вознаграждения, которому он принадлежит.
Закрытие этого в пользу https://github.com/input-output-hk/cardano-db-sync/issues/474 .
Самый полезный комментарий
@erikd
Из спецификации бухгалтерской книги :
Стр.21
Стр. 40