Cardano-db-sync: O depósito após a aposentadoria do pool deve estar na tabela de recompensas

Criado em 13 nov. 2020  ·  18Comentários  ·  Fonte: input-output-hk/cardano-db-sync

Depois de retirar uma piscina, o depósito deve chegar à conta de recompensas. Embora visível em cardano-cli, não pode ser encontrado no banco de dados.

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

image

Comentários muito úteis

@erikd
Da especificação do

Página 21

Lembre-se de que os reembolsos de aposentadoria do pool de apostas não são emitidos quando um certificado programando o
a aposentadoria é processada, mas no limite da época para a qual a aposentadoria está programada.

Página 40

• A função poolRefunds é usada para calcular os reembolsos totais que devem ser distribuídos
para grupos de apostas com aposentadoria programada. Observe que este cálculo leva um número de slot correspondente ao slot de limite de época quando o cálculo é executado. O devolvido
mapear os hashkeys do operador do pool para os reembolsos, que serão devolvidos ao
conta de recompensa registrada.

Todos 18 comentários

Mas a tabela de 'recompensas' não é o mesmo que a mudança de endereço_estaca ... Se fizermos isso, devemos também armazenar nesta tabela outras coisas, como recompensas ITN (tabela 'reserva' no momento) por exemplo

A única outra maneira de obter esses depósitos junto com as recompensas seria consultar a mesa de aposentadoria do pool, se um pool conectado a este endereço de aposta expirou em uma determinada época, e adicionar um valor 500000000 codificado às recompensas se esse valor ainda não tiver sido retirado, o que novamente requer computação se os saques não forem maiores do que recompensas até aquele ponto no tempo, e assim por diante, o que parece realmente desajeitado.

No entanto, ainda acho que deve ser declarado no banco de dados de forma mais explícita, sem esses valores embutidos em código e tal. Talvez outra mesa? Ou uma relação mais simples?

Se eu escolher obter esses 500 ADA da tabela pool_retirement, se o pool tiver vários proprietários, como eu descobriria para qual endereço de aposta esses 500 ADA foram recompensados?

se o pool tiver vários proprietários, como eu saberia para qual endereço de aposta esses 500 ADA foram recompensados?

o depósito é devolvido para o endereço de recompensas (é sempre um para um pool), não para o endereço do proprietário

o depósito é devolvido para o endereço de recompensas (é sempre um para um pool), não para o endereço do proprietário
Isso faz sentido, obrigado!

Então, o depósito de um pool retirado será devolvido ao endereço de recompensa do pool que está declarado na tabela pool_update, certo?

Estou perguntando porque tenho o exemplo atual que me confunde:

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';

Esta consulta nos dá as recompensas totais e as retiradas totais de um endereço de aposta de exemplo. A diferença entre aqueles é exatamente 500000000 lovelace. Claro que pode ser uma coincidência, mas isso é muito difícil de imaginar, já que existem outros exemplos como esse. Então, vamos assumir que este é um depósito de pool devolvido, então este endereço de aposta deve ocorrer como um endereço de recompensa na tabela pool_update, certo?

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'

Mas essa consulta não leva a nenhum resultado. O que descobri é que o endereço da aposta é coproprietário de um pool aposentado (pool_hash_id = 8), o que me levou à primeira pergunta.

Só estou me perguntando como posso determinar de onde vêm esses 500 ADA. Este depósito pode estar relacionado com o ITN?

Então, o depósito de um pool retirado será devolvido ao endereço de recompensa do pool que está declarado na tabela pool_update, certo?

direito

Mas esta consulta não leva a nenhum resultado

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

Só estou me perguntando como posso determinar de onde vêm esses 500 ADA. Este depósito pode estar relacionado com o ITN?

Quase certamente não.

Onde estamos indo com esse problema. Parece que houve um certo vaivém. Quer me atualizar sobre a situação atual?

Claro, o problema foi sequestrado um pouco. Portanto, nada mudou sobre a questão - o depósito que deve retornar ao endereço de recompensas após a retirada de um pool não está explicitamente em nenhum lugar do banco de dados (por exemplo, 500 ADA chegaram na época 245). Mas você deve verificar a tabela de aposentadoria do pool, se o pool cujo endereço do proprietário é o endereço de recompensa que você está procurando e, em seguida, adicionar manualmente um valor codificado de '500' às recompensas do usuário SE este valor dessa aposentadoria exata não tiver sido retirado ainda. O que parece muito complicado para mim e propus se poderia ir para a mesa de recompensas, ou em outro lugar, mas de forma explícita.

o depósito que deve retornar ao endereço de recompensas após a retirada de um pool não está explicitamente em nenhum lugar do banco de dados

Você tem um exemplo de endereço de mainnet para eu investigar?

e11d227aefa4b773149170885aadba30aab3127cc611ddbc4999def61c / stake1uywjy7h05jmhx9y3wzy94td6xz4txynuccgam0zfn800v8qq33z29

Você tem um conceito errado sobre o reembolso do depósito. Os reembolsos de depósito não terminam na mesa reward mas sim na mesa tx . Então vamos encontrar.

Para o endereço em que estamos interessados:

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

o campo id pode ser diferente em db-sync instâncias, mas o id será útil para esta exploração.

Um pouco complexo, mas o reembolso pode ser visto usando:

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

Da mesma forma, o registro pode ser visto usando:

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)

Presumo que este endereço de estaca seja:

  • registrado na época 208
  • cancelado na época 223
  • registrado novamente na época 223.

Isso tudo faz sentido?

Faz sentido para o registro da aposta, mas eu estava falando sobre a aposentadoria do pool. E o 500 ADA que deve ser devolvido ao endereço de recompensa do proprietário do pool.

Ainda não acho que remeta ao endereço da recompensa. Você tem um exemplo de uma piscina sendo aposentada?

A relação ou o fato de que ele iria aparecer no banco de dados em algum lugar é na verdade meu pedido de um recurso, não um bug na versão atual. Exemplo de pool retirado: pool134dws3tyc7kphwl6gks26cm6l390554lns9lyatm3gkxs6dwj2z. O endereço que enviei anteriormente é o seu dono

@erikd
Da especificação do

Página 21

Lembre-se de que os reembolsos de aposentadoria do pool de apostas não são emitidos quando um certificado programando o
a aposentadoria é processada, mas no limite da época para a qual a aposentadoria está programada.

Página 40

• A função poolRefunds é usada para calcular os reembolsos totais que devem ser distribuídos
para grupos de apostas com aposentadoria programada. Observe que este cálculo leva um número de slot correspondente ao slot de limite de época quando o cálculo é executado. O devolvido
mapear os hashkeys do operador do pool para os reembolsos, que serão devolvidos ao
conta de recompensa registrada.

@xdzurman Sinto muito:

A relação ou o fato de que apareceria no banco de dados em algum lugar é na verdade minha solicitação de um recurso,

O que exatamente é a solicitação de recurso?

@erikd Para colocar o depósito do pool (500 ADA) em algum lugar do banco de dados, depois que o pool for retirado. Atualmente, ele não pode ser explicitamente vinculado ao endereço do prêmio ao qual pertence.

Esta página foi útil?
0 / 5 - 0 avaliações