monaparty / counterblock

Provides extended API services to Counterwallet, as well as Counterparty 3rd-party applications
http://counterparty.io
MIT License
3 stars 5 forks source link

Failed to get XMP balance. #29

Open cryptcoin-junkey opened 2 years ago

cryptcoin-junkey commented 2 years ago

https://twitter.com/jung2neko/status/1437410136000110596

■モナパレットでトークン発行を行ったら、いままで表示されていたXMPの残高が0になった。 トリガとなったトランザクション → mpchain.info/tx/229710

cryptcoin-junkey commented 2 years ago

https://twitter.com/jung2neko/status/1437410314895519749

■MpchainやMpurseではXMP残高があるように表示される。 mpchain.info/address/MN9V3VjdU6iM77DzoGcKXkpezgRDVqjung ■すなぎもさんに相談したところ、モナパレットではget_normalized_balancesを使用しており、アドレス内に保持しているトー> クンの種類が多くなりすぎると、 全件取得できなくなるとのこと。

image

cryptcoin-junkey commented 2 years ago

https://twitter.com/jung2neko/status/1437410474274951168

■トークンの種類を 896 → 471 まで減らしたが、XMPは0のまま。 ■Mpurseを使って、該当アドレスのXMPの出し入れをしたが、モナパレットの残高は0XMPのまま。

https://twitter.com/jung2neko/status/1437410621104947204

■オーナートークンが上限超過した可能性を考慮し、該当アドレスがオーナーとなっているトークンのオーナー権限を他アドレスに移譲するも、0XMPのまま。

anipopina commented 2 years ago

https://github.com/monaparty/counterblock/blob/0b94e65f1d311325ed5b757e7ffffd925447ef1d/counterblock/lib/modules/assets.py#L147-L149 get_normalized_balancesの処理において、ページング指定なしでget_balancesしています。

balancesテーブルにはquantityが0になったレコードも残り続けるため、ひとたび1ページ目からあふれてしまったレコードはその後アドレスの中身を整理しても1ページ目に戻ってきません。 利用頻度の多いアドレスにおいてXMPを含む一部アセットの情報がget_normalized_balancesで恒久的に取得できなくなったのは、これが理由と思われます。

cryptcoin-junkey commented 2 years ago

@anipopina ちょうどいま、その辺りを眺めていたところでした。 現象はご指摘の通りと思いますが、そもそも counterparty server に問い合わせているのが設計として不適切(高負荷の元)という感もあり、dispenser 周りも含め見直しが必要かと思っています。