Part 24: An In Dept Look At Steem Operation Types Part I
This tutorial is part of a series where different aspects of programming with steem-python
are explained. Links to the other tutorials can be found in the curriculum section below. This part is a direct continuation of Part 23: Retrieve And Process Full Blocks From The Steem Blockchain and will go into more detail following operation types
: transfer
, transfer_to_vesting
, withdraw_vesting
and convert
.
Repository
https://github.com/steemit/steem-python
What will I learn
- How to access data in a operation
- What is a transfer?
- What is a transfer_to_vesting
- What is a withdraw_vesting
- What is a convert?
Requirements
- Python3.6
steem-python
Difficulty
- basic
Tutorial
Setup
Download the files from Github. There 2 are files get_blocks.py
which contains the code. The main file takes 3 arguments from the command line which sets the starting_block
, block_count
and what operation
to filter for.
Run scripts as following:
> python get_block.py 22224731 10 transfer
How to access data in a operation
The previous tutorial went into great detail how to extract operations
from blocks
. There are 19 different operations
in total and each has a different structure. However, the data for the operation
is always stored in the same spot.
{
'ref_block_num': 8004,
'ref_block_prefix': 1744181707,
'expiration': '2018-05-07T15:29:54',
'operations': [
['vote', {
'voter': 'acehjaya',
'author': 'zunaofficial79',
'permlink': 'kabut-pagi',
'weight': 10000
}]
],
'extensions': [],
'signatures': ['1f205086670c27365738697f0bc7cfde8b6e976608dc12b0d391b2b85ad7870a002313be4b09a358c30010be2a09bebacead866ba180afc348ce40c70566f4ed88']
}
Under operations
is an array, the first index is the operation type
and the second index is a json table
with the operation data
.
if transaction['operations'][0][0] == self.tag:
self.process_operation(transaction['operations']
[0][1],
self.tag)
Filter for the required operation type and process the json data
. For this example tutorial a different class
is made for each operation type
which stores the data in respective variables
and has a print function
. These classes can be found in the operations.py
file.
What is a transfer?
Every transfer
of either Steem
or SBD
between two different user accounts is a transfer
operation. This operation has 4 variables. from
is the account that sends the funds, to
the receiving account, amount
the valuation and which currency, and optionally memo
. In which messages can be added.
{
'from': 'yusril-steem',
'to': 'postpromoter',
'amount': '5.000 SBD',
'memo': 'https://steemit.com/life/@yusril-steem/our-challenges-and-trials-in-life'
}
By using a class
to process the operation
all the variables
can be neatly kept and additional functions
can be added as well. Like the print_operation()
which allows for easy printing to the terminal. A separate class
is made for each of the operations
discussed in this tutorial.
class Transfer():
def __init__(self, operation, block, timestamp):
self.account = operation['from']
self.to = operation['to']
self.amount = operation['amount']
self.memo = operation['memo']
self.block = block
self.timestamp = timestamp
def print_operation(self):
print('\nBlock:', self.block, self.timestamp)
print('Operation: transfer')
print('From:', self.account)
print('To:', self.to)
print('Amount:', self.amount)
print('Memo:', self.memo)
print('')
Additional data that normally falls outside the scope of the operation
can also be stored in the class
. Like the block
in which the operation
took place and the timestamp of the operation
.
What is a transfer_to_vesting
A power up
of Steem
by a user is known as a transfer_to_vesting
and contains 3 variables
. from
the user account itself, to
the receiving account and amount
the amount being powered up. This operation
locks up the Steem
for 13 weeks.
{
'from': 'flxsupport',
'to': 'ltcil',
'amount': '0.719 STEEM'
}
What is a withdraw_vesting
Opposite to a transfer_to_vesting
is a withdraw_vesting
. When a user initiates a power down
the amount of steem power
will be powered down in 13 weekly increments. Vested steem power
is displayed in VESTS
and has to be converted to Steem
based on the current conversion rate. This is outside the scope of this tutorial but can be found here. This operation
holds 2 different variables
. account
the user account and vesting_shares
the amount of VESTS
to be converted to Steem
at the time of the operation.
{
'account': 'bazimir',
'vesting_shares': '44671.906021 VESTS'
}
What is a convert?
It is possible to convert SBD
to Steem
on the internal market
. This operation
assumes that the value of SBD
is at $1.0, which may not be true. Always check the external markets
before doing such an operation
. After 3 days the operation
matures and the user will receive the Steem
. This operation
holds 3 different variables
: amount
the amount of SBD
to be converted, owner
the account initiating the conversion and requestid
the id for the system to perform the conversion after 3 days.
{
'amount': '5000.0 SBD',
'owner': 'steemit',
'requestid': 1467592156
}
Running the script
Running the script will print the operations
, for which the filter has been set, to the terminal starting from the starting_block
for block_count
amount of blocks
. A class
object is made for the operation
and the build in print_operation()
function is called. The data of the operation
is printed to the terminal with the additional information of the block
in which the operation
is contained and the timestamp
of the operation
.
python get_blocks.py 22224731 10 transfer
Booted
Connected to: https://rpc.buildteam.io
Block: 22224731
Block: 22224731 2018-05-07T15:20:03
Operation: transfer
From: hottopic
To: jgullinese
Amount: 0.001 SBD
Memo: Hello Friend, Your post will be more popular and you will find new friends.We provide "Resteem upvote and promo" service.Resteem to 18.000+ Follower,Min 45+ Upvote.Send 1 SBD or 1 STEEM to @hottopic (URL as memo) Service Active
Block: 22224731 2018-05-07T15:20:03
Operation: transfer
From: minnowbooster
To: msena
Amount: 0.001 SBD
Memo: You got an upgoat that will be done by bycz,greece-lover,hemanthoj,percygeorge,bigdave2250,mexresorts,wanxlol,nickmorphew,thauerbyi,blackbergeron,aziz96,lovlu,utube,lowestdefinition. We detected an open value of 0.0$, worth 0.001 SBD in send and refunding that! Request-Id: 1176288
...
...
...
Curriculum
Set up:
- Part 0: How To Install Steem-python, The Official Steem Library For Python
- Part 1: How To Configure The Steempy CLI Wallet And Upvote An Article With Steem-Python
Filtering
- Part 2: How To Stream And Filter The Blockchain Using Steem-Python
- Part 6: How To Automatically Reply To Mentions Using Steem-Python
- Part 23: Part 23: Retrieve And Process Full Blocks From The Steem Blockchain
Voting
- Part 3: Creating A Dynamic Autovoter That Runs 24/7
- Part 4: How To Follow A Voting Trail Using Steem-Python
- Part 8: How To Create Your Own Upvote Bot Using Steem-Python
Posting
- Part 5: Post An Article Directly To The Steem Blockchain And Automatically Buy Upvotes From Upvote Bots
- Part 7: How To Schedule Posts And Manually Upvote Posts For A Variable Voting Weight With Steem-Python
Constructing
Rewards
- Part 9: How To Calculate A Post's Total Rewards Using Steem-Python
- Part 12: How To Estimate Curation Rewards Using Steem-Python
- Part 14: How To Estimate All Rewards In Last N Days Using Steem-Python
Transfers
- Part 11: How To Build A List Of Transfers And Broadcast These In One Transaction With Steem-Python
- Part 13: Upvote Posts In Batches Based On Current Voting Power With Steem-Python
Account Analysis
- Part 15: How To Check If An Account Is Following Back And Retrieve Mutual Followers/Following Between Two Accounts
- Part 16: How To Analyse A User's Vote History In A Specific Time Period Using Steem-Python
- Part 18: How To Analyse An Account's Resteemers Using Steem-Python
The code for this tutorial can be found on GitHub!
This tutorial was written by @juliank.
I thank you for your contribution. Here are my thoughts on your post;
Your contribution has been evaluated according to Utopian policies and guidelines, as well as a predefined set of questions pertaining to the category.
To view those questions and the relevant answers related to your post, click here.
Need help? Write a ticket on https://support.utopian.io/.
Chat with us on Discord.
[utopian-moderator]
Hey @steempytutorials
Thanks for contributing on Utopian.
We’re already looking forward to your next contribution!
Want to chat? Join us on Discord https://discord.gg/h52nFrV.
Vote for Utopian Witness!
Thank you for your very good tutorial !