Je n'ai pas pu envoyer une transaction via cardano-submit-api, elle indiquait "WithdrawalsNotInRewardsDELEGS", impliquant de mauvaises récompenses ou essayant de ne pas retirer toutes les récompenses. J'ai vérifié toutes les pièces, là où ça aurait pu mal tourner. Après cela, j'ai comparé les récompenses pour les adresses aléatoires obtenues de db-sync et de yoroi api. Ce sont les décalages pour quelques-uns (en lovelaces):
Chaque ligne représente les récompenses db-sync de ce 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"
moins les récompenses de Yoroi api.
Que se passe-t-il @erikd ?
Edit : yoroi l'obtient également de db-sync, il s'agit donc peut-être de différences de deux valeurs erronées. Dans tous les cas, l'erreur provient de db-sync
Nous avons également remarqué cela à Yoroi
Voici les résultats pour 7 instances différentes de cardano-db-sync où la valeur réelle est 30428426
backend#1 30428424
backend#2 30428424
backend#3 30428424
backend#4 30428423
backend#5 30428430
backend#6 30428424
backend#7 30428426
Comme vous pouvez le voir, seuls 1/7 backends ont obtenu le bon résultat
Nous avons revérifié que ces valeurs incorrectes sont stockées dans la base de données SQL, nous savons donc que ce problème n'est pas dans notre partie de la pile
@SebastienGllmt Quoi ? Différentes instances db-sync
donnent des résultats différents ??? Exécutent-ils tous la même version ?
@xdzurman Seriez-vous capable de simplifier cette requête SQL ? Ce serait bien d'avoir trois colonnes, récompense, réserve et différence.
Je soupçonne que la requête est en fait erronée. Le tableau des récompenses ressemble à ceci (mon instance n'est pas actuellement synchronisée) :
cexplorer=# select * from reward ;
id | addr_id | amount | epoch_no | pool_id | block_id
----+---------+--------+----------+---------+----------
(0 rows)
Donc, pour chaque époque , il y a un montant de récompense (c'est-à-dire un instantané des récompenses pour l'époque) et sans l'explorer correctement, je ne suis même pas sûr de ce qu'il y a dans la table reserve
.
@erikd C'est la requête que nous avons exécutée sur les 7 backends différents qui ont donné des résultats différents. Ce sont tous la même version de cardano-db-sync et la même version de nœud
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'
L'adresse spécifiée dans cette requête SQL n'a jamais gagné de récompenses qu'une seule fois, il est donc plus facile de travailler avec.
Je soupçonne que la requête est en fait erronée. Le tableau des récompenses ressemble à ceci (mon instance n'est pas actuellement synchronisée) :
cexplorer=# select * from reward ; id | addr_id | amount | epoch_no | pool_id | block_id ----+---------+--------+----------+---------+---------- (0 rows)
Donc, pour chaque époque , il y a un montant de récompense (c'est-à-dire un instantané des récompenses pour l'époque) et sans l'explorer correctement, je ne suis même pas sûr de ce qu'il y a dans la table
reserve
.
Je suppose que - La réserve détient des récompenses ITN. Le tableau des récompenses spécifie les récompenses reçues au début de cette époque. Ainsi, les récompenses restantes sont la somme de toutes les récompenses et des récompenses moins les retraits.
Nous avons découvert des problèmes similaires. 137 délégants ont retiré exactement 500 ADA. Montré à l'intérieur de la base de données db-sync dans le retrait de la table. Certains d'entre eux ont obtenu un solde négatif par la suite. Soit cela est lié à ce problème, soit nous faisons quelque chose de mal de notre côté.
Par example:
L'un a retiré 500 ADA mais n'a obtenu que 200 ADA selon db-sync. Mon exemple est pour Epoche à ou après 214
https://github.com/input-output-hk/cardano-db-sync/pull/413 corrige-t-il également cela ?
@mmahut je ne suis pas sûr. Le bogue corrigé sur #413 pourrait facilement avoir causé ce problème également. Ou il peut y avoir plus d'un problème. @xdzurman ?
@mmahut C'est dans des instances distinctes ? J'ai besoin d'un moyen simple de produire cela et avoir plus d'une instance n'est pas un cas de reproduction facile.
Désolé, je l'ai appelé prématurément. Il semble que le problème soit résolu, je le surveille et ferai rapport dans quelques jours.
Cela semble également corrigé pour moi, fermant pour l'instant. N'hésitez pas à rouvrir en cas de problème.
Commentaire le plus utile
Désolé, je l'ai appelé prématurément. Il semble que le problème soit résolu, je le surveille et ferai rapport dans quelques jours.