Witness of the people, by the people, for the peoplesteemCreated with Sketch.

in utopian-io •  4 months ago  (edited)




Steem is a blockchain with DPoS (Delegated Proof-of-Stake) consensus mechanism. The importance of the witnesses and witness voting cannot be overemphasized.

Those who are deeply interested in the witness voting or Steem in general, you may know how powerful the witness voting power of @pumpkin (@freedom) and @blocktrades is. You may think that it is impossible to be top20 without one of their votes. This was true until about a month ago.

@aggroed who was No.1 (not just top20) became 21st with just losing one single vote from pumpkin, which made him start a campaign: Well, back to campaigning!

Less than a day, he became top20 again, which was a very important moment to me, as aggroed also said.

"I'm the only top 20 that doesn't have a vote from blocktrades or pumpkin."

Consensus Witness Again! Phew! by @aggroed

Moreover, after a few weeks, aggroed became No.1 again!

This was really impressive (even considering the fact that the differences between any top witnesses are not big at all these days. He's not No.1 at the moment, for instance.). I've checked again if aggroed got a vote from one of two big voters, which was not! I also didn't expect that his getting No.1 back was possible that early.

Steem is getting more decentralized at least in terms of witness votes.

So I was curious about

"Who is the witness of the people, by the people, for the people?"

and here they are :)


Of course, "of/for the people (users)" may be quite subjective, so the analysis is mainly for "by the people (users)." That is, which user votes which witness. The word "the people" has a connotation of "ordinary" citizens in some sense. Likewise, what I mean by "the people" on the Steem blockchain are "ordinary" users. For instance, "Red Fish" in Engaged Red Fish Analysis may be one good candidate of ordinary users.

But we have to admit that any definition would be subjective. So rather than defining it, I'll show witness votes categorized and sorted by various criteria.

  • Dataset: @steemsql snapshot on 2019-03-16
  • Categories: SP, reputation, post_count, age (of account), last_post, last_activity (post, vote, account update, owner update, witness vote, witness proxy)
Proxy vote individualization

Instead of direct witness votes, one can set another user as a proxy. (This can be chained, e.g., account1->account2->account3, up to 4 depth.) For instance, freedom->pumpkin is a notable example. While pumpkin's most witness voting power comes from freedom, there are some accounts who receive proxied votes from many users. In such case, it's better to consider a vote by such an account as separate individual votes, rather than treating it as just one vote from one account. Thus, except for the first result, I will show the results with the proxy vote individualization.


While the analysis is done with top 100 witnesses, but it's hard to read without zooming, so I'll only include top50 for the main results. Since there are many plots, I thought about showing only top 25, but to encourage mid-rank witnesses, I show top 50 results. And I will put top 51-100 results in the appendix post later (you can be top 20 someday!)

In all plots, the number on each patch shows the percentage (without % sign to save spaces).

Witness ranking by SP

First, let's see the witness ranking categorized by voter's SP, first without proxy individualization.

Remark: as you can see, the competition for 20th rank is quite competitive these days.

As you may know, there is a reason why I chose the cuts with 3M, 5M, 6M, 9M SP. With proxied SP, there are three "big" accounts:

  • pumpkin(freedom): 8.9x Million SP
  • blocktrades: 5.x Million SP
  • clayop: 3.x Million SP

However, these three accounts are quite different in terms of not just sizes but also fundamental characteristics.

Fundamental differences between pumpkin, blocktrades, and clayop
  • @pumpkin: Almost witness voting power is from one single account, freedom. Neither of them is an active account in terms of posting and (non-witness) voting.
  • @blocktrades: an actively engaging account which is huge itself (not by proxy).
  • @clayop: an actively engaging account whose most witness voting power is from proxy, but from many individuals.

Many people may think that clayop may benefit from his proxy power, but if his voting is excluded (with pumpkin and blocktrades), his rank actually goes up from 20 to 17 as follows.

Note that in all plots the two ranks in the parenthesis is (original rank => adjusted rank). In addition, when a sorting is applied, I preserve other brackets so that one can easily see the original status.


Due to this fundamental difference, proxied votes should better be individualized as follows. (From now on, all resuls will be proxy-individualized.)

You can see that now there is no SP of [3M, 5M), since clayop was the only account in that category.

How large is each group?

Before we look into the detail, to utilize the result, it is much better if we know how large each group is.

For instance, from the above plot, we do not know whether small fish is small because they do not vote or they are still small even if they vote. To see this, SP weighted ratios are much more meaningful than just nominal counts (since there are too many small accounts.)


  • The left pie chart shows the ratio of all (voted or not) SP. The inner pies show what percentage of SP in each category voted for witnesses, i.e., turnout in each category.
  • The right pie chart shows the ratio of SP among voted.
  • For instance, only 55.6% of [500,5K) (left, green) users voted and that's why total SP ratio of that bracket is 10.2% but the voted SP ratio is only 8.4% (on the right).
  • You can see that freedom (blue) and blocktrades (yellow) have voted, i.e., 100% turnout in each category since they are the only account in each category. Thus, their influence is larger than the one, assuming everybody voted.
  • The turnout increases as SP increases until [50K, 500K) (Orca) in which the turnout is 77.6%, quite high. As they invest more, witness voting would be more important to them.
  • Potential reason why the turnout decreases from whale level is that there are some accounts who are not supposed to vote (e.g., affiliated to Steemit Inc). And there are not many whales, so even if some of them doesn't vote the turnout decreases a lot.

Finally, we're ready to see who's the witness of the people, by the people, for the people :)

Note again that "of the people, by the people, for the people" is just figurative.

Witness ranking sorted by SP < 5M (i.e., without pumpkin and blocktrades)

Many people wonder what if there are no pumpkin and blocktrades' votes, and here it is.


  • @aggroed is No1, since aggroed is the only top20 witness who does not get a vote from either pumpkin or blocktrades. (He receives a vote from clayop.)
  • While there are some other changes, except for the aggroed's solid position, the result should be interpreted very cautiously.

As in the aggroed's dramatic 1->21->1 rollercoaster case, users tend not to think seriously about voting witnesses who are already top20 with enough margins. I also tend not to vote top20 witnesses unless I have enough interactions with them.

Thus, if some witness isn't in top20 in the above and if this actually happens, it's highly likely that the witness may get additional votes from other users, so we do not know what exactly will happen. But what will likely happen can be a bit expected from other angles, e.g., ranking by active users (see section Witness ranking by last post time (or last active time) or conclusion.)

Witness ranking sorted by SP < 100

Now let's see the opposite :) Since this is the first category, I'll show a bit more plots than other categories.


  • @good-karma is No1 for users < 100 SP. While I'll do my best to be objective in this post, I heard from others users that good-karma and his team give good responses to eSteem (project of their own) users. In terms of my Github contributing experiences, @good-karma was great! Among 51-100, from my personal experience, @emrebeyler is great! That's why he keeps going up. It's so sad that many witnesses are not so responsive to users's feedback.
  • More interactive witnesses or witnesses who run some services for end-users seem to get more votes from users < 100 SP.
  • @busy.witness is also one of top20. Many users seem to appreciate busy's voting. And busy.witness might be independent of "politics," so it can be an easy choice.
  • One notable witness is @steemitboard (79=>24). Probably it's the first witness who will contact and keep contacting you on Steemit :), that may be why it's popular among small users.
  • @jerrybanfield (at the moment, witness node is off for a long time) seems to have had many small user fans probably due to his teaching materials and voting bot services.
Witness ranking sorted by SP < 500


  • While there are some changes, it is not so different from SP < 100.

But we have to admit that total witness votes from SP < 100 or SP < 500 is still too small.

Witness ranking sorted by SP < 5K


  • From here, aggroed's rank is getting higher. Probably to enjoy Steem Monsters, users may need to be rich to some extent :)
Witness ranking sorted by SP < 50K


  • aggroed becomes No1 here.
Witness ranking sorted by SP < 500K


  • aggroed's performance in SP of [50K, 500K) is quite impressive. In my opinion, users in this bracket are also sort-of investors. For them, dapps like Steem Monsters which can even bring some non-steem users into the Steem community may be an important factor when they consider witness voting.
Witness ranking by reputation

Another interesting factor is reputation. Despite its own problem, it is still one good measure of seniority.


  • The result is quite interesting and carefully interpreted.
  • (orange) [25,26) basically implies 25, and their witness votes account for 21.9%! Of course, this doesn't mean that newbies' voting power is great :) For instance, freedom's rep is 25. And there are many accounts who do not post and thereby their rep is 25.

In fact, the reason why ratio of 25 rep is so high on the left is there are many big 25 rep accounts who are not supposed to vote (e.g., steem, steemit, misterdelegation, etc). Thus, it's much better if we exclude them. Note that @ned is now small enough to include him.


'steem', 'steemit', 'misterdelegation' are excluded.

  • Now it looks much more reasonable (in terms of the ratio of all SP on the left).
  • Expectedly but still surprisingly the turnout increases monotonically as rep increases! Senior users know that witness voting is important :)

Now let's see the ranking.


Again note that freedom is rep 25. So any noticeable jump is due to freedom. And noticeable [80, 85) is haejin. Of course, if ranchorelaxo (~1.4M SP who set haejin as a proxy) is included, haejin's witness voting power is much larger. These days, the gap between 20~22 ranks are quite small, so he and other smaller voters have a casting vote for the 20th rank.

Obviously, it's too much to show in every sorting order, and in this case, the reverse cumulative plot might be more interesting so that we could know which witness is more popular among high rep users.

Since my rep is 67, I picked >= 65 rep :)


  • The witness who have been a witness for a longer time tends to get more supports from higher rep users, which seems reasonable. Unless they didn't do something wrong, old users do not have a reason not to vote old witnesses, e.g., @jesta, @gtg, @blocktrades, @smooth.witness, @clayop

However, an older user does not necessarily mean a more experienced user as you can see from ranking by ages in the next section.

Witness ranking by ages

pie-age (M).png

  • As opposed to "reputation", turnout doesn't monotonically increase in ages.
  • If there are old but haven't voted, then it's unlikely that they vote all of sudden.
  • While notable Steemit affiliated accounts are excluded already, there can be more (and there are more of course).


This time let's see who are popular among relatively new accounts, say, less than 6 months.


  • Due to a huge vote by accounts with less than 1 month old (blue), I examined the data, and there was a new (less than 1month old) account who set @theycallmedan as a proxy. That account accounts (no pun intended) for the big blues brackets.
  • Removing that account doesn't make a big difference for cumulative < 6 month olds.
  • Notable changes are @partiko (50=>5), @steemhunt (37=>6), @steempeak (40=>8), @emrebeyler (30=>9), @actifit (41=>10), @steemitboard (79=>12), @blockbrothers (38=>14), @kevinwong (44=>15), @steempress (32=>17), @guiltyparties (62=>19), @reggaemuffin (35=>20). As you can see most of them provide some services that are actively developed and serviced. So providing some dapps/services seem important to get votes from new users.

Now let's see which witnesses are more popular among "active" users. Since the definition of "active" is is also subjective, I show by "post counts", "last post time", and "last active time."

Witness ranking by post counts

pie-post count.png

  • As expected, post counts are more similar to reputation than ages. While there might be some abusers or automatic postings, more postings usually means more activities.
  • Except for zero post, the turnout increases. If they post more, they most likely know the existence of witness voting and do some vote.


  • Again, you can easily recognize freedom (with zero post).
  • While freedom is powerful, the power of users with [1K, 10K) posts is often greater.
  • In fact, the reverse cumulative plot is similar to the reputation's plot.

While post counts is a good measure of active users, some users may have posted many but long time ago, so now let's focus on more recent activities with last post time and last active time.

Witness ranking by last post time

pie-last post (M).png

  • As expected, the turnout decreases as the last post time is getting older. That is, more active user in this sense is more active in witness voting too.
  • It's quite impressive that the turnout of the MAU (Monthly Active User) in terms of posting is 88.6%!
  • It is also interesting that accounts who've never posted has 47.1% turnout. But we have to admit that there are many big accounts who do curation and witness voting without writing anything. (I also have one which does posting about once per month.)


Let's see who are popular among monthly active users.


  • There are some changes but no surprises in my opinion.
  • This may imply that freedom's voting may not so dilute the "active" users's witness votes effectively. Of course, we should alway be careful with counter-factual, but if witness ranks are determined by "active" users only, then at least the set of top20 witnesses are not so different.
Witness ranking by last active time

This is the last section. Here the last active time is defined as the latest time among 'last_post', 'last_vote_time', 'last_owner_update', 'last_account_update', 'last_wvote', 'last_pvote'.
I skipped the last_vote_time section since it's quite similar to last active time. If one does something, why not voting too? to get some curation reward at least? (If not, those accounts may not vote for witnesses either.)

pie-last active (M).png

  • As expected there are a lot more active users in terms of some last activity than the users in terms of last posting.
  • 60.7% of users have done some activity within the past month.
  • While the turnout decreases in the last active time as expected, there is one outlier in [12,18) bracket, which is freedom. Since freedom set pumpkin as a proxy, pumpkin's activity doesn't count as freedom's activity. In this case, this might be better to be considered as freedom's activity, in which case, it's also in the [0,1) month category.
  • That is, for accounts who set a proxy, the last activity time may be better to be inherited, but this may be subjective. While this can be done easily, I leave it as it is so that readers can interpret on their own. But more important point is the more active account votes more actively.


For the last plot, let's see who are popular among active users in terms of the last active time.


  • Again, not many changes are here. That is, the power of freedom may not be so huge. Let me explain this more in the conclusion.
  • @aggroed is No.1 here again.


  • Steem is getting more decentralized at least in terms of witness votes. @aggroed became the first top20 witness who does not get a vote from either pumpkin or blocktrades. This might be just beginning.
  • While pumpkin(freedom)'s witness voting power is quite significant, the ranks by active users are not so different from the current ranks. I believe this is important.
  • The pumpkin's vote may not be so decisive in top20 ranks (at least anymore). If you're doing good, then even if you lose pumpkin's vote, you may be able to get your top20 position again as aggroed did. I think @aggroed's rank 1 by last active time within 1 month isn't a coincidence. That implies that he gets many supports from active users.
  • Except for aggroed, all top 20 witnesses lose their top 20 rank without either pumpkin or blocktrades' vote. But this doesn't necessarily mean you really end up with lower than 20th rank. Unless there are some interactions, many users including me tend not to vote top 20 witnesses if they're top 20 anyway for sure. Thus, if you're doing your job well, you'll be okay :)
  • Small fish < 500 SP is still small unfortunately even if they vote :( However, the voting power of the users < 5K who do not vote is actually greater than freedom. In that sense, it's not small at all. In addition, [5K, 50K) users only (who do not vote) is greater than freedom. So if users actively engage in the witness voting, witness vote centralization can be quite mitigated.
  • Witnesses who are actively developing or servicing some dapps / services are more popular among new users. Unfortunately, most witnesses are not so actively engaging in communication nor posting. How can new users know if witnesses do not advertise themselves? Still many users including me think that many witness are a bit lack of interactions with users. But in my opinion, those witnesses' ranks are getting lower.
  • These results can be a guideline for witnesses so that they can determine in which group they're strong and weak in order to increase their witness ranks. I hope, however, witnesses do not too focus on certain groups. All users are created equal :) Hope they are the witnesses for the people.

ps. Since this work is inspired by @aggroed, I attach the following impressive moment when both @aggroed and @yabapmatt ranked 1st and 2nd in a row! They are the Steem Monsters indeed :)

Witness ranks in early March.

ps2. As I mentioned several times, even if I don't vote you for witness, that doesn't mean that I'm not valuing your work. For instance, I voted aggroed only after his losing top20 (Since now his position is so secure, I'm actually thinking of taking it back :) All other witnesses (except for @arcange who runs a very useful (but now a bit expensive imho, since I'm in Europe, my phone bill is less expensive than 20 SBD :) tool @steemsql) whom I voted, I only do when I have some enough interactions, since I hope more witnesses have enough interactions with users. Thank you so much for running the Steem blockchain!

Tools and Scripts

SQL query and python scripts are available on my Github:

Relevant Links and Resources

I recommend reading these analyses as well.

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

This is a grear poat thanks for sharing. Im going to resteem this in hopes that it encourages smallet accounts to vote as it does show they can have a significant impact on the top 20 witnesses and the data you gathered prooves it!

Posted using Partiko Android

Hi @gniksivart, thank you for liking and resteeming my post! Yes I believe witness voting is very important.

Brilliant work. I love this kind of data and interpretation. Top effort.
I've been thinking about proxies and the power they hold. Have you looked at proxies at all?
Who are the top 50?


Hi @mattclarke, thank you for your comment. One plot actually have top three proxies. While I was trying to add more result on proxy, since this post already has too many things, I've decided to make a next post for that. Stay tuned :) Thank you!

Great analysis. Excellent work.

Posted using Partiko Android

Thank you for your comment!

Notable changes are @partiko (50=>5), @steemhunt (37=>6), @steempeak (40=>8), @emrebeyler (30=>9), @actifit (41=>10), @steemitboard (79=>12), @blockbrothers (38=>14), @kevinwong (44=>15), @steempress (32=>17), @guiltyparties (62=>19), @reggaemuffin (35=>20)

Finally I found a list that I am on top #20! :-)

I think you're one of the strongest candidates for future top20 :) Thanks!

Amazing work, @blockchainstudio! I'm late to the party here, but the staff pick is well deserved! :) That must have been quite a lot of work to put this together. Sorry for the mostly unrelated question, but how did you do the "pie with subpie" graphs?

Hi @crokkon, thanks a lot for your comment. Actually that subpie was one of my favorite parts :)

I guess you're asking how to draw it? (since calculating the data is obvious.)

Here is the basic: https://matplotlib.org/gallery/pie_and_polar_charts/nested_pie.html

and seems there is no good library that does do the dirty work (color and subgroup job) intuitively.

But I have many categories, so I didn't want to set the colors manually, so I made a function to lighten the color automatically. (repeat the basic colors twice and then adjust them). Although I found some code on the web that does color adjustment, but it didn't work well, so I used https://pypi.org/project/webcolors/ for basic color function and changed the color by multiplication.

It actually took me some time since I haven't played with neither of nested pie nor the color before. Maybe there is some library to do this more easily but I wasn't able to find it unfortunately :( Hope this helps. Thanks again!

한글: 이 글은 보시다시피 길이가 길어서 한글판을 따로 쓰도록 하겠습니다.

넵 감사합니다.. 엇 모르겠다..라고 낙심하고 있었어요..ㅎㅎㅎ

곰돌이가 @bbooaae님의 소중한 댓글에 $0.016을 보팅해서 $0.007을 살려드리고 가요. 곰돌이가 지금까지 총 3645번 $43.265을 보팅해서 $45.253을 구했습니다. @gomdory 곰도뤼~

Hi @blockchainstudio!

Your post was upvoted by @steem-ua, new Steem dApp, using UserAuthority for algorithmic post curation!
Your post is eligible for our upvote, thanks to our collaboration with @utopian-io!
Feel free to join our @steem-ua Discord server

@blockchainstudio님 넘치는 사랑 감사합니다~

짱짱맨 호출에 응답하였습니다.

This post has been included in the latest edition of SoS Daily News - a digest of all the latest news on the Steem blockchain.

Hey, @blockchainstudio!

Thanks for contributing on Utopian.
Congratulations! Your contribution was Staff Picked to receive a maximum vote for the analysis category on Utopian for being of significant value to the project and the open source community.

We’re already looking forward to your next contribution!

Get higher incentives and support Utopian.io!
Simply set @utopian.pay as a 5% (or higher) payout beneficiary on your contribution post (via SteemPlus or Steeditor).

Want to chat? Join us on Discord https://discord.gg/h52nFrV.

Vote for Utopian Witness!

Thank you so much for the hard work!

Posted using Partiko Android

Thank you! although I'm not sure if this was written by a human or written due to the mention. Anyway, you seem to have many witness votes due to the great app. One suggestion though, could you not leave the signature any more? Now I believe @partiko is famous enough even without dapp. Thanks.

읽다가 ㅋㅋ 한글 요약 봐야지 하고 내려왔는 데 없네요 ㅋㅋ
곧 다른 글로 써주신다는 코멘트를 보고 안심하고 갑니다 ㅎㅎ

네 방금 업로드했습니다^^ 50-100위대는 다음에 따로 써드릴게요~