Skip to content

إعادة قراءة كتلة من البلوكشين

⚠️ للمستخدمين المتقدمين فقط. تتم جميع الإجراءات على مسؤوليتك الخاصة. قد تؤدي التغييرات الخاطئة في قاعدة البيانات إلى فقدان أو تكرار المعاملات. تأكد من فهم كل خطوة قبل المتابعة.

المشكلة

بسبب إعادة تنظيم الكتل في شبكة إيثريوم، قد تكون المعاملة المؤكدة على البلوكشين مفقودة من النظام. يحدث هذا عندما تعالج المعالجة كتلة من فرع سلسلة مؤقت (مُهمَل) وتتخطى الكتلة المقابلة من السلسلة الرئيسية. لاستعادة الحالة الصحيحة، تحتاج إلى تشغيل إعادة قراءة الكتلة المطلوبة يدويًا.

الحل

1. إنشاء نسخة احتياطية من قاعدة البيانات

bash
sudo -u postgres pg_dump dv-processing > /tmp/dv-processing_backup_$(date +%Y%m%d_%H%M%S).sql

تحقق من إنشاء الملف وأنه غير فارغ:

bash
ls -lh /tmp/dv-processing_backup_*.sql

2. (!مهم — في طرفية منفصلة) إيقاف المعالجة

bash
sudo systemctl stop dv-processing

3. (في الطرفية الرئيسية) التبديل إلى مستخدم قاعدة البيانات

bash
sudo su
sudo su - postgres

4. (في الطرفية الرئيسية) تشغيل psql

bash
psql

أو

bash
/home/dv/embedded/usr/local/pgsql/bin/psql -p 5433

5. (في الطرفية الرئيسية) الاتصال بقاعدة بيانات dv-processing

sql
\c dv-processing

6. (في الطرفية الرئيسية) قراءة حالة التحليل الحالية

sql
select number from processed_blocks where blockchain = 'bsc';

!مهم — تذكر النتيجة:

  number
----------
 81923203
(1 row)

7. (في الطرفية الرئيسية) تحديث القيمة إلى الكتلة -1 من معاملتك

مثال للمعاملة 0xffe238ba2c1e028a8ec1c467cef53fa59112e2ccc922dc64345817f9da0f4e71 — الكتلة 81921203:

sql
update processed_blocks set number = 81921203 where blockchain = 'bsc';

8. (!مهم — في طرفية منفصلة) تشغيل المعالجة

bash
sudo systemctl start dv-processing

9. (في الطرفية الرئيسية) بعد دقيقتين، تحقق من تقدم الكتل

يجب أن تزداد القيمة بعشرات أو مئات من 81921203 — وهذا يشير إلى إعادة قراءة ناجحة للكتلة.

sql
select number from processed_blocks where blockchain = 'bsc';

10. (!مهم — في طرفية منفصلة) إيقاف المعالجة

bash
sudo systemctl stop dv-processing

11. (في الطرفية الرئيسية) استعادة قيمة الكتلة إلى ما دونته في الخطوة 6

sql
update processed_blocks set number = 81923203 where blockchain = 'bsc';

12. (!مهم — في طرفية منفصلة) تشغيل المعالجة

bash
sudo systemctl start dv-processing

بعد ذلك، من المرجح أن تُلتقط المعاملة.