ActnEarn rewards those who support actnearn initiatives on the ground. Currently we are mostly promoting steem blockchain related content from inside and outside. We have seen good growth and involvement of the steemians who are supporting us. As the participants are increasing -it is important that we develop a transparent and fair system that rewards the participants.
In order to respond to that need we have developed Loyalty and Influence Index. Below are the details how it is computed and used to reward with increasingly higher upvote weight to loyal participants
- Contributions to last seven posts are used
Loyalty Index - LI
- number of posts action contributed to by an steemin account/ number of posts
Influence Index - II
- Total upvote value in steem against all the contributions by an steemian account/Largest Total upvote value in steem against all the contributions by an steemian account
- LnI Index = II*LI
- Suppose an account took action against one post out of seven. Then the loyalty index will be 1/7=0.142.
- This account shared on twitter and facebook. And depending on his/her followers actnearn gave total rewards of 1 steem. And let us assume maximum rewards earned by any other participant account against these posts is 3 steem. Then the influence index of this participant will be 1/3=0.33
- So the LnI index for this account = 0.33*0.5=0.165
Effective Upvote Weight
- If account contributed to minimum one post in last 7 then the upvote weight = min(LnI x UpvoteWeight x 0.1+ LI x UpvoteWeight,100). That means if a doer is not acting on each post then despite of his/her large influence the upvote weight will reduce significantly
- If not then the upvote weight=UpvoteWeight*(1/7)
- 100 if your followers are >=5000
- 75 if your followers are >=2500
- 50 if your followers are >=1000
- 25 if your followers are >=250
- 15 if your followers are >=100
- 10 if your followers are >=50
- 5 Token Upvote
We have developed the python code to do above computations.
Note- This post is primarily to use as reference in future and for development purpose. However, we will upvote if anyone contributes to increase its visibility.
from datetime import datetime import time import math from steem import Steem from steem.converter import Converter from datetime import timedelta from contextlib import suppress from steem.account import Account from steem.account import Amount from steem.post import Post from steem.blog import Blog import csv from beem.account import Account from beem.comment import Comment c = Converter() nodes=['https://api.steemit.com'] #nodes=["https://api.steemitstage.com"] keys=[post', 'active'] ## Keys to be provided s = Steem(nodes,keys) def rewardshare(): reward_fund = s.get_reward_fund() reward_balance = reward_fund["reward_balance"] reward_fund = s.get_reward_fund() recent_claims = reward_fund["recent_claims"] reward_fund = s.get_reward_fund() recent_claims = reward_fund["recent_claims"] reward_fund = s.get_reward_fund() recent_claims = reward_fund["recent_claims"] reward_balance = Amount(reward_fund["reward_balance"]).amount reward_share = reward_balance / float(recent_claims) #price_of_steem = Amount(s.get_current_median_history_price()["base"]).amount return reward_share def getReplyRewards(v,reward_share): total_rshares = int(v['rshares']) post_value_in_steem = total_rshares * reward_share print("Post Rewards in Steem : ", post_value_in_steem) return post_value_in_steem; def lni(): #loyalty and influence from_account="actnearn" b = Blog(from_account) number_of_posts=7 posts = b.take(number_of_posts) print(posts) athr= rewrd= loyl= reward_share=rewardshare() postcount=0 for pst in posts: postcount=postcount+1 p=str(pst) p=p.replace("<","") p=p.replace(">","") p=p.replace("Post-"+from_account+"/","") message = p replies=s.get_content_replies(from_account,message) for i in range(len(replies)-1): if "twitter.com" in replies[i]["body"] or "facebook.com" in replies[i]["body"] or "linkedin.com" in replies[i]["body"] or "plus.google.com" in replies[i]["body"]: author=replies[i]["author"] print("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&") print(author) identifier = ('@'+author+'/'+replies[i]["permlink"]) cmnt=Comment(identifier) upvoted=0 for v in cmnt['active_votes']: voter=v.get('voter') if voter=="actnearn" and upvoted==0: replyreward=getReplyRewards(v,reward_share) upvoted=1 print(voter) print("already upvoted by @actnearn") athr.append(author) rewrd.append(replyreward) loyl.append(postcount) if upvoted==0: print("upvote by @actnearn after validating") print("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$") print(athr) print(rewrd) print(loyl) zipped = zip(athr, rewrd,loyl) zipps=sorted(zipped) athr, rewrd,loyl = zip(*zipps) print(athr) print(rewrd) print(loyl) athrfin= rewdfin= loylfin= k=0 while k < (len(athr)-1): rwd=rewrd[k] ath=athr[k] lyl=loyl[k] k=k+1 postn=1 while ath == athr[k] and k<=len(athr)-2: rwd=rwd+rewrd[k] if lyl==loyl[k]: postn=postn else: postn=postn+1 lyl=loyl[k] k=k+1 athrfin.append(ath) rewdfin.append(rwd) loylfin.append(postn) print(athrfin) print(rewdfin) print(loylfin) doers=len(athrfin) lnii = [[0 for x in range(3)] for y in range(doers)] for j in range(doers): LI=min(postcount,loylfin[j])/postcount ## in case old post is upvoted during new post II=rewdfin[j]/(max(rewdfin)) lnii[j]=athrfin[j] lnii[j]=LI*II lnii[j]=LI print(lnii) with open('lnii.csv', "w") as f: writer = csv.writer(f, delimiter=',', lineterminator='\n') writer.writerows(lnii) return