Market Viewr Update: Tackling Super-Long Richlists & a Question for You!

avatar
(Edited)

Hey everyone,

It seems like the Market Viewr app has been getting a bit of attention this week, not because I'm trying to dwell on it, but because new challenges and improvements keep popping up! This latest update addresses an interesting issue I encountered with tokens that have very large numbers of holders.

The Problem: Hive-Engine's 10,000 Record Speedbump

I noticed that for tokens with extremely long richlists – think of popular ones like ARCHON or PIZZA, which can have well over 10,000 individual holders (PIZZA has around 18,948!) – Market Viewr was either failing to load the complete richlist or would sometimes just hang.

After digging into it, I learned something new (or perhaps, re-learned something I'd forgotten): the Hive-Engine API has a hard pagination limit. You can't retrieve more than 10,000 records for a single query, period. So, if a token has more holders than that, the standard way of paginating through the balances (offset by 1000, get next 1000, etc.) hits a wall.

The Workaround: Iterating by Prefix

To get around this and attempt to build a more complete richlist for these massive tokens, I've implemented a new approach in Market Viewr. Instead of just trying to paginate through the entire balance list in one go, the tool now iterates through all possible starting characters for account names (a-z, 0-9, and even '_').

For each prefix (like "a", "b", "c", etc.), it fetches all account balances starting with that letter, paginating in chunks of 1000 until all accounts for that prefix are retrieved. It then combines these, removes duplicates (using a seen_accounts set just in case), separates out the 'null' account balance for burned token calculation, and finally sorts the compiled list by balance.

You can see the gist of the change in the get_richlist function from the git diff I was working on:

# Simplified concept from the diff:
# ...
    prefixes = list(string.ascii_lowercase) + list(string.digits) + ["_"]
    seen_accounts = set()

    for prefix in prefixes:
        offset = 0
        while True:
            batch = he_api.find(
                # ... query with account starting with prefix ...
            )
            if not batch:
                break
            for holder in batch:
                # ... process holder, add to richlist if not 'null' and not seen ...
            # ...
            offset += page_size
# ...
    richlist.sort(key=get_balance, reverse=True)
# ...

The Trade-off and a Question for You

This new method does allow Market Viewr to build a much more complete richlist for tokens that exceed the 10k holder limit. However, as you can imagine, making dozens of separate queries to the Hive-Engine API (one set for 'a' accounts, one for 'b' accounts, etc.) can take a significantly longer time to load for these very large tokens.

So, this brings me to a question for you all, the users:

For tokens with extremely long richlists (10,000+ holders):

Majority of the tokens are usually near the top anyway??

  1. Do you prefer the application to attempt to load the entire richlist, even if it means a noticeably longer loading time for those specific tokens?
  2. Or, would you prefer it if Market Viewr capped the richlist display at a certain number (say, the top 5,000 or 10,000 holders) to ensure faster load times, even if it means not seeing every single tiny holder for the biggest tokens?

I'm trying to balance completeness with performance and usability. Your thoughts on this would be really helpful as I continue to refine the tool! Let me know in the comments what your preference would be.

As always,
Michael Garcia a.k.a. TheCrazyGM



0
0
0.000
11 comments
avatar

Wow, love this post It’s been handpicked and curated by the awesome Bilpcoin team—we’re so happy to support amazing content like this! If you’d like to join us in spreading the positivity, feel free to delegate some Hive Power to this account. Every bit helps us curate and uplift even more creators in the community By adding #bilpcoin or #bpc to original posts, you can earn BPC tokens
https://hive.blog/hive-167922/@bpcvoter2/calling-all-music-artists-on-hive-elevate-your-sound-with-ai-infused-beats

By adding #bilpcoin or #bpc to original posts, you can earn BPC tokens

https://peakd.com/hive-140084/@bpcvoter1/my-way-keni-bpc-ai-music

https://peakd.com/hive-126152/@bpcvoter2/dear-themarkymark-buildawhale-gogreenbuddy-usainvote-ipromote-and-whoever-else-is-involved-in-this-scheme-you-call-us-nutty-as

https://peakd.com/hive-167922/@bilpcoinbpc/exploring-the-possibilities-of-ai-art-with-bilpcoin-nfts-episode-102-buildawhale-scam-farm-on-hive-and-dear-steevc

https://peakd.com/hive-133987/@bilpcoinbpc/comprehensive-analysis-of-punkteam-s-wallet-transactions

https://hive.blog/hive-163521/@bpcvoter1/deep-dive-into-meritocracy-s-activity-history-and-blockchain-audit

https://www.publish0x.com/the-dark-side-of-hive/to-downvoters-scammers-and-farmers-on-hive-the-time-to-chang-xmjzrmp

https://peakd.com/hive-163521/@bpcvoter3/themarkymark-we-ve-exposed-your-actions-repeatedly-how-you-and-your-army-of-bots-manipulate-rewards-to-benefit-yourselves-it-s

https://peakd.com/hive-168088/@bpcvoter3/the-shadow-matrix-a-tale-of-deceit-and-reckoning

Our move?
🔹 Unite voices: Use #bilpcoin or #bpc to highlight censorship & demand accountability.
🔹 Document abuse: Share evidence of unfair downvotes, self-voting scams, and double standards.
🔹 Push for reform: Advocate for transparent governance, vote caps, and community-driven rules.

Decentralization isn’t just a feature—it’s a fight. Let’s model fairness, rally allies, and pressure Hive to live up to its ideals.
https://peakd.com/hive-167922/@bpcvoter3/5m1kft-themarkymark-you-can-keep-pretending-to-be-oblivious-but-the-truth-is-out-you-ve-been-exposed-it-s-time-to-own-up-to-your

#StandForDecentralization #HiveTransparency

0
0
0.000
avatar

I would say, cap it, with search functionality. Is anyone really going to browse through a list of 18k names?

!HOPE
!PIZZA
!INDEED
!ALIVE
!BBH
!STRIDE

0
0
0.000
avatar

That's kind of where I was leaning, since a majority of the actual "rich list" is usually the top 100 maybe? A search function for that part is a smart add, I'll try to get that added soon(ish).

I was leary about cutting the list off as it's supposed to be a viewer of the whole e.g. how it shows who made the orders where other's stopped doing that.

Mainly asking if it's needed for completion sake?

0
0
0.000
avatar

I would lean towards not needed. if there is a need for it, you could go for a two-way implementation, go for top100 in standard mode, and full list for super mode…

0
0
0.000
avatar

that's actually a clever and simple fix, thank you, so a reasonable default and a "are you sure you want the whole thing" which is understandable when it's all done ( i intend to add an export to csv for example)

0
0
0.000
avatar

Indeed, it will also allow for much more scaleability and possibilities if needed/wanted. You could ask for a small contribution for instance for the advanced features (if you need to pay BEED for it in the future, covering your cost ;-) )

0
0
0.000
avatar
(Edited)

My vote is to be faster and show less, assuming we are showing the most important stuff - thos with the most significant balances

0
0
0.000
avatar

Personally I'd prefer richlists with caps, since beyond a certain number, the term 'richlist' begins to lose its meaning. Faster page loading is also a good reason for a cap I'd say. I keep trying to use it in the Hive Keychain app, and it sometimes, rather often actually, just hangs. Also when I touch certain area of the page, it crashes with an error, which I've screenshot and included below. 😁 🙏 💚 ✨ 🤙

0
0
0.000
avatar

Actually I appreciate the error report, that's actually unrelated to the app specifically, as it has to do with the webserver directly. Should be fixed now, if it does it again, please reach out to me.

0
0
0.000
avatar

I'm glad to hear that, and excellent. I'll give it another go shortly, and I'll let you know if anything goes awry. 😁 🙏 💚 ✨ 🤙

0
0
0.000
avatar

Lazy loading, thank me later :)

0
0
0.000