Tools

steem-python comes with batteries included.

This page lists a collection of convenient tools at your disposal.

Account

class steem.account.Account(account_name, steemd_instance=None)

This class allows to easily access Account data

Parameters:
  • account_name (str) – Name of the account
  • steemd_instance (Steemd) – Steemd() instance to use when accessing a RPC
export(load_extras=True)

This method returns a dictionary that is type-safe to store as JSON or in a database.

Parameters:load_extras (bool) – Fetch extra information related to the account (this might take a while).
get_account_history(index, limit, start=None, stop=None, order=-1, filter_by=None, raw_output=False)

A generator over steemd.get_account_history.

It offers serialization, filtering and fine grained iteration control.

Parameters:
  • index (int) – start index for get_account_history
  • limit (int) – How many items are we interested in.
  • start (int) – (Optional) skip items until this index
  • stop (int) – (Optional) stop iteration early at this index
  • order – (1, -1): 1 for chronological, -1 for reverse order
  • filter_by (str, list) – filter out all but these operations
  • raw_output (bool) – (Defaults to False). If True, return history in steemd format (unchanged).
history(filter_by=None, start=0, batch_size=1000, raw_output=False)

Stream account history in chronological order.

history_reverse(filter_by=None, batch_size=1000, raw_output=False)

Stream account history in reverse chronological order.


Amount

class steem.amount.Amount(amount_string='0 SBD')

This class helps deal and calculate with the different assets on the chain.

Parameters:amountString (str) – Amount string as used by the backend (e.g. “10 SBD”)

Blockchain

class steem.blockchain.Blockchain(steemd_instance=None, mode='irreversible')

Access the blockchain and read data from it.

Parameters:
  • steemd_instance (Steemd) – Steemd() instance to use when accessing a RPC
  • mode (str) – irreversible or head. irreversible is default.
get_all_usernames(*args, **kwargs)

Fetch the full list of STEEM usernames.

get_current_block()

This call returns the current block

get_current_block_num()

This call returns the current block

static hash_op(event: dict)

This method generates a hash of blockchain operation.

history(filter_by: typing.Union[str, list] = [], start_block=1, end_block=None, raw_output=False, **kwargs)

Yield a stream of historic operations.

Similar to Blockchain.stream(), but starts at beginning of chain unless start_block is set.

Parameters:
  • filter_by (str, list) – List of operations to filter for
  • start_block (int) – Block to start with. If not provided, start of blockchain is used (block 1).
  • end_block (int) – Stop iterating at this block. If not provided, this generator will run forever.
  • raw_output (bool) – (Defaults to False). If True, return ops in a unmodified steemd structure.
info()

This call returns the dynamic global properties

stream(filter_by: typing.Union[str, list] = [], *args, **kwargs)

Yield a stream of operations, starting with current head block.

Parameters:filter_by (str, list) – List of operations to filter for
stream_from(start_block=None, end_block=None, batch_operations=False, full_blocks=False, **kwargs)

This call yields raw blocks or operations depending on full_blocks param.

By default, this generator will yield operations, one by one. You can choose to yield lists of operations, batched to contain all operations for each block with batch_operations=True. You can also yield full blocks instead, with full_blocks=True.

Parameters:
  • start_block (int) – Block to start with. If not provided, current (head) block is used.
  • end_block (int) – Stop iterating at this block. If not provided, this generator will run forever (streaming mode).
  • batch_operations (bool) – (Defaults to False) Rather than yielding operations one by one, yield a list of all operations for each block.
  • full_blocks (bool) – (Defaults to False) Rather than yielding operations, return raw, unedited blocks as provided by steemd. This mode will NOT include virtual operations.

Blog

class steem.blog.Blog(account_name: str, comments_only=False, steemd_instance=None)

Obtain a list of blog posts for an account

Parameters:
  • account_name (str) – Name of the account
  • comments_only (bool) – (Default False). Toggle between posts and comments.
  • steemd_instance (Steemd) – Steemd instance overload
Returns:

Generator with Post objects in reverse chronological order.

Example

To get all posts, you can use either generator:

gen1 = Blog('furion')
gen2 = b.all()

next(gen1)
next(gen2)

To get some posts, you can call take():

b = Blog('furion')
posts = b.take(5)
all()

A generator that will return ALL of account history.

take(limit=5)

Take up to n (n = limit) posts/comments at a time.

You can call this method as many times as you want. Once there are no more posts to take, it will return [].

Returns:List of posts/comments in a batch of size up to limit.

Converter

class steem.converter.Converter(steemd_instance=None)

Converter simplifies the handling of different metrics of the blockchain

Parameters:steemd_instance (Steemd) – Steemd() instance to use when accessing a RPC
rshares_2_weight(rshares)

Obtain weight from rshares

Parameters:rshares (number) – R-Shares
sbd_median_price()

Obtain the sbd price as derived from the median over all witness feeds. Return value will be SBD

sbd_to_rshares(sbd_payout)

Obtain r-shares from SBD

Parameters:sbd_payout (number) – Amount of SBD
sbd_to_steem(amount_sbd)

Conversion Ratio for given amount of SBD to STEEM at current price feed

Parameters:amount_sbd (number) – Amount of SBD
sp_to_rshares(sp, voting_power=10000, vote_pct=10000)

Obtain the r-shares

Parameters:
  • sp (number) – Steem Power
  • voting_power (int) – voting power (100% = 10000)
  • vote_pct (int) – voting participation (100% = 10000)
sp_to_vests(sp)

Obtain VESTS (not MVESTS!) from SP

Parameters:sp (number) – SP to convert
steem_per_mvests()

Obtain STEEM/MVESTS ratio

steem_to_sbd(amount_steem)

Conversion Ratio for given amount of STEEM to SBD at current price feed

Parameters:amount_steem (number) – Amount of STEEM
vests_to_sp(vests)

Obtain SP from VESTS (not MVESTS!)

Parameters:vests (number) – Vests to convert to SP

Dex

class steem.dex.Dex(steemd_instance=None)

This class allows to access calls specific for the internal exchange of STEEM.

Parameters:steemd_instance (Steemd) – Steemd() instance to use when accessing a RPC
buy(amount, quote_symbol, rate, expiration=604800, killfill=False, account=None, order_id=None)

Places a buy order in a given market (buy quote, sell base in market quote_base). If successful, the method will return the order creating (signed) transaction.

Parameters:
  • amount (number) – Amount of quote to buy
  • quote_symbol (str) – STEEM, or SBD
  • price (float) – price denoted in base/quote
  • expiration (number) – (optional) expiration time of the order in seconds (defaults to 7 days)
  • killfill (bool) – flag that indicates if the order shall be killed if it is not filled (defaults to False)
  • account (str) – (optional) the source account for the transfer if not default_account
  • order_id (int) – (optional) a 32bit orderid for tracking of the created order (random by default)

Prices/Rates are denoted in ‘base’, i.e. the STEEM:SBD market is priced in SBD per STEEM.

cancel(orderid, account=None)

Cancels an order you have placed in a given market.

Parameters:
  • orderid (int) – the 32bit orderid
  • account (str) – (optional) the source account for the transfer if not default_account
get_ticker()

Returns the ticker for all markets.

Output Parameters:

  • latest: Price of the order last filled
  • lowest_ask: Price of the lowest ask
  • highest_bid: Price of the highest bid
  • sbd_volume: Volume of SBD
  • steem_volume: Volume of STEEM
  • percent_change: 24h change percentage (in %)

Note

Market is STEEM:SBD and prices are SBD per STEEM!

Sample Output:

{'highest_bid': 0.30100226633322913,
 'latest': 0.0,
 'lowest_ask': 0.3249636958897082,
 'percent_change': 0.0,
 'sbd_volume': 108329611.0,
 'steem_volume': 355094043.0}
market_history(bucket_seconds=300, start_age=3600, end_age=0)

Return the market history (filled orders).

Parameters:
  • bucket_seconds (int) – Bucket size in seconds (see returnMarketHistoryBuckets())
  • start_age (int) – Age (in seconds) of the start of the window (default: 1h/3600)
  • end_age (int) – Age (in seconds) of the end of the window (default: now/0)

Example:

{'close_sbd': 2493387,
 'close_steem': 7743431,
 'high_sbd': 1943872,
 'high_steem': 5999610,
 'id': '7.1.5252',
 'low_sbd': 534928,
 'low_steem': 1661266,
 'open': '2016-07-08T11:25:00',
 'open_sbd': 534928,
 'open_steem': 1661266,
 'sbd_volume': 9714435,
 'seconds': 300,
 'steem_volume': 30088443},
sell(amount, quote_symbol, rate, expiration=604800, killfill=False, account=None, orderid=None)

Places a sell order in a given market (sell quote, buy base in market quote_base). If successful, the method will return the order creating (signed) transaction.

Parameters:
  • amount (number) – Amount of quote to sell
  • quote_symbol (str) – STEEM, or SBD
  • price (float) – price denoted in base/quote
  • expiration (number) – (optional) expiration time of the order in seconds (defaults to 7 days)
  • killfill (bool) – flag that indicates if the order shall be killed if it is not filled (defaults to False)
  • account (str) – (optional) the source account for the transfer if not default_account
  • orderid (int) – (optional) a 32bit orderid for tracking of the created order (random by default)

Prices/Rates are denoted in ‘base’, i.e. the STEEM:SBD market is priced in SBD per STEEM.

trade_history(time=3600, limit=100)

Returns the trade history for the internal market

Parameters:
  • time (int) – Show the last x seconds of trades (default 1h)
  • limit (int) – amount of trades to show (<100) (default: 100)

Post

class steem.post.Post(post, steemd_instance=None)

This object gets instantiated by Steem.streams and is used as an abstraction layer for Comments in Steem

Parameters:
  • post (str or dict) – @author/permlink or raw comment as dictionary.
  • steemd_instance (Steemd) – Steemd node to connect to
curation_reward_pct()

If post is less than 30 minutes old, it will incur a curation reward penalty.

downvote(weight=-100, voter=None)

Downvote the post

Parameters:
  • weight (float) – (optional) Weight for posting (-100.0 - +100.0) defaults to -100.0
  • voter (str) – (optional) Voting account
edit(body, meta=None, replace=False)

Edit an existing post

Parameters:
  • body (str) – Body of the reply
  • meta (json) – JSON meta object that can be attached to the post. (optional)
  • replace (bool) – Instead of calculating a diff, replace the post entirely (defaults to False)
export()

This method returns a dictionary that is type-safe to store as JSON or in a database.

static get_all_replies(root_post=None, comments=[], all_comments=[])

Recursively fetch all the child comments, and return them as a list.

Usage: all_comments = Post.get_all_replies(Post('@foo/bar‘))

get_replies()

Return first-level comments of the post.

is_comment()

Retuns True if post is a comment

is_main_post()

Retuns True if main post, and False if this is a comment (reply).

static parse_identifier(uri)

Extract post identifier from post URL.

reply(body, title='', author='', meta=None)

Reply to an existing post

Parameters:
  • body (str) – Body of the reply
  • title (str) – Title of the reply post
  • author (str) – Author of reply (optional) if not provided default_user will be used, if present, else a ValueError will be raised.
  • meta (json) – JSON meta object that can be attached to the post. (optional)
reward

Return a float value of estimated total SBD reward.

time_elapsed()

Return a timedelta on how old the post is.

upvote(weight=100, voter=None)

Upvote the post

Parameters:
  • weight (float) – (optional) Weight for posting (-100.0 - +100.0) defaults to +100.0
  • voter (str) – (optional) Voting account
vote(weight, voter=None)

Vote the post

Parameters:
  • weight (float) – Weight for posting (-100.0 - +100.0)
  • voter (str) – Voting account

steem.utils

steem.utils.block_num_from_hash(block_hash: str) → int

return the first 4 bytes (8 hex digits) of the block ID (the block_num) :param block_hash: :type block_hash: str

Returns:
Return type:int
steem.utils.block_num_from_previous(previous_block_hash: str) → int
Parameters:previous_block_hash (str) –
Returns:
Return type:int
steem.utils.chunkify(iterable, chunksize=10000)

Yield successive chunksized chunks from iterable.

Parameters:
  • iterable
  • chunksize – (Default value = 10000)

Returns:

steem.utils.construct_identifier(*args, username_prefix='@')

Create a post identifier from comment/post object or arguments.

Examples

construct_identifier('username', 'permlink')
construct_identifier({'author': 'username', 'permlink': 'permlink'})
steem.utils.env_unlocked()

Check if wallet password is provided as ENV variable.

steem.utils.fmt_time(t)

Properly Format Time for permlinks

steem.utils.fmt_time_from_now(secs=0)

Properly Format Time that is x seconds in the future

Parameters:secs (int) – Seconds to go in the future (x>0) or the past (x<0)
Returns:Properly formated time for Graphene (%Y-%m-%dT%H:%M:%S)
Return type:str
steem.utils.fmt_time_string(t)

Properly Format Time for permlinks

steem.utils.is_comment(item)

Quick check whether an item is a comment (reply) to another post. The item can be a Post object or just a raw comment object from the blockchain.

steem.utils.json_expand(json_op, key_name='json')

Convert a string json object to Python dict in an op.

steem.utils.keep_in_dict(obj, allowed_keys=[])

Prune a class or dictionary of all but allowed keys.

steem.utils.parse_time(block_time)

Take a string representation of time from the blockchain, and parse it into datetime object.

steem.utils.remove_from_dict(obj, remove_keys=[])

Prune a class or dictionary of specified keys.

steem.utils.strfage(time, fmt=None)

Format time/age

steem.utils.strfdelta(tdelta, fmt)

Format time/age

steem.utils.time_elapsed(posting_time)

Takes a string time from a post or blockchain event, and returns a time delta from now.