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 Votes|My following's Witness Votes| |---|---| |18|129|
Number | Name | Weighted Score | Count |
---|---|---|---|
1 | utopian-io | 107.93 | 37 |
2 | ausbitbank | 51.549 | 36 |
3 | aggroed | 50.317 | 34 |
4 | curie | 48.114 | 32 |
5 | timcliff | 41.616 | 32 |
6 | therealwolf | 70.628 | 31 |
7 | blocktrades | 45.485 | 26 |
8 | teamsteem | 40.713 | 26 |
9 | good-karma | 40.651 | 25 |
10 | roelandp | 35.233 | 25 |
11 | jesta | 31.143 | 24 |
12 | anyx | 31.179 | 24 |
13 | lukestokes.mhth | 30.89 | 24 |
14 | pfunk | 28.301 | 24 |
15 | ocd-witness | 31.488 | 20 |
16 | netuoso | 24.367 | 18 |
17 | smooth.witness | 24.298 | 17 |
18 | busy.witness | 35.163 | 16 |
19 | yabapmatt | 18.357 | 16 |
20 | cervantes | 19.234 | 15 |
21 | followbtcnews | 17.148 | 15 |
22 | neoxian | 14.633 | 14 |
23 | riverhead | 19.985 | 13 |
24 | thecryptodrive | 13.92 | 13 |
25 | stoodkev | 50.628 | 13 |
26 | steemcommunity | 18.826 | 13 |
27 | furion | 14.731 | 12 |
28 | ats-witness | 12.983 | 12 |
29 | dragosroua | 45.227 | 12 |
30 | blockbrothers | 17.269 | 12 |
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 |