Cardano-db-sync: Mesa de recompensas por algunos lovelaces

Creado en 12 nov. 2020  ·  12Comentarios  ·  Fuente: input-output-hk/cardano-db-sync

No pude enviar una transacción a través de cardano-submit-api, decía "RetirosNoEnRecompensasDELEGS", lo que implicaba recompensas incorrectas o no intentaba retirar todas las recompensas. Revisé todas las partes, donde podría haber salido mal. Después de eso, comparé las recompensas por direcciones aleatorias obtenidas de db-sync y de yoroi api. Estos son los desajustes de algunos (en lovelaces):

image
Cada fila representa recompensas de sincronización de base de datos de este SQL:
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"
menos recompensas de yoroi api.

¿Qué está pasando @erikd ?

Editar: yoroi también lo obtiene de db-sync, por lo que posiblemente sean diferencias de dos valores incorrectos. De cualquier manera, el error se origina en db-sync

Comentario más útil

Lo siento, lo llamé antes de tiempo. Parece que el problema está solucionado, lo estoy monitoreando y le informaré en unos días.

Todos 12 comentarios

También hemos notado esto en Yoroi.

Aquí están los resultados de 7 instancias diferentes de cardano-db-sync donde el valor real es 30428426

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

Como puede ver, solo 1/7 backends obtuvieron el resultado correcto

Hemos verificado dos veces que estos valores incorrectos estén almacenados en la base de datos SQL, por lo que sabemos que este problema no está en nuestra parte de la pila.

@SebastienGllmt ¿Qué? ¿Diferentes instancias db-sync dan resultados diferentes? ¿Están todos ejecutando la misma versión?

@xdzurman ¿Sería capaz de simplificar esa consulta SQL? Sería bueno tener tres columnas, recompensa, reserva y diferencia.

Sospecho que la consulta es realmente incorrecta. La tabla de recompensas se ve así (mi instancia no está sincronizada actualmente):

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

Entonces, para cada época hay una cantidad de recompensa (es decir, una instantánea de las recompensas de la época) y sin explorarla correctamente, ni siquiera estoy seguro de qué hay en la tabla reserve .

@erikd Esta es la consulta que ejecutamos en los 7 backends diferentes que dieron resultados diferentes. Todos son la misma versión de cardano-db-sync y la misma versión de nodo

  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'

La dirección especificada en esta consulta SQL solo obtuvo recompensas una vez, por lo que es más fácil trabajar con ella.

Sospecho que la consulta es realmente incorrecta. La tabla de recompensas se ve así (mi instancia no está sincronizada actualmente):

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

Entonces, para cada época hay una cantidad de recompensa (es decir, una instantánea de las recompensas de la época) y sin explorarla correctamente, ni siquiera estoy seguro de qué hay en la tabla reserve .
image

Supongo que - La reserva tiene recompensas ITN. La tabla de recompensas especifica las recompensas recibidas al comienzo de esa época. Entonces, las recompensas restantes son la suma de todas las recompensas y las recompensas menos los retiros.

Descubrimos problemas similares. 137 delegadores han retirado exactamente 500 ADA. Se muestra dentro de db-sync db en el retiro de la tabla. Algunos de ellos obtuvieron un saldo negativo después de eso. O esto está relacionado con este problema o estamos haciendo algo mal de nuestra parte.

Por ejemplo:

Uno retiró 500 ADA pero obtuvo solo 200 ADA según db-sync. Mi ejemplo es para Epoche en o después de 214

@mmahut No estoy seguro. El error corregido en el n.º 413 también podría haber causado fácilmente este problema. O puede haber más de un problema. @xdzurman ?

@mmahut ¿ Esto es en instancias separadas? Necesito una manera fácil de producir esto y tener más de una instancia no es un caso de reproducción fácil.

Lo siento, lo llamé antes de tiempo. Parece que el problema está solucionado, lo estoy monitoreando y le informaré en unos días.

Parece arreglado para mí también, cerrándose por ahora. Siéntase libre de reabrir si ocurre algún problema.

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

dmitrystas picture dmitrystas  ·  28Comentarios

reliablestaking picture reliablestaking  ·  31Comentarios

rhyslbw picture rhyslbw  ·  4Comentarios

erikd picture erikd  ·  10Comentarios

erikd picture erikd  ·  10Comentarios