Python for STEEM #3: Modules
This is the third part to 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.
API
Whenever I query data 'from the blockchain', I have to connect to a node that runs the corresponding API plugin to my request. I just got reminded of how little I understand about this.
I will stick to what works for me and explain as best as I can.
For this guide I will treat the API like a black box and will look at beem's modules only. Most of beem's methods closely reflect the underlying API calls, though.
Modules
These are beem's modules
https://beem.readthedocs.io/en/latest/modules.html
In the last part, I used the blockchain
module.
https://beem.readthedocs.io/en/latest/beem.blockchain.html
from beem.blockchain import Blockchain
blockchain = Blockchain()
This instantiates blockchain
as of the class Blockchain like defined in:
https://github.com/holgern/beem/blob/master/beem/blockchain.py
In the documentation you can look up, which parameters the different methods accept and what data type they will return.
head_block = blockchain.get_current_block_num()
The method get_current_block_num
, returns an int
.
account.py
As an example, I will go through some methods of the account
module;
https://beem.readthedocs.io/en/latest/beem.account.html
method: balances
from beem.account import Account
test_account = Account(account = 'holger80')
print(test_account.balances)
This returns a dictionary, but the print() function will print it as a string automagically.
method: get_balances()
from beem.account import Account
test_account = Account(account = "holger80")
print(test_account.get_balances())
This returns the same dictionary as the balances
method does.
method: get_voting_power()
beem has some higher level functions, which are abstracted from the raw API data:
from beem.account import Account
test_account = Account(account = "holger80")
print(test_account.get_voting_power())
print(test_account.get_voting_power(with_regeneration = False))
By default, the parameter with_regeneration
is set to True
.
The regeneration however, is being calculated for you by beem.
The STEEM API will always only return the voting power at the time of the last vote.
Account.history()
The history()
method deserves its own chapter.
Sadly, the default node set in beem does not support it at the moment.
I have to set the node by hand like this:
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)
This makes our black box API work again.
Leave this in front of all examples from now on, for good measure.
For most purposes, history_reverse
is the more useful function, but is derived from history
anyways - It is just the other way around starting at the latest block, going backwards.
from beem.account import Account
from beem.blockchain import Blockchain
blockchain = Blockchain()
head_block = blockchain.get_current_block_num()
test_account = Account("holger80")
for operation in test_account.history_reverse(start = head_block, stop = head_block - 10000, use_block_num = True):
print(operation)
This returns all operations during the last 10000 blocks for the specified account.
There are more examples in the documentation.
Congratulations
This should enable you to explore all of beem's modules and methods.
If you want me to explain a specific method more closely, let me know in the comments or in chat.
Homework
Can you calculate the average of your last 10 curation rewards ?
Great series, have a !BEER.
Will work on the homework :)
You can get some bonus points for figuring out how I can configure beem to work with the testnet :)
$trdo
Congratulations @goldcoin, you are successfuly trended the post that shared by @felixxx!
@felixxx will receive 3.59609625 TRDO & @goldcoin will get 2.39739750 TRDO curation in 3 Days from Post Created Date!
"Call TRDO, Your Comment Worth Something!"
To view or trade TRDO go to steem-engine.com
Join TRDO Discord Channel or Join TRDO Web Site
thats amazing! thanks for sharing =)
yes i agree i would love to use python on steem (tho i have to still learn json)
I find your tutorials to be useful. But I don’t like homework :)
I kind of got ahead of myself there XD
As I am doing it myself, I realize it is not trivial.
View or trade
BEER
.Hey @felixxx, here is a little bit of
BEER
for you. Enjoy it!Well I have some fun with testing various beem modules, but I have yet to find out how to convert VESTS to SP. I need to learn how to extract items from a dictionary to be able to do the homework.
PS. I will do a post of some of my testing shortly.
If you can do it in VESTS, that's fine.
I will introduce the asset class later ...
Congratulations @felixxx, your post successfully recieved 3.59609625 TRDO from below listed TRENDO callers:
To view or trade TRDO go to steem-engine.com
Join TRDO Discord Channel or Join TRDO Web Site
Useful guide. thanks.