Cardano-db-sync: Belohnungstabelle von ein paar Lieblingen entfernt

Erstellt am 12. Nov. 2020  ·  12Kommentare  ·  Quelle: input-output-hk/cardano-db-sync

Ich konnte keine Transaktion über cardano-submit-api senden, es hieß „WithdrawalsNotInRewardsDELEGS“, was falsche Belohnungen impliziert oder versucht, nicht alle Belohnungen abzuheben. Ich habe alle Teile überprüft, wo es hätte schief gehen können. Danach habe ich Belohnungen für zufällige Adressen verglichen, die ich von db-sync und von yoroi api erhalten habe. Dies sind die Nichtübereinstimmungen für ein paar (in Lovelaces):

image
Jede Zeile stellt db-sync-Belohnungen aus diesem SQL dar:
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"
minus Belohnungen von yoroi api.

Was ist los @erikd ?

Bearbeiten: yoroi bekommt es auch von db-sync, also sind dies möglicherweise Unterschiede von zwei falschen Werten. In jedem Fall stammt der Fehler von db-sync

Hilfreichster Kommentar

Entschuldigung, ich habe es voreilig angerufen. Es sieht so aus, als wäre das Problem behoben, ich beobachte es und werde in ein paar Tagen wieder berichten.

Alle 12 Kommentare

Das ist uns auch bei Yoroi aufgefallen

Hier sind die Ergebnisse für 7 verschiedene Instanzen von cardano-db-sync, wobei der tatsächliche Wert 30428426 ist

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

Wie Sie sehen können, haben nur 1/7 Backends das richtige Ergebnis erhalten

Wir haben doppelt überprüft, ob diese falschen Werte in der SQL-Datenbank gespeichert sind, daher wissen wir, dass dieses Problem nicht in unserem Teil des Stacks liegt

@SebastienGllmt Was? Unterschiedliche db-sync Instanzen liefern unterschiedliche Ergebnisse??? Laufen alle mit der gleichen Version?

@xdzurman Könnten Sie diese SQL-Abfrage vereinfachen? Es wäre schön, drei Spalten zu haben, Belohnung, Reserve und Differenz.

Ich vermute, dass die Abfrage tatsächlich falsch ist. Die Belohnungstabelle sieht so aus (meine Instanz wird derzeit nicht synchronisiert):

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

Für jede Epoche gibt es also einen Belohnungsbetrag (dh eine Momentaufnahme der Belohnungen für die Epoche) und ohne es richtig zu untersuchen, bin ich mir nicht einmal sicher, was in der reserve -Tabelle steht.

@erikd Dies ist die Abfrage, die wir auf den 7 verschiedenen Backends ausgeführt haben, die unterschiedliche Ergebnisse lieferten. Sie haben alle dieselbe Version von cardano-db-sync und dieselbe Node-Version

  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'

Die in dieser SQL-Abfrage angegebene Adresse hat bisher nur einmal Prämien verdient, sodass es einfacher ist, damit zu arbeiten.

Ich vermute, dass die Abfrage tatsächlich falsch ist. Die Belohnungstabelle sieht so aus (meine Instanz wird derzeit nicht synchronisiert):

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

Für jede Epoche gibt es also einen Belohnungsbetrag (dh eine Momentaufnahme der Belohnungen für die Epoche) und ohne es richtig zu untersuchen, bin ich mir nicht einmal sicher, was in der reserve -Tabelle steht.
image

Ich nehme an, dass - Die Reserve enthält ITN-Belohnungen. Die Belohnungstabelle gibt Belohnungen an, die zu Beginn dieser Epoche erhalten wurden. Die verbleibenden Prämien sind also die Summe aller Prämien und ihrer Prämien abzüglich der Auszahlungen.

Wir haben ähnliche Probleme entdeckt. 137 Delegierte haben genau 500 ADA zurückgezogen. Dargestellt innerhalb von db-sync db in der Tabelle Entnahme. Einige von ihnen haben danach einen negativen Saldo. Entweder hängt dies mit diesem Problem zusammen, oder wir machen unsererseits etwas falsch.

Beispielsweise:

Man hat 500 ADA abgezogen aber laut db-sync nur 200 ADA bekommen. Mein Beispiel ist für Epoche bei oder nach 214

@mmahut Ich bin mir nicht sicher. Der in #413 behobene Fehler könnte auch dieses Problem verursacht haben. Oder es könnte mehr als ein Problem geben. @xdzurman ?

@mmahut Dies ist über separate Instanzen hinweg? Ich brauche eine einfache Möglichkeit, dies zu produzieren, und mehr als eine Instanz zu haben, ist kein einfacher Reproduktionsfall.

Entschuldigung, ich habe es voreilig angerufen. Es sieht so aus, als wäre das Problem behoben, ich beobachte es und werde in ein paar Tagen wieder berichten.

Es sieht auch für mich behoben aus und schließt vorerst. Fühlen Sie sich frei, wieder zu öffnen, wenn irgendwelche Probleme auftreten.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen