Which witnesses could be interesting for me?

in #steemdev6 years ago (edited)

Voting for witnesses is very important. Especially after the HF20 failure of the top 20 witnesses, everyone should take a look over their witness votes another time. But the witness list is long, and checking each witness in depth would take a huge time. That's why I wrote a script to check for which witnesses the persons vote for, that you follow. That gives you a list of witnesses that it is definitely worth checking.
This isn't a list of witnesses that you should vote for, but a list that you should look into. Also, there are two values for each witness in the list. One is the number of followings that vote for this witness (the list is sorted by that) and the other is a special score. For each followed account, 30/number of witness votes from that account gets added to the score. That causes an account that only votes for @reggaemuffin (a cool witness by the way) to add a lot more to @reggaemuffin's score than an account that votes for @reggaemuffin and 29 other witnesses. The witnesses you are already voting for, are excluded for the list. This approach is very similar to the approach @holger80 (another awesome witness) had for looking for interesting persons to follow. Look at his post if you are interested in that.
The code looks like this:

from beem.account import Account
from beem.nodelist import NodeList
from beem.steem import Steem
from beem.witness import Witness

if __name__ == '__main__':
    nodes = NodeList()
    nodes.update_nodes()
    node_list = nodes.get_nodes()
    stm = Steem(node=node_list)
    main_acc = Account('flugschwein', steem_instance=stm)

    following = main_acc.get_following()
    main_witness_votes = stm.rpc.get_account(main_acc.identifier)[0]['witness_votes']
    witnesses_weighted = {}
    witnesses_straight = {}
    for a in list(set(following + main_witness_votes)):
        acc = stm.rpc.get_account(a)[0]
        for w in acc['witness_votes']:
            if w in main_witness_votes:
                continue
            elif w in witnesses_weighted:
                witnesses_weighted[w] += 30 / acc['witnesses_voted_for']
                witnesses_straight[w] += 1
            else:
                witnesses_weighted[w] = 30 / acc['witnesses_voted_for']
                witnesses_straight[w] = 1
    final_witnesses = []
    for w in witnesses_weighted:
        wit = Witness(w)
        final_witnesses.append(
            {'name': wit.identifier, 'score': witnesses_weighted[w], 'url': wit['url'], 'cnt': witnesses_straight[w]})
    final_witnesses = sorted(final_witnesses, key=lambda x: x['cnt'], reverse=True)
    print('|My Witness Votes|My following\'s Witness Votes|')
    print('|---|---|')
    print(f'|{len(main_witness_votes)}|{len(final_witnesses)}|')
    print('\n|Number|Name|Weighted Score|Count|')
    print('|---|---|---|---|')
    for i in range(30):
        print('|{}|[{}]({})|{}|{}|'.format(i + 1, final_witnesses[i]['name'], final_witnesses[i]['url'],
                                           round(final_witnesses[i]['score'], 3), final_witnesses[i]['cnt']))

This script still has quite some room for improvement, but that would only affect performance. I will keep the script in here up to date.
For me, @flugschwein, that script returns the following:

My Witness VotesMy following's Witness Votes
18129
NumberNameWeighted ScoreCount
1utopian-io107.9337
2ausbitbank51.54936
3aggroed50.31734
4curie48.11432
5timcliff41.61632
6therealwolf70.62831
7blocktrades45.48526
8teamsteem40.71326
9good-karma40.65125
10roelandp35.23325
11jesta31.14324
12anyx31.17924
13lukestokes.mhth30.8924
14pfunk28.30124
15ocd-witness31.48820
16netuoso24.36718
17smooth.witness24.29817
18busy.witness35.16316
19yabapmatt18.35716
20cervantes19.23415
21followbtcnews17.14815
22neoxian14.63314
23riverhead19.98513
24thecryptodrive13.9213
25stoodkev50.62813
26steemcommunity18.82613
27furion14.73112
28ats-witness12.98312
29dragosroua45.22712
30blockbrothers17.26912

This is my list. Yours probably looks very different.
If you click on the names of one of these witnesses, you'll get to the witness introduction post they linked in their witness config. If you want me to execute that script for you, just leave a comment down there, and I'll try to give you your list of check worthy witnesses :) The list is limited to a length of 30, but if you want a longer one, just tell me in your comment, and I'll give you a longer one ;).
So to end this small post, I ask you to please make use of your witness votes. This is something very important. Look at some witnesses yourself, and vote for those who you deem worth of taking care of the blockchain for us. Also, thanks @holger80 for providing beem and for the inspiration with that approach for looking for interesting witnesses (or accounts to follow). Please vote him as a witness, he really deserves the votes :D

Sort:  

Thanks for this as I m reviewing right now as well. Sorry to say it does not help me yet who to kick and who to keep :-). A good combination of tech (coder) guys paired with people that say what they think plus some that understand the needs of a global business (here I see gaps).

Yeah, making good choices in that topic can't be done by a machine. But that way, you can see some witnesses that are worth looking at that you possibly missed so far etc. I don't want to make witness votes for you, but rather make the "look-at" list a bit shorter ;)

Agreed - I need probably some more days with my review - just started a new job and I think Wednesday is realistic.

Nice one @flugschwein, wanna run it for my account once? :)

Loading...

Hmm that seems like an advertisement for the top20
;)

Yeah, sadly that was hard to go around, but I guess I am also removing some lower ranked ones from the possibilities, since I am voting for them ;) (otherwise you'd probably be in the list e.g.^^)
Do you have any idea how a similar thing could be accomplished circumventing the top20 advertisement?

Exclude them.
Hmm. Can you query the witness ranks with beem? Hm....

But to be honest, that would no longer be an objective view at all anymore then. Not sure if that would be a good approach either..

In those cases here it goes rarly outside the top 50 witnesses.
And don't they already have enough screen time?

Gute Arbeit!
Darf ich auch um eine Liste bitten? :)
Vielleicht möchte ja @steemchiller ein Modul daraus stricken?
Ansonsten poste halt ein Jobangebot auf einem oder mehreren Discord-Servern ... :)

Loading...

Can you execute that script for me? I'd love to know how to do this, but my brain's better for living languages ;(

Loading...

Must be a bug, I'm not on the list ;)

Not sure if you made a joke, but maybe you missed that line?

witnesses you are already voting for, are excluded for the list.

oh ya, I missed that haha was just messing with ya but didn't see that. Cool script, would be a cool website app.

Loading...

I'd love to see @dragosroua in the top 20. Just a personal opinion though!

Can you run it for steemcommunity please?

I assume it includes proxy votes 😊 Cheers!

Loading...

Can I get mine?

Loading...

What have we here,one year !BEER