Detecting Last-Minute Upvoters

in utopian-io •  7 years ago 

Introduction

This is a tool for spotting patterns in last minute voting behaviors. Voting a post on the last day before cashout is generally considered to be underhanded, especially with larger votes.

What use does it serve?

There there is already a service on steemit which deals with the larger last minute upvotes, but this program aims to represent all last minute upvotes graphically. For example, if one post is getting 200 upvotes for less than a dollar, @abusereports may not pick up on it, but this program does - and it can then be displayed graphically to see who's sending/recieving the largest quantity/value of votes in the last x days.

This also lets you watch the last minute votes as they come in, letting you observe all the wild and wonderful corners in this hidden world of self voting, I made a fun/lighthearted post last month with a crude version of my current code.

It's main use is for educational purposes, you know, going down the rabbit hole.

View it in all it's glory over at the Github repo:
https://github.com/sisygoboom/abuse_detection_steemit



Features

  • View live stream of last-minute upvotes
  • Create a huge database of last minute upvote accounts
    • Built in pie chart creator to visualize the data you've collected
  • Blockchain listener
    • Real time data means the dataset will only grow and can be reset at any time
    • Auto node switching for minimal downtime
    • Stores all data in a JSON file for anlysis

Don't worry, this was an early mistake

In the live stream we can easily see a pattern of upvotes going towards a certain post



Technology

I used a 64 bit windows 10 machine with

IDE: Anaconda

Language: Python 3.6

External Dependencies:

Dependencies are likeley different on Unix based systems.



Demonstration

So, I left the bot on overnight to get a good range of data. Unfortunately the values of the posts were wrong and strangeley, one of the most upvoted accounts didn't even exist. So I switched from using the coinmarketcap API to using the built in 7 day rolling average.

At first, my poor pie chart was just a complete mess.

But I raised the bar for entry, so currently, to make it to the graphs, the account must've received more than $5 in last minute upvotes OR have committed to more than 5 last minute upvotes.

Obviously, having this number set is flawed since the dataset will always be growing - I'm not going to try to automate that just yet, for now it's easy enough to do manually.

So, as we can see, busy.org has been giving out hundreds of last minute upvotes, making the majority when excluding 'other' (aka. less than 5 votes) - I'm not sure if this is commonly known information, but I found it at least mildly interesting.

It then occurred to me, that including the rest of the dataset in the "other" category might give people a clearer perspective. That's now a boolean option in 'make_pie.py' (cleaver naming, right?)

I thought I'd check to make sure I was getting accurate information and that everything was in working order:

Obviously, this is a smaller dataset than my original one, so it's only been running for a couple of hours rather than overnight. Different users will be active at different times.


Anyway, feel free to have a play around with it yourselves.



Roadmap

The project is currently at a good level, no known bugs and it works well; in time, I'll likely make more detailed and aesthetically pleasing graphical representations (maybe I'll even deviate from pie charts), and modify the code to record more detailed data such as the times at which votes are cast, to see if there are any peak times so to speak.

Another feature I've been considering whilst making this is to use historical blockchain data between specified blocks or time periods, as an alternative to a stream.

I also plan at some point, make it possible to exclude certain users (e.g. busy.org from being included in the charts).

I also understand some work could be done on the layout of the JSON database to make it easier for graphical representation.

Automation of the pie_charts.py 'other' limits.

Value of upvotes sent out.



Want To Contribute?

You forkers are always welcome to do what you want.

If you like the idea and fancy doing some work on it yourself or want to get in touch with me for any questions, don't hesitate to contact me on discord at sisygoboom#6775



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:  

There is nothing wrong with self voting. And doing it last minute is most honest as you are not receiving curation rewards.

Self voting is usually ok, but if a whale is making hundreds of comments every day and upvoting all of them on the last day, that's a little bit sketchy right?

Last minute votes are generally done so they get the highest possible amount of money, it also usually means the user is just getting the vote for the money rather than the content, which ruins the proof of brain concept that steemit is supposed to run on.

And you do get curation for last minute upvotes, you get 30%.

  ·  7 years ago (edited)

Well that makes sense. But one can produce great content with initial delegated 15 SP and cashout every single penny.

Why would any sane person put money to Steemit if not for money to make money. Since they cant get it by writing, they are getting it the other way.

If I would invest my hard earned money somewhere, I would expect to profit one way or another. Different behavior can only be expected from those with severe condition of altruism.

P.S.
I thought curation rewards depend on voters after your vote, is it not? I never receive anything if I vote later than 5th voter after 30 mins have passed.

The reason you don't get curation if you vote too late is because your vote isn't big enough to get curation.

So your upvote is worth less than a cent, but if that's lower than 0.003 steem you're below the dust limit so you couldn't get curation. (25% of 0.003 is 0.000x but steem only has three decimal places so you get nothing)

The reason you get the most curation at ~30mins is because you get a higher curation the more it makes after you've voted. That's why you'll often notice lots of smaller votes come in before a whale votes. But if you vote too early, you get less curation and are essentially donating your curation to the author.

So it makes sense for minnows to vote at some point in the first 30 mins, and whales to vote at any point after 30 mins.

But most last minute upvotes that are abusive are done by the same user using separate accounts, or a pair of friends hoping to cash out on lots of SP, so curation doesn't really matter to them - it's more important for them to do it late so people don't notice and flag it.

Thanks for the explanation about dust limit!

Hello @sisygoboom and guests of this blog! Please read my massage only if you have an opportunity to help me out.

Last month my mother was diagnosed with lung cancer and now we are doing all in order to gather the funds needed for treatment and surgical operation. Unfortunately a major part of my cryptocurrecy stuck on HitBTC exchange and I don’t know when I will be able to withdraw them. I want to ask you to financially help me; even $20 will help my family a lot! Sorry for begging, but sadly I have no choice at the moment.

Please donate me with Steem, SBD, of Ethereum. ETH address:

0xeb2eaef6c5be069751185f325939fcdcc47d6f2f