Block erneut aus der Blockchain lesen
⚠️ Nur für fortgeschrittene Benutzer. Alle Aktionen erfolgen auf eigenes Risiko. Falsche Änderungen an der Datenbank können zu Verlust oder Duplizierung von Transaktionen führen. Stellen Sie sicher, dass Sie jeden Schritt verstehen, bevor Sie fortfahren.
Problem
Aufgrund der Block-Reorganisation im Ethereum-Netzwerk kann eine im Blockchain bestätigte Transaktion im System fehlen. Dies geschieht, wenn die Verarbeitung einen Block aus einem temporären (verworfenen) Chain-Zweig verarbeitet und den entsprechenden Block der Hauptkette übersprungen hat. Um den korrekten Zustand wiederherzustellen, müssen Sie das erneute Lesen des erforderlichen Blocks manuell auslösen.
Lösung
1. Datenbanksicherung erstellen
sudo -u postgres pg_dump dv-processing > /tmp/dv-processing_backup_$(date +%Y%m%d_%H%M%S).sqlÜberprüfen Sie, dass die Datei erstellt wurde und nicht leer ist:
ls -lh /tmp/dv-processing_backup_*.sql2. (!WICHTIG — in einem separaten Terminal) Verarbeitung stoppen
sudo systemctl stop dv-processing3. (im Hauptterminal) Zum Datenbankbenutzer wechseln
sudo su
sudo su - postgres4. (im Hauptterminal) psql starten
psqloder
/home/dv/embedded/usr/local/pgsql/bin/psql -p 54335. (im Hauptterminal) Mit der dv-processing-Datenbank verbinden
\c dv-processing6. (im Hauptterminal) Aktuellen Parsing-Zustand auslesen
select number from processed_blocks where blockchain = 'bsc';!WICHTIG — merken Sie sich das Ergebnis:
number ---------- 81923203 (1 row)
7. (im Hauptterminal) Wert auf Block -1 Ihrer Transaktion setzen
Beispiel für Transaktion 0xffe238ba2c1e028a8ec1c467cef53fa59112e2ccc922dc64345817f9da0f4e71 — Block 81921203:
update processed_blocks set number = 81921203 where blockchain = 'bsc';8. (!WICHTIG — in einem separaten Terminal) Verarbeitung starten
sudo systemctl start dv-processing9. (im Hauptterminal) Nach ein paar Minuten prüfen, ob die Blöcke fortgeschritten sind
Der Wert sollte um mehrere Zehner oder Hunderte von 81921203 gestiegen sein — dies zeigt erfolgreiches erneutes Lesen des Blocks an.
select number from processed_blocks where blockchain = 'bsc';10. (!WICHTIG — in einem separaten Terminal) Verarbeitung stoppen
sudo systemctl stop dv-processing11. (im Hauptterminal) Blockwert auf den in Schritt 6 notierten Wert zurücksetzen
update processed_blocks set number = 81923203 where blockchain = 'bsc';12. (!WICHTIG — in einem separaten Terminal) Verarbeitung starten
sudo systemctl start dv-processingDanach wird die Transaktion mit hoher Wahrscheinlichkeit erfasst.