How are the witnesses performing? Let's look at some statistics!

in #steem6 years ago (edited)

A couple days ago I wrote a post about various ways in which witnesses could abuse (use?) their positions to extract more profit from the system than they're typically meant to. How would we know if a witness is abusing their power? The short and uninteresting answer is that it depends on how they're abusing it. One of the ways a witness can abuse their position is to manipulate the order of transactions that are included in the Steem database, slipping extra votes in or sneaking a market order in milliseconds ahead of some other big operation. I don't know exactly how much money there is to be made doing something like this, but if it's happening, shouldn't we know?

shakedown-1340048_640.png

The power of statistics compels you!

The witnesses produce blocks in basically random order. This means that we should be able to assume that every witness has the same probability of seeing any particular transaction at any particular time. Thus, if we record all of the transactions that are included in blocks by all of the witnesses over a long-enough period of time, all of the statistics of these transactions should be identical from witness to witness. If a witness is inserting extra votes in their blocks, it should show up in the statistics!

That is, we shouldn't be able to tell the witnesses apart on the basis of the transactions they include in blocks unless something funny is going on. So let's do it!

Setup:

I wrote a python script that scans the blockchain and records the total of each operation type included by each witness. I had it scan 1,000,001 blocks (starting at number 17 million and stopping at 18 million), and then I plotted some numbers. I think the results are encouraging! But maybe we should ask some questions about what @thecryptodrive and @netuoso are doing.

First, for reference, a plot of the total number of blocks produced by each of the top-25 producing witnesses over that interval. This plot shows exactly what we'd think: the top 20 or so witnesses who have (approximately) permanent seats at the witness table all produce almost exactly the same number of blocks.

Screenshot 2017-12-27 06.30.27.png

Now let's do a quick gross test of performance; we'll check the number of transactions included per block. Here, if a witness differs from someone else, it wouldn't be even remotely obvious why.

Screenshot 2017-12-27 06.33.05.png

What's happening there with @thecryptodrive? About 10% fewer total transactions than everybody else. That's a pretty big discrepancy, and something that we should probably look at more closely and try to understand why it's happening.

Fortunately, if @thecryptodrive were front-running or inserting extra transactions, you'd expect their number here to be higher, not lower. So now for some more plots.

In the next few, I just picked some interesting operation types and plotted the distributions of those (normalized by the number of blocks produced by each witness). In all of them, @thecryptodrive will show lower numbers than the others; this isn't indicative of anything we didn't already know. First, vote operations:

Screenshot 2017-12-27 06.37.30.png

Nothing funny here! I was pleased when I created these plots that they look so much like a nice clean uniform distribution (I think; I haven't done any actual numerical statistical tests -- so it's totally possible that I'm missing something important). Next, market orders:

Screenshot 2017-12-27 06.39.32.png

Here, we have a very large spike by @netuoso, which at the outset seems fishy. But don't go pulling your witness votes from @netuoso yet; if you look back at the first plot, you can see that @netuoso was not at the time a permanent witness. That is, @netuoso has produced many fewer blocks than the other witnesses, so the high proportion of market orders may be misleading. The same is true of @liondani and @wackou with their relatively-low numbers of market orders.

Where to next?

I'm going to re-run the scripts to look at more recent data. If my data shows that @thecryptodrive and @netuoso are actually doing something different from the other witnesses, this will show up in newer data as well. And of course, even if they're doing something different from the other witnesses, this doesn't immediately imply malfeasance. We'll need a closer look to determine that.

Cheers!

EDIT: I've determined that the high rate of market transactions by @netuoso is almost certainly totally benign. I plan to publish more details in a coming article.

Sort:  

Good job! But be careful, because there might be some bad guys who dont like such reports. Truthteller are often not very favoured.

LOL

Thx Biophil for the analytics.. I am a witness out of the top 50, and it hard to climb the ladder with the steemit page only showing the first 50 INCLUDING disabled or stopped witnesses. I think it is interesting to analyse how the top 20 would look like if you remove all votes from old inactive users.. Some still have a big wallet and voted 1 year ago for a witness. But now they are not active anymore so newcomers will never get that "old" big vote.

I already made a change request via @Utopian-io to change the vote for witness screen to at least remove disabled witnesses and to show all in a list. This makes it much more fair for everyone.

is almost certainly totally benign

I wish I knew what it means

This comment has received a 44.44 % upvote from @steemdiffuser thanks to: @stimialiti. Steem on my friend!

Above average bids may get additional upvotes from our trail members!

Get Upvotes, Join Our Trail, or Delegate Some SP

Really great job. I am impatiently waiting for your next reports!!

I wonder if you get some upvotes from top witnesses? ;-)

I did get votes by @ausbitbank and @timcliff!

Top effort, biophil. Early days, but I think this kind of analysis has great potential for keeping everyone honest.

I still dont understand the concept of witnesses. Can anyone explain?

Instead of there being proof-of-work miners like in bitcoin, Steem uses delegated proof-of-stake. Basically, your stake is your steem power, and you 'delegate' it to 'miners' by voting for witnesses.

Witnesses are the 'miners' that secure the Steem blockchain. But because it uses delegated proof-of-stake, it uses a lot less resources than bitcoin mining and frees up most of the new coin creation to be shared with content creators instead of with miners.

So do we get any reward by delegating our steem to the witnesses?

You still control your STEEM - delegating STEEM is something different entirely.

Think of it more like a representative government. You vote for witnesses, but your vote is based on how much STEEM you control, and the witnesses run the servers that allow Steem to function and decide which laws to pass (protocol changes... hard forks).

You don't get any explicit reward for voting (and less than 15% of users vote).

Thank you for explaining. I understand it a little better.

Man, thanks for share this. Many witnesses are good, but is difficult talk with theys, so much elite :/

Very good post.. I like it..

Thanks for the analysis @biophil...do visit my blog

very post

ohh...its really bad..greed of money can change a person to do bad deeds...if you could not shared this post then many people would not get to understand about it...this should not be done for the betterment of newbies...totally agree with you...

No bad deeds reported here!

sorry something else was in my mind , i misunderstood that...

hi sir i am newcomer, i like to follow your post, please help to like my post and will be your followers. @biophil

Thanks a lot for this post @biophil! I was about to vote for witnesses but decided to research what a witness really is and this blog helped reveal those sketchy ones.

You bet! I need to put in some more work and make this an ongoing thing.

By the way, I did more study and found that @netuoso and @thecryptodrive are probably completely fine. The way I ran the statistics made them look worse than they really are, and I wrote about it more recently on my blog. Cheers!