Cardano-db-sync: Hadiahi meja dengan beberapa tali cinta

Dibuat pada 12 Nov 2020  ·  12Komentar  ·  Sumber: input-output-hk/cardano-db-sync

Saya tidak dapat mengirim transaksi melalui cardano-submit-api, tertulis "WithdrawalsNotInRewardsDELEGS", menyiratkan hadiah yang salah, atau mencoba menarik tidak semua hadiah. Saya memeriksa semua bagian, di mana itu bisa salah. Setelah itu, saya membandingkan hadiah untuk alamat acak yang didapat dari db-sync dan dari yoroi api. Ini adalah ketidakcocokan untuk beberapa (dalam tali cinta):

image
Setiap baris mewakili hadiah db-sync dari SQL ini:
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"
dikurangi hadiah dari yoroi api.

Apa yang terjadi @erikd ?

Sunting: yoroi juga mendapatkannya dari db-sync, jadi ini mungkin perbedaan dari dua nilai yang salah. Bagaimanapun, kesalahannya berasal dari db-sync

Komentar yang paling membantu

Maaf, saya memang menyebutnya sebelum waktunya. Sepertinya masalahnya sudah diperbaiki, saya sedang memantaunya dan akan melaporkan kembali dalam beberapa hari.

Semua 12 komentar

Kami juga memperhatikan ini di Yoroi

Berikut adalah hasil untuk 7 contoh berbeda dari cardano-db-sync di mana nilai sebenarnya adalah 30428426

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

Seperti yang Anda lihat, hanya 1/7 backend yang mendapatkan hasil yang benar

Kami telah memeriksa ulang apakah nilai yang salah ini disimpan dalam database SQL, jadi kami tahu bahwa masalah ini bukan bagian dari tumpukan kami

@SebastienGllmt Apa? Instance db-sync yang berbeda memberikan hasil yang berbeda??? Apakah mereka semua menjalankan versi yang sama?

@xdzurman Apakah Anda dapat menyederhanakan kueri SQL itu? Akan menyenangkan untuk memiliki tiga kolom, hadiah, cadangan, dan perbedaan.

Saya menduga bahwa permintaan itu sebenarnya salah. Tabel hadiah terlihat seperti ini (instance saya saat ini tidak disinkronkan):

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

Jadi untuk setiap epoch ada jumlah hadiah (yaitu snapshot dari hadiah untuk epoch) dan tanpa menjelajahinya dengan benar, saya bahkan tidak yakin apa yang ada di tabel reserve .

@erikd Ini adalah kueri yang kami jalankan di 7 backend berbeda yang memberikan hasil berbeda. Semuanya versi cardano-db-sync dan versi node yang sama

  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'

Alamat yang ditentukan dalam kueri SQL ini hanya pernah mendapatkan hadiah satu kali sehingga lebih mudah untuk digunakan.

Saya menduga bahwa permintaan itu sebenarnya salah. Tabel hadiah terlihat seperti ini (instance saya saat ini tidak disinkronkan):

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

Jadi untuk setiap epoch ada jumlah hadiah (yaitu snapshot dari hadiah untuk epoch) dan tanpa menjelajahinya dengan benar, saya bahkan tidak yakin apa yang ada di tabel reserve .
image

Saya berasumsi bahwa - Cadangan memegang hadiah ITN. Tabel hadiah menentukan hadiah yang diterima di awal zaman itu. Jadi hadiah yang tersisa adalah jumlah dari semua hadiah dan itu adalah hadiah dikurangi penarikan.

Kami menemukan masalah serupa. 137 delegasi telah menarik tepat 500 ADA. Ditampilkan di dalam db-sync db di tabel penarikan. Beberapa dari mereka mendapat saldo negatif setelah itu. Entah ini terkait dengan masalah ini atau kami melakukan sesuatu yang salah di pihak kami.

Sebagai contoh:

Seseorang telah menarik 500 ADA tetapi hanya mendapatkan 200 ADA menurut db-sync. Contoh Saya adalah untuk Epoche pada atau setelah 214

@mmahut Saya tidak yakin. Bug yang diperbaiki pada #413 dapat dengan mudah menyebabkan masalah ini juga. Atau mungkin ada lebih dari satu masalah. @xdzurman ?

@mmahut Ini di berbagai contoh terpisah? Saya membutuhkan cara mudah untuk menghasilkan ini dan memiliki lebih dari satu contoh bukanlah kasus reproduksi yang mudah.

Maaf, saya memang menyebutnya sebelum waktunya. Sepertinya masalahnya sudah diperbaiki, saya sedang memantaunya dan akan melaporkan kembali dalam beberapa hari.

Itu terlihat tetap untuk saya juga, ditutup untuk saat ini. Jangan ragu untuk membuka kembali jika terjadi masalah.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat