プールを廃止した後、デポジットはリワードアカウントに到着するはずです。 cardano-cliには表示されますが、データベースには見つかりません。
cardano-cli shelley query stake-address-info \
> --mainnet \
> --address stake1uywjy7h05jmhx9y3wzy94td6xz4txynuccgam0zfn800v8qq33z29
[
{
"address": "stake1uywjy7h05jmhx9y3wzy94td6xz4txynuccgam0zfn800v8qq33z29",
"delegation": "pool1qnrqc7zpwye2r9wtkayh2dryvfqs7unp99f2039duljrsaffq5c",
"rewardAccountBalance": 500009820
}
]
ただし、「rewards」テーブルはstake_addressの変更と同じではありません...これを行う場合は、たとえばITN報酬(現時点ではテーブル「reserve」)など、別のものもこのテーブルに保存する必要があります。
報酬と一緒にこれらの預金を取得する他の唯一の方法は、このステークアドレスに接続されたプールが特定のエポックで期限切れかどうかをプールリタイアメントテーブルに照会し、その値がまだ有効になっていない場合は、ハードコードされた500000000値を報酬に追加することです。引き出し。これも、その時点まで引き出しが報酬より高くない場合などに計算が必要です。これは非常に不格好なようです。
ただし、これらのハードコードされた値などを使用せずに、データベースに明示的に記載する必要があると思います。 おそらく別のテーブル? またはより単純な関係?
これらの500ADAをpool_retirementテーブルから取得することを選択した場合、プールに複数の所有者がいる場合、これらの500ADAがどのステークアドレスに報酬を与えられたかをどのように確認できますか?
プールに複数の所有者がいる場合、これらの500ADAがどのステークアドレスに報酬を与えられたかをどのように確認できますか?
デポジットは、所有者の住所ではなく、報酬の住所(常にプール用の住所)に返還されます
デポジットは、所有者の住所ではなく、報酬の住所(常にプール用の住所)に返還されます
それは理にかなっていますありがとう!
それで、引退したプールのデポジットは、pool_updateテーブルで宣言されているプールの報酬アドレスに返されますよね?
私を混乱させる現在の例があるので、私は尋ねています:
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';
このクエリは、例のステークアドレスの合計報酬と合計引き出しを示します。 それらの違いは正確に500000000ラブレースです。 確かに偶然かもしれませんが、そのような例が他にもあるので、それを想像するのはかなり難しいです。 それで、これが返されたプールデポジットであると仮定しましょう。そうすれば、このステークアドレスはpool_updateテーブルの報酬アドレスとして発生するはずですよね?
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'
しかし、このクエリでは結果が得られません。 私が見つけたのは、ステークの住所が引退したプール(pool_hash_id = 8)の共同所有者であり、それが私の最初の質問につながったということです。
これらの500ADAがどこから来ているのかをどうやって判断できるのか疑問に思っています。 この預金はITNに関連している可能性がありますか?
それで、引退したプールのデポジットは、pool_updateテーブルで宣言されているプールの報酬アドレスに返されますよね?
右
しかし、このクエリは結果につながりません
sa.id!= pu.hash_id-> sa.id = pu.reward_addr_id
これらの500ADAがどこから来ているのかをどうやって判断できるのか疑問に思っています。 この預金はITNに関連している可能性がありますか?
ほぼ間違いなくそうではありません。
この問題はどこにあるのでしょうか。 少し前後していたようです。 これに関する現在の状況について私を更新してくれませんか?
確かに、問題はかなりハイジャックされました。したがって、質問については何も変わりませんでした。プールを廃止した後に報酬アドレスに戻る必要のあるデポジットは、DBのどこにも明示的にありません(たとえば、500 ADAがエポック245に到着しました)。 ただし、プールのリタイアメントテーブルを確認し、所有者アドレスが探しているリワードアドレスであるかどうかを確認してから、この正確なリタイアメントからこの金額が引き出されていない場合は、ハードコードされた値「500」をユーザーのリワードに手動で追加する必要があります。まだ。 それは私には本当に面倒に思えます、そして私はそれが報酬テーブルに入ることができるか、それともどこか他の場所に入ることができるかどうかを提案しましたが、明示的に。
プールを廃止した後に報酬アドレスに戻る必要があるデポジットは、DBのどこにも明示的にありません
調査するメインネットアドレスの例はありますか?
e11d227aefa4b773149170885aadba30aab3127cc611ddbc4999def61c / stake1uywjy7h05jmhx9y3wzy94td6xz4txynuccgam0zfn800v8qq33z29
デポジットの返金について誤解があります。 デポジットの払い戻しは、 reward
テーブルではなく、 tx
テーブルになります。 だからそれを見つけましょう。
私たちが興味を持っているアドレスについて:
cexplorer=# select id, view, registered_tx_id from stake_address
where view = 'stake1uywjy7h05jmhx9y3wzy94td6xz4txynuccgam0zfn800v8qq33z29' ;
id | view | registered_tx_id
------+-------------------------------------------------------------+------------------
2820 | stake1uywjy7h05jmhx9y3wzy94td6xz4txynuccgam0zfn800v8qq33z29 | 2420601
id
フィールドはdb-sync
インスタンス間で異なる場合がありますが、 id
はこの調査に役立ちます。
少し複雑ですが、払い戻しは次を使用して確認できます。
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
同様に、登録は次を使用しているように見えます。
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)
このステークアドレスは次のとおりだと思います。
それはすべて意味がありますか?
ステーク登録には意味がありますが、私はプールの廃止について話していました。 そして、プール所有者の報酬アドレスに返される必要がある500ADA。
私はまだそれが報酬アドレスに戻るとは思わない。 プールが廃止された例はありますか?
関係またはそれがデータベースのどこかに表示されるという事実は、実際には機能に対する私の要求であり、現在のバージョンのバグではありません。 廃止されたプールの例:pool134dws3tyc7kphwl6gks26cm6l390554lns9lyatm3gkxs6dwj2z。 以前に送信したアドレスはその所有者です
@erikd
元帳仕様から:
21ページ
ステークプールの除却の払い戻しは、証明書がスケジュールされているときではなく発行されることを思い出してください。
リタイアメントは処理されますが、リタイアメントがスケジュールされているエポック境界で行われます。
ページ40
•関数poolRefundsは、分配する必要のある合計払い戻し額を計算するために使用されます
廃止が予定されているステークプールの場合。 この計算は、計算が実行されるときにエポック境界スロットに対応するスロット番号を使用することに注意してください。 返された
mapは、プールオペレーターのハッシュキーを払い戻しにマップします。払い戻しは、最終的には
登録された報酬アカウント。
@xdzurmanこれで申し訳ありません:
それがデータベースのどこかに表示されるという関係または事実は、実際には機能に対する私の要求です。
機能リクエストとは正確には何ですか?
@erikdプールが廃止された後、データベースのどこかにプールデポジット(500 ADA)を配置します。 現在、それが属する報酬アドレスに明示的にリンクすることはできません。
最も参考になるコメント
@erikd
元帳仕様から:
21ページ
ページ40