Cardano-db-sync: Setoran setelah pensiun kumpulan harus ada di tabel hadiah

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

Setelah menghentikan pool, deposit akan masuk ke akun hadiah. Meskipun terlihat di cardano-cli, itu tidak dapat ditemukan di database.

cardano-cli shelley query stake-address-info \
> --mainnet \
> --address stake1uywjy7h05jmhx9y3wzy94td6xz4txynuccgam0zfn800v8qq33z29
[
    {
        "address": "stake1uywjy7h05jmhx9y3wzy94td6xz4txynuccgam0zfn800v8qq33z29",
        "delegation": "pool1qnrqc7zpwye2r9wtkayh2dryvfqs7unp99f2039duljrsaffq5c",
        "rewardAccountBalance": 500009820
    }
]

image

Komentar yang paling membantu

@erikd
Dari buku besar spesifikasi :

halaman 21

Ingatlah bahwa pengembalian dana pensiun kumpulan pasak dikeluarkan bukan saat sertifikat menjadwalkan
pensiun diproses, tetapi pada batas zaman yang pensiun dijadwalkan.

halaman 40

• Fungsi poolRefunds digunakan untuk menghitung total refund yang harus dibagikan
untuk kelompok pasak yang dijadwalkan untuk pensiun. Perhatikan bahwa perhitungan ini mengambil nomor slot yang sesuai dengan slot batas epoch saat perhitungan dilakukan. Yang kembali
peta peta kolam operator hashkey untuk pengembalian dana, yang pada akhirnya akan dikembalikan ke
akun hadiah terdaftar.

Semua 18 komentar

Tapi tabel 'rewards' tidak sama dengan perubahan stake_address... Jika kita melakukan ini, kita juga harus menyimpan ke tabel ini hal-hal lain, seperti hadiah ITN (tabel 'reserve' saat ini) misalnya

Satu-satunya cara lain untuk mendapatkan setoran tersebut bersama dengan hadiah adalah dengan menanyakan tabel pensiun kumpulan, apakah kumpulan yang terhubung ke alamat pasak ini kedaluwarsa dalam jangka waktu tertentu, dan menambahkan nilai 500000000 hardcode ke hadiah jika nilai itu belum ditarik, yang lagi-lagi membutuhkan komputasi jika penarikan tidak lebih tinggi dari imbalan sampai saat itu, dan seterusnya dan seterusnya, yang tampaknya sangat kikuk.

Namun, saya masih berpikir itu harus dinyatakan dalam db lebih eksplisit tanpa nilai-nilai kode keras ini dan semacamnya. Mungkin meja lain? Atau hubungan yang lebih sederhana?

Jika saya memilih untuk mendapatkan 500 ADA ini dari tabel pool_retirement, jika pool memiliki banyak pemilik, bagaimana saya mengetahui ke alamat pasak mana 500 ADA ini telah diberi hadiah?

jika kumpulan memiliki banyak pemilik, bagaimana saya mengetahui ke alamat pasak mana 500 ADA ini telah diberi hadiah?

deposit dikembalikan ke alamat hadiah (selalu satu untuk pool), bukan alamat pemilik

deposit dikembalikan ke alamat hadiah (selalu satu untuk pool), bukan alamat pemilik
Itu masuk akal terima kasih!

Jadi deposit pool yang sudah pensiun akan dikembalikan ke alamat reward pool yang dideklarasikan di tabel pool_update kan?

Saya bertanya karena saya memiliki contoh saat ini yang membingungkan saya:

SELECT SUM(amount) as reward, NULL as withdrawal
FROM reward
         LEFT JOIN stake_address sa on reward.addr_id = sa.id
WHERE sa.view = 'stake1u9rqg96sdsdrqshpx0x77jna40ws90drts2wks7vuy63dpqj6txws'
UNION
SELECT NULL, SUM(amount)
FROM withdrawal
         LEFT JOIN tx ON withdrawal.tx_id = tx.id
         LEFT JOIN block ON tx.block_id = block.id
         LEFT JOIN stake_address sa on withdrawal.addr_id = sa.id
WHERE sa.view = 'stake1u9rqg96sdsdrqshpx0x77jna40ws90drts2wks7vuy63dpqj6txws';

Kueri ini memberi kami hadiah total dan penarikan total dari contoh alamat pasak. Perbedaan antara itu adalah 500.0000000 lovelace. Tentu itu bisa menjadi kebetulan tapi itu cukup sulit untuk dibayangkan karena ada contoh lain seperti itu. Jadi anggap saja ini adalah deposit pool yang dikembalikan maka alamat stake ini seharusnya muncul sebagai alamat hadiah di tabel pool_update, bukan?

SELECT pool_retire.hash_id, sa.view FROM pool_retire
    LEFT JOIN pool_update pu ON pool_retire.hash_id = pu.hash_id
    LEFT JOIN stake_address sa on sa.id = pu.hash_id
WHERE sa.view = 'stake1u9rqg96sdsdrqshpx0x77jna40ws90drts2wks7vuy63dpqj6txws'

Tetapi kueri ini tidak menghasilkan apa-apa. Hal yang dapat saya ketahui adalah bahwa alamat pasak adalah pemilik bersama dari kumpulan pensiunan (pool_hash_id = 8) yang mengarahkan saya ke pertanyaan pertama saya.

Saya hanya ingin tahu bagaimana saya bisa menentukan dari mana 500 ADA ini berasal. Mungkinkah setoran ini terkait dengan ITN?

Jadi deposit pool yang sudah pensiun akan dikembalikan ke alamat reward pool yang dideklarasikan di tabel pool_update kan?

Baik

Tapi kueri ini tidak menghasilkan apa-apa

sa.id != pu.hash_id -> sa.id = pu.reward_addr_id

Saya hanya ingin tahu bagaimana saya bisa menentukan dari mana 500 ADA ini berasal. Mungkinkah setoran ini terkait dengan ITN?

Hampir pasti tidak.

Sampai di mana kita dengan masalah ini. Tampaknya telah sedikit bolak-balik. Ingin memperbarui saya tentang status permainan saat ini?

Tentu, masalahnya sedikit dibajak.. Jadi tidak ada yang berubah tentang pertanyaan itu - setoran yang harus dikembalikan ke alamat hadiah setelah menghentikan kumpulan tidak ada di mana pun secara eksplisit di DB (mis. 500 ADA tiba di Epoch 245). Tetapi Anda harus memeriksa tabel pensiun kumpulan, apakah kumpulan yang alamat pemiliknya adalah alamat hadiah yang Anda cari dan kemudian secara manual menambahkan nilai hardcode '500' ke hadiah pengguna JIKA jumlah ini dari pensiun yang tepat ini belum ditarik belum. Yang tampaknya sangat rumit bagi saya dan saya mengusulkan apakah itu bisa masuk ke tabel hadiah, atau di tempat lain, tetapi secara eksplisit.

setoran yang harus dikembalikan ke alamat hadiah setelah menghentikan kumpulan tidak ada secara eksplisit di DB

Apakah Anda memiliki contoh alamat mainnet untuk saya selidiki?

e11d227aefa4b773149170885aadba30aab3127cc611ddbc4999def61c / stake1uywjy7h05jmhx9y3wzy94td6xz4txynuccgam0zfn800v8qq33z29

Anda memiliki kesalahpahaman tentang pengembalian dana deposit. Pengembalian dana deposit tidak berakhir di tabel reward tetapi di tabel tx . Jadi mari kita temukan.

Untuk alamat yang kami minati:

cexplorer=# select id, view, registered_tx_id from stake_address
               where view = 'stake1uywjy7h05jmhx9y3wzy94td6xz4txynuccgam0zfn800v8qq33z29' ;
  id  |                            view                             | registered_tx_id 
------+-------------------------------------------------------------+------------------
 2820 | stake1uywjy7h05jmhx9y3wzy94td6xz4txynuccgam0zfn800v8qq33z29 |          2420601

bidang id mungkin berbeda di seluruh instance db-sync , tetapi id akan berguna untuk eksplorasi ini.

Agak rumit, tetapi pengembalian dana dapat dilihat menggunakan:

cexplorer=# select stake_deregistration.id, stake_deregistration.addr_id, stake_deregistration.tx_id,
               tx.deposit, block.epoch_no from stake_deregistration
               inner join tx on tx.id = stake_deregistration.tx_id
               inner join block on block.id = tx.block_id
               where stake_deregistration.addr_id = 2820 ; 
 id  | addr_id |  tx_id  | deposit  | epoch_no 
-----+---------+---------+----------+----------
 730 |    2820 | 2842157 | -2000000 |      223

Demikian pula, pendaftaran dapat terlihat menggunakan:

cexplorer=# select stake_registration.id, stake_registration.addr_id, stake_registration.tx_id, tx.deposit,
               block.epoch_no from stake_registration inner join tx on tx.id = stake_registration.tx_id
               inner join block on block.id = tx.block_id
               where stake_registration.addr_id = 2820 ; 
  id   | addr_id |  tx_id  | deposit | epoch_no 
-------+---------+---------+---------+----------
  1649 |    2820 | 2421547 | 2000000 |      208
 86926 |    2820 | 2842177 | 2000000 |      223
(2 rows)

Saya berasumsi alamat pasak ini adalah:

  • terdaftar di epoch 208
  • tidak terdaftar di Epoch 223
  • daftar ulang lagi di epoch 223.

Apakah itu semua masuk akal?

Masuk akal untuk pendaftaran pasak, tetapi saya berbicara tentang pensiun kumpulan. Dan 500 ADA yang harus dikembalikan ke alamat hadiah pemilik pool.

Saya masih tidak berpikir itu kembali ke alamat hadiah. Apakah Anda memiliki contoh kolam yang dipensiunkan?

Relasi atau fakta bahwa itu akan muncul di database di suatu tempat sebenarnya adalah permintaan saya untuk sebuah fitur, bukan bug di versi saat ini. Contoh kolam pensiunan: pool134dws3tyc7kphwl6gks26cm6l390554lns9lyatm3gkxs6dwj2z. Alamat yang saya kirim sebelumnya adalah pemiliknya

@erikd
Dari buku besar spesifikasi :

halaman 21

Ingatlah bahwa pengembalian dana pensiun kumpulan pasak dikeluarkan bukan saat sertifikat menjadwalkan
pensiun diproses, tetapi pada batas zaman yang pensiun dijadwalkan.

halaman 40

• Fungsi poolRefunds digunakan untuk menghitung total refund yang harus dibagikan
untuk kelompok pasak yang dijadwalkan untuk pensiun. Perhatikan bahwa perhitungan ini mengambil nomor slot yang sesuai dengan slot batas epoch saat perhitungan dilakukan. Yang kembali
peta peta kolam operator hashkey untuk pengembalian dana, yang pada akhirnya akan dikembalikan ke
akun hadiah terdaftar.

@xdzurman Maaf dalam hal ini:

Relasi atau fakta bahwa itu akan muncul di database di suatu tempat sebenarnya adalah permintaan saya untuk sebuah fitur,

Apa sebenarnya permintaan fitur itu?

@erikd Untuk menempatkan deposit pool (500 ADA) di suatu tempat di database, setelah pool dihentikan. Saat ini tidak dapat ditautkan secara eksplisit ke alamat hadiah yang dimilikinya.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat