Python for STEEM #3-1: Homework

felixxx(72)
Published in
#python
Words
411
Reading
2 min
Listen
Play
7y

This is part of a series of tutorials.
The goal is to produce a hands-on guide for people who want to jump straight into developing tools for STEEM.

Yesterday's Homework

First, I have to apologize.
The homework was a bit hard, I thought it would be easier.
I will try to go through this quickly, just to not leave anybody hanging.

This is how I solved it:

from beem.account import Account
from beem.blockchain import Blockchain

blockchain = Blockchain()
head_block = blockchain.get_current_block_num()

test_account = Account("holger80")

rewards = []
reward_sum = 0

for curation_reward in test_account.history_reverse(start = head_block, stop = head_block - 30000, use_block_num = True, only_ops = "curation_reward"):
    rewards.append(curation_reward['reward']['amount'])

for reward_num in range(10): # starts at 0
    reward_sum += int(rewards[reward_num])
    print('\n', reward_num + 1, ':',  rewards[reward_num])

print('\naverage:', reward_sum/ 10, '\n... this look like its in VESTS ...')    

Explanation

For this example, I am using the head-block as orientation (start).
I then use history_reverse to crawl through the account's history (30000 blocks backwards / stop = start - 30000) and append all curation rewards during that time to my list rewards.
I then use a counting loop to iterate through the first 10 rewards (using reward_num for indexing).
Sum them up and divide by 10 and the result is a number, that I hope is VESTS.

This is not very elegant, but works ok, I guess.

image.png

Remember to always put this in front:

from beem import Steem
from beem.instance import set_shared_steem_instance

steemit_api = Steem(node=["https://api.steemit.com"])
set_shared_steem_instance(steemit_api)

Notes

  • date_time

history supports date_time objects - the cleaner way to code this, would make use of this instead of the head-block. I stuck to integers for now, because I did not feel like explaining date_time.

  • 30000 blocks

STEEM's block-time is 3 seconds. You can trust STEEM's timestamps. Part of the witnesses' job is to maintain a well synchronized clock.
There are exactly 28800 blocks in a day, but 30,000 is a good enough approximation for me. There might not be 10 curation rewards in this short time-frame for all accounts. Change this number, if you need to.

  • for i in range(k):

I think this is a very neat method for a counting loop.
I can read it almost like an English sentence.

  • +=

This is just beautiful.
a += b replaces a = a + b

  • VESTS

In this example, the history method returned the reward-amount as a number only. They are VESTS, I assume.
That is not congruent with how this normally works. I expected a STEEM asset as return. Without use of beem's asset class, those would have been a bit complicated to calculate with, though.
I shall be more careful, should I give out another homework :)


As always

If you do not understand something of the above, just ask here or in chat.

btw

Where is my STEM vote ? I was promised rewards :D

Python for STEEM #3-1: Homework | Ecency