メインネット、db-sync 6.0.1、ステークアドレス
登録履歴
SELECT stake_registration.addr_id, block.epoch_no, block.time
FROM stake_address
LEFT JOIN stake_registration ON stake_registration.addr_id = stake_address.id
LEFT JOIN tx ON tx.id = stake_registration.tx_id
LEFT JOIN block ON block.id = tx.block_id
WHERE stake_address.view = 'stake1u838ke609j09ezrgj5nwnplvc7g3cq62pa2n9z0x6w3clhsagtp86';
addr_id | epoch_no | time
---------+----------+---------------------
38278 | 208 | 2020-08-01 07:45:51
38278 | 233 | 2020-12-01 22:31:13
(2 rows)
登録解除履歴
SELECT stake_deregistration.addr_id, block.epoch_no, block.time
FROM stake_address
LEFT JOIN stake_deregistration ON stake_deregistration.addr_id = stake_address.id
LEFT JOIN tx ON tx.id = stake_deregistration.tx_id
LEFT JOIN block ON block.id = tx.block_id
WHERE stake_address.view = 'stake1u838ke609j09ezrgj5nwnplvc7g3cq62pa2n9z0x6w3clhsagtp86';
addr_id | epoch_no | time
---------+----------+---------------------
38278 | 232 | 2020-12-01 18:25:59
(1 row)
ご覧のとおり、アドレスは 232 エポックの終わりに登録されておらず、エポック 231 の報酬はこのアドレスに配布されるべきではありませんが、
SELECT reward.*, block.epoch_no AS block_epoch_no, block.time
FROM reward
LEFT JOIN block ON block.id = reward.block_id
WHERE reward.addr_id = 38278 AND reward.epoch_no = 231;
id | addr_id | amount | epoch_no | pool_id | block_id | block_epoch_no | time
---------+---------+-----------+----------+---------+----------+----------------+---------------------
1041508 | 38278 | 192969560 | 231 | 144 | 5023676 | 233 | 2020-12-01 21:44:51
(1 row)
:フェイスパーム:
しばらくこれを見て、突然、最初のクエリが@dmitrystasが示していると考えているものを示していないことにtx.id = stake_registration.tx_id
参加し、トランザクションからblock.epoch_no
を取得することにより、ステークの登録/登録解除が発生するエポックを取得しますが、実際にアクティブな場合は発生しません。
ステーキングに関連するほとんどの操作では、エポックN
で発生するアクション (登録、賭け金の増加など) がエポックN + 2
アクティブになります。
つまり、最初のクエリは実際には次のようになります。
cexplorer=# SELECT stake_registration.addr_id, block.epoch_no + 2 as epoch_no, block.time FROM stake_address
INNER JOIN stake_registration ON stake_registration.addr_id = stake_address.id
INNER JOIN tx ON tx.id = stake_registration.tx_id INNER JOIN block ON block.id = tx.block_id
WHERE stake_address.view = 'stake1u838ke609j09ezrgj5nwnplvc7g3cq62pa2n9z0x6w3clhsagtp86';
addr_id | epoch_no | time
---------+----------+---------------------
38266 | 210 | 2020-08-01 07:45:51
38266 | 235 | 2020-12-01 22:31:13
そして2番目:
cexplorer=# SELECT stake_deregistration.addr_id, block.epoch_no + 2 as epoch_no, block.time FROM stake_address
INNER JOIN stake_deregistration ON stake_deregistration.addr_id = stake_address.id
INNER JOIN tx ON tx.id = stake_deregistration.tx_id INNER JOIN block ON block.id = tx.block_id
WHERE stake_address.view = 'stake1u838ke609j09ezrgj5nwnplvc7g3cq62pa2n9z0x6w3clhsagtp86';
addr_id | epoch_no | time
---------+----------+---------------------
38266 | 234 | 2020-12-01 18:25:59
@dmitrystasそれはすべてactive_epoch_no
の列stake_registration
とstake_deregistration
私が持っているように、テーブルをdelegation
テーブル?
@erikdこんばんは。 それは元の問題https://github.com/Emurgo/yoroi-frontend/issues/1832#issue -754776885
役に立つかもしれない
Yoroi と Adalite は間違った 192 FAKE ADA 報酬を表示しますが、実際には 0 です。最後の 2 報酬は adawallet.io から引き出されます (db-sync は使用しません)
ステップでの問題の簡単な説明:
1)紀元 232 年。 報酬の引き出しとステーキングキーの登録解除を同時に行います。 報酬は 0 です。料金には十分な ADA があります
2)エポック 233 。 キーが登録されていても登録されていない場合、最初に残った報酬を受け取るべきですが、ヨロイは 192ADA を受け取ったと表示しています。 退出しようとすると、ヨロイがエラーを出します。 db-sync show Reward 0ADA を使用しない他のウォレット
3)エポック 233 。 再び同じプールに委任します。 キーが登録されました。 真の報酬は0。ヨロイは192の報酬。
4)エポック 234 。 残り 2 番目の報酬 135ADA を受け取ります。 真の報酬残高は 135ADA です。
ヨロイは 327ADA (192+135) を示しています。 ヨロイを通じて報酬を引き出せない トランザクションの送信中にサーバーからエラーが発生しました。
5)エポック 235 。 私は最後の3番目の報酬145ADAを受け取ります。 真の報酬残高は 280ADA (135+145) です。
Yoroi は 472ADA (192+135+145) を示しています Yoroi を介して報酬を引き出すことができません トランザクションの送信中にサーバーからエラーを受け取りました。
6)エポック 235 。 db-synsを使用せず、280ADAの報酬残高を正しく表示するadawallet.ioを通じて280ADAをスムーズに引き出します
7) 280ADA の真の報酬が引き出された後 (0ADA のまま)、ヨロイはまだ 192ADA の報酬残高を示しています。
Yoroi はまだ報酬残高 192ADA を示しています。
少なくとも 2 つの可能性があります。
db-sync
バグがありますdb-sync
しか扱い
stake1u838ke609j09ezrgj5nwnplvc7g3cq62pa2n9z0x6w3clhsagtp86
はここで関心のあるステークキーですか?
@erikdはい、ステークキーはtake1u838ke609j09ezrgj5nwnplvc7g3cq62pa2n9z0x6w3clhsagtp86です
Yoroi だけでなく、Adalite.io と adastat.net にもバグがあることに注意してください。
彼らはそのバグを持っていません: cardanoscan.io と adawallet.io
一部のオンライン ウォレットにこのバグがあり、他のウォレットにはない場合、そしてこれらすべてがdb-sync
依存している場合、問題がdb-sync
あることは非常にまれです。
@erikdしかし、adawallet.ioはdb-syncを使用せず、正しい報酬バランス(0ADA)を表示し、最後の報酬を撤回させます
これもまた、これがdb-sync
バグではなく、ヨロイのバグであることを示唆しています。
Exodus もこのバグに遭遇しました。
これは間違いなく cardano-db-sync のバグであり、Yoroi だけでなく cardano-db-sync の他の複数のユーザーにも影響を与えることを考えると、Yoroi のバグではありません。 cardanoscan と adawallet はどちらも cardano-db-sync を使用しないため、影響を受けません。
@IlyaSofronovによって提供されたアドレスの報酬履歴を与える SQL クエリは次の
select stake_address.hash_raw as "stakeAddress"
, "totalReward".*
from stake_address
left outer join (
SELECT addr_id, amount, epoch_no
FROM reward
) as "totalReward" on stake_address.id = "totalReward".addr_id
where encode(stake_address.hash_raw, 'hex') = 'e1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde'
次の結果が得られます
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 162720747 | 211
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 162485461 | 212
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 167344099 | 213
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 167043060 | 214
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 200722225 | 215
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 191413549 | 216
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 143111843 | 217
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 147836812 | 218
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 154740829 | 219
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 145433327 | 220
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 165631299 | 221
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 151825651 | 222
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 169141624 | 223
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 165184716 | 224
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 148899668 | 225
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 157838234 | 226
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 223252352 | 227
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 147889017 | 228
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 151858721 | 229
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 165782849 | 230
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 192969560 | 231
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 135711434 | 232
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 145964545 | 233
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 100702 | 235
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 102078 | 236
注: これらの行の合計は 3,765,004,402 です。
{
"remainingAmount": "193172340",
"rewards": "3765004402",
"withdrawals": "3571832062",
}
バックエンドがrewards
値の db-sync 行の合計を返すことがわかります (これが問題になる理由は後で説明します)
このバグの影響を受けないことがわかっている cardanoscan の値を合計することで、 withdrawals
金額が正しいことを確認することもできます。
remainingAmount
はちょうどrewards - withdrawals
このステーキング キーの履歴を見ると、次のことがわかります。
私のcardano-nodeインスタンスによると、これはステーキングアドレス内の現在の値です
[
{
"address": "stake1u838ke609j09ezrgj5nwnplvc7g3cq62pa2n9z0x6w3clhsagtp86",
"delegation": "pool1kkfkdces5mdcyc9dn2hgg3463jggjvw3h89nejjarkz25uavaqu",
"rewardAccountBalance": 202780
}
]
したがって、ノードによると、ウォレットの残高はエポック 235 + エポック 236 (100702 + 102078 = 202780) であることがわかります。
cardanoscanを見ると、ウォレットの完全な引き出し履歴を確認できます。 各引き出しに対応するものを見てみましょう。
| エポック撤退 | 出金額 | db-sync エポック行が含まれています |
|-----------------|------------------|------------ -----------------|
| 228 | 2601.373144 | 211、212、...、225、226 |
| 230 | 371.141369 | 227、228 |
| 232 | 317.641570 | 229、230 |
| 234 | 135.711434 | 232 |
| 235 | 145.964545 | 233 |
しかし、あなたはこれらのいずれにも含まれていません(192969560)カルダーノ-DB-同期エポック231を見ることができます!
案の定、私たちのバックエンド応答"remainingAmount": "193172340",
を見て、誤って含まれていたエポック 231 を削除すると、フルノードから期待される結果である193172340 - 192969560 = 202780
が得られます!
私の調査によると、cardano-db-syncには、すべきではないにもかかわらず、報酬履歴の結果に行231が含まれているようです。
最初のクエリを簡素化し、同じ結果が得られることを確認しました (実際に実行しました)。
バックエンドからの現在の (間違った) 状態
単一のソースからすべての情報を取得したいので、次のようにします。
cexplorer=# select sum (amount) from stake_address
left outer join (SELECT addr_id, amount, epoch_no
FROM reward) as "totalReward" on stake_address.id = "totalReward".addr_id
where stake_address.hash_raw = '\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde' ;
sum
------------
3765004402
そして:
cexplorer=# select sum (amount) from withdrawal where addr_id = 38266;
sum
------------
3571832062
どちらもあなたの数字と一致しています。
興味深いことに、 3571832062 + 192969560 + 202780 - 3765004402
で、 3571832062
は引き出しの合計、 3765004402
は報酬の合計です。 他の値は次のとおりです。 202780
は引き出し後の報酬残高のあなたの数字であり、 192969560
はエポック231
の報酬です。
cexplorer=# select stake_address.view as "stakeAddress", "totalReward".* from stake_address
left outer join (SELECT addr_id, amount, epoch_no FROM reward) as "totalReward"
on stake_address.id = "totalReward".addr_id
where stake_address.hash_raw = '\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde'
and epoch_no = 231 ;
stakeAddress | addr_id | amount | epoch_no
-------------------------------------------------------------+---------+-----------+----------
stake1u838ke609j09ezrgj5nwnplvc7g3cq62pa2n9z0x6w3clhsagtp86 | 38266 | 192969560 | 231
では、エポック231
( db-sync
単に元帳の状態から引き出され、余分な処理なしでデータベースに挿入される) に対する報酬は正しいですか? そのステークアドレスのステーク登録履歴を見てみましょう:
cexplorer=# select stake_address.hash_raw, stake_registration.tx_id, block.epoch_no
as tx_epoch_no, (block.epoch_no + 2) as active_epoch_no
from stake_registration inner join stake_address on stake_registration.addr_id = stake_address.id
inner join tx on tx.id = stake_registration.tx_id inner join block on tx.block_id = block.id
where stake_address.hash_raw = '\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde' ;
hash_raw | tx_id | tx_epoch_no | active_epoch_no
--------------------------------------------------------------+---------+-------------+-----------------
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 2449294 | 208 | 210
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 3103705 | 233 | 235
(2 rows)
cexplorer=# select stake_address.hash_raw, stake_deregistration.tx_id, block.epoch_no
as tx_epoch_no, (block.epoch_no + 2) as active_epoch_no from stake_deregistration
inner join stake_address on stake_deregistration.addr_id = stake_address.id
inner join tx on tx.id = stake_deregistration.tx_id inner join block
on tx.block_id = block.id
where stake_address.hash_raw = '\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde' ;
hash_raw | tx_id | tx_epoch_no | active_epoch_no
--------------------------------------------------------------+---------+-------------+-----------------
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 3101670 | 232 | 234
登録と登録解除の両方について、 tx_id
(登録/登録解除を含む tx の ID)、 tx_epoch_no
(tx が含まれたエポック)、およびactive_epoch_no
(登録/登録解除がアクティブになるエポック)。
アクティブなエポック番号を見ると、ステーク登録はエポック[210 .. 233]
と[235 ..]
アクティブになっているはずです。 これは、このアドレスの実際の報酬と一致します。
cexplorer=# select stake_address.hash_raw as "stakeAddress", "totalReward".* from stake_address
left outer join (SELECT addr_id, amount, epoch_no FROM reward) as "totalReward"
on stake_address.id = "totalReward".addr_id
where stake_address.hash_raw = '\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde' ;
stakeAddress | addr_id | amount | epoch_no
--------------------------------------------------------------+---------+-----------+----------
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 162720747 | 211
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 162485461 | 212
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 167344099 | 213
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 167043060 | 214
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 200722225 | 215
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 191413549 | 216
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 143111843 | 217
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 147836812 | 218
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 154740829 | 219
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 145433327 | 220
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 165631299 | 221
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 151825651 | 222
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 169141624 | 223
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 165184716 | 224
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 148899668 | 225
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 157838234 | 226
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 223252352 | 227
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 147889017 | 228
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 151858721 | 229
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 165782849 | 230
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 192969560 | 231
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 135711434 | 232
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 145964545 | 233
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 100702 | 235
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 102078 | 236
(25 rows)
つまり、 234
を除くすべてのエポックに報酬があります。
したがって、あなたの結論は次のように思います。
私の調査によると、cardano-db-syncには、すべきではないにもかかわらず、報酬履歴の結果に行231が含まれているようです。
が正しくない場合、そのステークアドレスにはエポック231
報酬が必要です。
さらに、あなたのコメントは次のように信じています。
バックエンドからの現在の (間違った) 状態
{
"remainingAmount": "193172340",
「報酬」:「3765004402」、
「引き出し」:「3571832062」、
}
実際には正しいです。 報酬の価値と引き出しの価値の差が、現在の引き出しされていない報酬の残高です。
実際には正しいです。 報酬の価値と引き出しの価値の差が、現在の引き出しされていない報酬の残高です。
ノードがアカウントの報酬残高として193172340
ではなく202780
を返すことがわかっているため、これは当てはまりません。
つまり、234 を除くすべてのエポックに報酬があります。
2 つのエポックが欠落していることを期待する必要があります。
欠落している234
エポックは (2) に対応しており、231 はエポック 233 でユーザーのウォレットに表示される必要があるため、231 は (1) に対応すると思います。 (1)
2 つのエポックが欠落していることを期待する必要があります。
どうして? このステークアドレスの操作によると:
| 操作 | tx_epoch_no | active_epoch_no |
|-------------------|---------------------|------- ---------|
| 登録 | 208 | 210 |
| 登録解除 | 232 | 234 |
| 登録 | 233 | 235 |
単一のエポック ( 234
) でのみ登録解除され、そのエポックでは報酬を受け取りませんでした。
報酬のない時代が 2 つあるのはなぜですか? あなたが言及している 2 つのケースは実際には同じものであり、1 つのエポックだけが報酬なしに進むと確信しています。
Slack の@SebastienGllmtは
登録解除は、2 エポックではなく、すぐに行われるという点で特別です。
登録解除がすぐに進んだ場合、これはtx_epoch_no == 232
ため、231 の報酬だけでなく、エポック[231..234]
すべての報酬が失われます。
これには@JaredCorduanが必要だと思います。
@SebastienGllmtの説明は、元帳のルールと一致しています。
ステーク資格証明が登録解除されるのは少し哲学的ですが、私は次のように表現します。登録解除はすぐに行われますが、報酬は遅れます。 クレデンシャルがエポックe
で登録解除された場合、 e / e+1
境界 ( e-2 / e -1
境界で取得されたスナップショットから取得) で報酬を受け取ります。 e+1 / e+2
境界で報酬を受け取ります ( e-1 / e
境界で撮影されたスナップショットから)
これは、命名法に混乱があるようです。
dbs-ync
の POV から: :
tx_epoch_no
: 登録/登録抹消証明書のトランザクションを含むエポック。active_epoch_no
: 基本的にtx_epoch_no + 2
、ステークアドレスへの変更がアクティブになるエポック。epoch_no
reward
テーブルのepoch_no
: 報酬が獲得された実際のエポック。ステーク資格情報がエポック 232 のトランザクションからの登録解除証明書に含まれていた場合、232/233 境界で取得されたスナップショットには含まれません。 これは、235/236 境界で配布される報酬の更新には含まれないことを意味します。 @erikdの言葉では、これは 234 の報酬です。 さらに、(再) 登録証明書がエポック 233 のトランザクションに上陸した場合、これは _唯一の_ 報酬更新であり、見逃すことになります。
「いつ登録が解除されたか」、「報酬が」、「いつアクティブになったか」などは、はっきりしないと混乱する可能性があることに注意してください。 だから、私が誰に同意しているかは明確ではありません:)
混乱しているように見えるので、2 つの予想される欠落エポック (db-sync 231 と db-sync 234) を示す写真を作成しました。
私は、231 が厳密には欠落していない可能性があるという事実から混乱が生じていると思います。これは、元帳の状態が、ユーザーではなく準備金に配布されたと考えているだけの可能性があります。 元帳の状態から見れば報酬は存在する(準備金に分配される)が、ユーザーの観点からは231は含まれるべきではない
不足している 2 つのエポック (db-sync 231 および db-sync 234) を示す画像を作成しました。
しかし、 db-sync
が報告する実際の報酬は次のとおりです。
cexplorer=# select stake_address.hash_raw as "stakeAddress", "totalReward".* from stake_address
left outer join (SELECT addr_id, amount, epoch_no FROM reward) as "totalReward"
on stake_address.id = "totalReward".addr_id
where stake_address.hash_raw = '\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde' ;
stakeAddress | addr_id | amount | epoch_no
--------------------------------------------------------------+---------+-----------+----------
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 162720747 | 211
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 162485461 | 212
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 167344099 | 213
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 167043060 | 214
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 200722225 | 215
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 191413549 | 216
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 143111843 | 217
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 147836812 | 218
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 154740829 | 219
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 145433327 | 220
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 165631299 | 221
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 151825651 | 222
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 169141624 | 223
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 165184716 | 224
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 148899668 | 225
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 157838234 | 226
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 223252352 | 227
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 147889017 | 228
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 151858721 | 229
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 165782849 | 230
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 192969560 | 231
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 135711434 | 232
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 145964545 | 233
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 100702 | 235
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 102078 | 236
(25 rows)
そして、エポック234
は報酬がありません。 db-sync
は ledger-state からこのテーブルの内容を取得し、 db-sync
追加するのはepoch_no
列だけです。
あなたの図はこの表と一致しないため、図が正しくない可能性があります。 node
(具体的にはアドレス報酬残高の計算) にもバグがある可能性がありますが、現時点では単一の変数 ( db-sync
) のみを処理したいと思います。
あなたの図では、エポック 233 の「配信された報酬」に取り消し線が引かれていますが、Jared と私はどちらもそれは正しくないと思います。チェーン)。
@SebastienGllmtは次の
私は、231 が厳密には欠落していない可能性があるという事実から混乱が生じていると思います。これは、元帳の状態が、ユーザーではなく準備金に配布されたと考えているだけの可能性があります。
しかし、 rewards
テーブルは、ステーク アドレスに分配される報酬を示しています。 準備金に分配された場合、この表には含まれません。 db-sync
は、この報奨情報をステークアドレスから報奨金額までのマップとして受け取ります。 現在、元帳の状態自体が間違っている可能性がありますが、元帳の状態からマップを取得した後、エラーが忍び込む余地はほとんどありません。
私が言ったとき、私は間違っていました:
さらに、(再) 登録証明書がエポック 233 のトランザクションに到着した場合、これが見逃される唯一の報酬更新になります。
実際、 @SebastienGllmtが次のように言ったときはまさに正しかった。
2 つのエポックが欠落していることを期待する必要があります。
- ステークキーが登録されていなかったため、リザーブがリザーブに返送されたエポック
- キーの登録を解除してから再登録するまでの 1 エポックのギャップを表すエポック
232/233 エポック境界に登録されていないことにより、ステーク資格証明は次の両方を行います。
db-sync が 232/233 境界で配布された報酬をどのように報告しているのか推測できます (これは実際には@SebastienGllmtの推測です :))。 元帳の状態は、エポック境界の直前まで、どの資格情報がまだ登録されているかを知ることができません。 未登録のクレデンシャルに対する報酬は、リザーブに返却されます。 (正式な仕様のFigure 51: Reward Update Application
を
@SebastienGllmtの上の写真は見栄えがしますが、実際には、矢印はブロック生成フェーズを説明するために別のエポックにまたがる必要があることに注意してください。 たとえば、230/231 境界で撮影されたスナップショットからの報酬は、実際には 233/234 境界まで配布されません。
さて、これについての説明があります。 db-sync
はレグステートを維持し、エポック報酬をMap StakeAddress Coin
として引き出し、それをデータベースに挿入します。 ただし、そのマップには無効なStakeAddress
エントリが含まれており、レダーステートはこれらのエントリを削除し、獲得した報酬をリザーブに効果的に還元します。
解決策は、元帳の状態から有効なStakeAddress
のセットをプルし、有効なStakeAddress
のセットで発生しないすべてのエントリを削除してMap
をフィルタリングすることです。
この「ファントム」報酬が「nondistributed_rewards」などの新しいテーブルに配置されると素晴らしいでしょう。 これにより、プールの収益性を正しく計算できます。
@dmitrystas :
この「ファントム」報酬が「nondistributed_rewards」などの新しいテーブルに配置されると素晴らしいでしょう。 これにより、プールの収益性を正しく計算できます。
これらの分配されない報酬 (準備金に戻される)は、投票の収益性を計算するために使用最良の方法や最も簡単な方法ではないと確信しています。
この問題のために特別にチケットを作成しまし
OK、挿入される前に報酬リストから無効な報酬を除外するソリューションがあり、実際にエポック231
そのアドレスには報酬があります。
これらの「無効」な報酬を別のテーブルに追加できるように、これを変更する必要があります。
PR #469 のdb-sync
のバージョンを使用します。 ステークアドレス\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde
の報酬はorphaned_rewards
テーブルに正しく挿入されます。
cexplorer=# select stake_address.hash_raw, orphaned_reward.epoch_no, orphaned_reward.amount
from orphaned_reward inner join stake_address on stake_address.id = orphaned_reward.addr_id
where stake_address.hash_raw = '\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde';
hash_raw | epoch_no | amount
--------------------------------------------------------------+----------+-----------
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 231 | 192969560
また、報酬表にも存在しません。
cexplorer=# select stake_address.hash_raw as "stakeAddress", "totalReward".* from stake_address
left outer join (SELECT addr_id, amount, epoch_no FROM reward) as "totalReward"
on stake_address.id = "totalReward".addr_id
where stake_address.hash_raw = '\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde' ;
stakeAddress | addr_id | amount | epoch_no
--------------------------------------------------------------+---------+-----------+----------
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 162720747 | 211
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 162485461 | 212
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 167344099 | 213
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 167043060 | 214
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 200722225 | 215
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 191413549 | 216
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 143111843 | 217
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 147836812 | 218
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 154740829 | 219
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 145433327 | 220
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 165631299 | 221
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 151825651 | 222
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 169141624 | 223
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 165184716 | 224
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 148899668 | 225
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 157838234 | 226
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 223252352 | 227
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 147889017 | 228
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 151858721 | 229
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 165782849 | 230
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 135711434 | 232
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 145964545 | 233
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 100702 | 235
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 102078 | 236
\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde | 38266 | 65 | 238
(25 rows)
最も参考になるコメント
PR #469 の
db-sync
のバージョンを使用します。 ステークアドレス\xe1e27b674f2c9e5c88689526e987ecc7911c034a0f553289e6d3a38fde
の報酬はorphaned_rewards
テーブルに正しく挿入されます。また、報酬表にも存在しません。