golos.api

This is the main module for the GOLOS library, containing the class Api which is the high-level class to be used when interacting with python-golos.

Copyright:

+===================================================+
|                 © 2019 Privex Inc.                |
|               https://www.privex.io               |
+===================================================+
|                                                   |
|        Privex's Golos Library                     |
|        License: X11/MIT                           |
|                                                   |
|        Core Developer(s):                         |
|                                                   |
|          (+)  Chris (@someguy123) [Privex]        |
|                                                   |
+===================================================+

Privex's Golos Python Library
Copyright (c) 2019    Privex Inc. ( https://www.privex.io )

Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to use,
copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Functions

resolve_body_ru(body)

Classes

Api([nodes])

Main class for golos-python - wraps ws_client and provides many helper methods for interacting with the GOLOS blockchain, such as get_accounts() and transfer()

class golos.api.Api(nodes: Union[List[str], str] = None, **kwargs)[source]

Bases: object

Main class for golos-python - wraps ws_client and provides many helper methods for interacting with the GOLOS blockchain, such as get_accounts() and transfer()

Official Repo: https://github.com/Privex/golos-python

Official PyPi Package Name: golos-python

Basic Usage:

>>> from golos import Api
>>> golos = Api()
>>> acc = golos.get_accounts(['someguy123'])
>>> acc[0]['owner']
'someguy123'
>>> wit = golos.get_witness_by_account('someguy123')
>>> wit['url']
'https://golos.io/ru--delegaty/@someguy123/delegat-someguy123'
MAX_RETRIES = 5
RETRY_DELAY = 1
_get_accounts(logins: List[str], **kwargs) → List[dict][source]
_transfer_op(to: str, amount: Union[decimal.Decimal, float, int, str], from_account: str, asset: str = 'GOLOS', **kwargs) → dict[source]

Generate a transfer operation as a dict based on the parameters.

Note: If memo is not present in the **kwargs, it will be excluded from the operation dict

(this is intentional, to allow for operations such as vesting which do not use memos).

Parameters
  • to (str) – The username of the account to send coins to

  • amount (Decimal) – The amount of coins to send, as either a Decimal, str, int or float

  • from_account (str) – The username of the account to send from

  • asset (str) – The asset (coin) to send (Default: GOLOS (value of DEFAULT_ASSET))

  • memo (str) – An optional public message to attach to the transfer (Not included in op if not specified)

Return dict op

An operation as a dict: dict(from:str, to:str, amount:str, memo:str?)

account_create(login, password, creator, wif, **kwargs)[source]
account_create_with_delegation(login, password, creator, wif, **kwargs)[source]
account_metadata(account, json_metadata, wif)[source]
account_update(new_password, account, old_password, **kwargs)[source]
account_update_password(account, password, wif)[source]
account_witness_proxy(account, proxy, wif)[source]
property chain_properties

This property loads and caches the chain properties for up to 30 seconds, avoiding constant un-necessary requests for the chain properties.

Return dict props

A dictionary of chain properties

change_recovery_account(account, recovery_account, wif)[source]
check_login(login)[source]
convert_golos_to_vests(amount)[source]
delegate_vesting_shares(delegatee, amount, delegator, wif, **kwargs)[source]
delegate_vesting_shares_with_interest(delegatee, amount, delegator, rate, wif, **kwargs)[source]
property dynamic_global_properties

This property loads and caches the dynamic global properties for up to 30 seconds, avoiding constant un-necessary requests for the dynamic global properties.

Return dict props

A dictionary of dynamic global properties

find_op_transaction(op: dict, ignore_keys: list = None) → dict[source]

Locate and return the full transaction from the blockchain based on a dict operation (op)

The operation dictionary must contain at least block, as well as all of the operation keys that would be found on the blockchain, with the values being the same type as they would be on the blockchain.

Example usage:

>>> op = {'from':  'someguy123', 'to': 'ksantoprotein', 'amount': '0.100 GOLOS', 'memo': 'testing',
...       'number': 127287, 'block': 30895436, 'timestamp': '2019-10-01T12:49:00', 'type_op': 'transfer'}
>>> Api().find_op_transaction(op)
{'ref_block_num': 27979, 'ref_block_prefix': 3018856747, 'expiration': '2019-10-01T12:50:00',
 'operations': [['transfer',
    {'from': 'someguy123', 'to': 'ksantoprotein', 'amount': '0.100 GOLOS', 'memo': 'testing'}
  ]],
  'extensions': [],
  'signatures': ['1f1a0212f7b9fe263acaeadf1ec127000dc234c413b543e3c268d251e...']
}
Parameters
  • op (dict) – An operation as a dict, containing the key block, and any operation keys to match

  • ignore_keys (list) – (Optional) Additional dict keys to remove from op

Raises

TransactionNotFound – When a matching transaction could not be found on the blockchain.

Return dict tx

The full transaction found on the blockchain as a dict

A returned transaction is generally formatted like such:

dict(ref_block_num: int, ref_block_prefix: int, expiration: str, operations: list,
     extensions: list, signatures: list)
follow(wtf, followings, followers, wif, **kwargs)[source]
get_account_count() → int[source]
get_account_history(account: str, op_limit: Union[list, str] = 'all', **kwargs) → List[dict][source]

Get the account history for a given account as a List[dict].

Optionally you can filter the operations returned using op_limit, as well as limit the number of operations with start_limit, and maximum operation age with age.

Basic usage:

>>> g = Api()
>>> # Return a list of 'transfer' operations for the account 'someguy123'
>>> hist = g.get_account_history('someguy123', op_limit='transfer')
>>> h[0]
{'from': 'someguy123', 'to': 'someguy123', 'amount': '0.100 GOLOS', 'memo': 'testing', 'number': 127290,
 'block': 30908474, 'timestamp': '2019-10-01T23:41:18', 'type_op': 'transfer',
 'trx_id': '80c7e0f7444f63074a52a8ba44cf066551706588'}
Parameters
  • account (str) – The username to load account history for, e.g. 'someguy123'

  • op_limit (list) – Only return operations of these types. Specify either as a list: ['transfer', 'vote'], or as a string, e.g. 'transfer' (only transfers) or 'all' (no filter)

  • kwargs – See below

Key int start_limit

Load at most this many history items (Default: 1000 items)

Key int age

Skip history items older than this many seconds (Default: 604800 seconds / 7 days)

Return List[dict] history

A list of dict history ops (see below for format)

dict(from, to, amount: str, memo, number, block, timestamp: str, type_op, trx_id)
get_account_reputations(account)[source]
get_accounts(logins: List[str], **kwargs) → List[dict][source]

Перерасчитываются некоторые параметры по аккаунту “voting_power” - 1..10000 реальная батарейка “golos_power” - сила голоса с учетом делегирования “rshares” - сколько добавится шаров в пост при 100% батарейке “GOLOS”, “GBG” - ликвидные токены “new_post_limit” - сколько постов можно опубликовать “new_post_time” - сколько осталось времени в минутах до публикации без штрафа “bandwidth” = {

“avail” - всего доступно в кБ “used_forum” - использовано в кБ “used_market” - использовано в кБ “free_forum” - доступно в кБ “free_market” - доступно в кБ }

“value” = {“GOLOS”, “GBG”} - цена апвота по внутренней бирже “order” = {“GOLOS”, “GBG”} - цена апвота по медиане “rating” = репутация в десятичном виде

get_active_witnesses()[source]
get_all_accounts()[source]
get_balances(*accounts) → Dict[str, Dict[str, decimal.Decimal]][source]

Get all balances for one or more accounts (as positional arguments).

Basic Usage:

>>> b = Api().get_balances('john', 'dave')
>>> b['john']['GOLOS']
Decimal('4183.323')
>>> b['dave']['GBG']
Decimal('837.978')
Parameters

accounts (str) – One or more usernames to get balances for

Return dict balances

A dict of {account: {asset: balance, ..}, ..}, for example:

{
    'someguy123': {
        'GOLOS': Decimal('157560.131'),
        'GBG': Decimal('6420.916'),
        'GP': Decimal('15044.951'),
        'GESTS': Decimal('50058788.632180')
    }
}
get_block(n)[source]
get_chain_properties() → dict[source]
Return dict props

A dictionary of chain properties, containing:

dict(account_creation_fee, maximum_block_size, sbd_interest_rate, create_account_min_golos_fee,
     create_account_min_delegation, create_account_delegation_time, min_delegation,
     max_referral_interest_rate, max_referral_term_sec, min_referral_break_fee, max_referral_break_fee,
     posts_window, posts_per_window, comments_window, comments_per_window, votes_window,
     votes_per_window, auction_window_size, max_delegated_vesting_interest_rate,
     custom_ops_bandwidth_multiplier, min_curation_percent, max_curation_percent, curation_reward_curve,
     allow_distribute_auction_reward, allow_return_auction_reward_to_fund)
get_config()[source]
get_content(url, **kwargs)[source]
get_curation_percent()[source]
get_current_median_history_price()[source]
get_database_info()[source]
get_dynamic_global_properties() → Union[bool, dict][source]
Return dict dynamic_props

A dictionary containing the dynamic global properties (see below)

dict(
    id, head_block_number, head_block_id, time, current_witness, total_pow, num_pow_witnesses,
    virtual_supply, current_supply, confidential_supply, current_sbd_supply, confidential_sbd_supply,
    sbd_interest_rate, sbd_print_rate, average_block_size, maximum_block_size, current_aslot,
    recent_slots_filled, participation_count, max_virtual_bandwidth, current_reserve_ratio,
    custom_ops_bandwidth_multiplier, is_forced_min_price, transit_block_num, transit_witnesses,
    total_vesting_fund_steem, total_reward_fund_steem, total_vesting_shares, total_reward_shares2,
    last_irreversible_block_num, vote_regeneration_per_day, golos_per_vests, now
)
get_feed_history()[source]
get_follow(account: str)[source]
get_key_references(public_key: str)[source]

Позволяет узнать какому логину соответсвует публичный ключ #public_key = ‘GLS6RGi692mJSNkdcVRunY3tGieJdTsa7AZeBVjB6jjqYg98ov5NL’ Но не позволяет если есть авторити у аккаунта

get_market_history_buckets()[source]
get_median_price()[source]
get_open_orders(account)[source]
get_ops_in_block(n)[source]
get_order_book(limit)[source]
get_order_book_extended(limit)[source]
get_order_price()[source]
get_recent_trades(limit)[source]
get_ticker()[source]
try:

t = {“bid”: round(float(ticker[“highest_bid”]), 6), “ask”: round(float(ticker[“lowest_ask”]), 6)}

except:

return False

get_tickers()[source]
get_transaction(txid: str) → dict[source]

Lookup the transaction ID txid and return it’s matching transaction as a dict

Example usage:

>>> Api().get_transaction('c901c52daf57b60242d9d7be67f790e023cf2780')
{'ref_block_num': 27979, 'ref_block_prefix': 3018856747, 'expiration': '2019-10-01T12:50:00',
 'operations': [['transfer',
    {'from': 'someguy123', 'to': 'ksantoprotein', 'amount': '0.100 GOLOS', 'memo': 'testing'}
  ]],
  'extensions': [],
  'signatures': ['1f1a0212f7b9fe263acaeadf1ec127000dc234c413b543e3c268d251e...']
}
Parameters

txid (str) – A string hex transaction ID to lookup

Raises

TransactionNotFound – When the transaction ID could not be found on the blockchain.

Return dict tx

The matching transaction as a dict

get_transaction_hex(tx: dict, remove_sigs=False) → str[source]

Get the string hexadecimal representation of a dict transaction object.

Example Usage:

>>> tx = {
...     'ref_block_num': 27979, 'ref_block_prefix': 3018856747, 'expiration': '2019-10-01T12:50:00',
...     'operations': [
...         ['transfer',
...          {'from': 'someguy123', 'to': 'ksantoprotein', 'amount': '0.100 GOLOS', 'memo': 'testing'}]
...     ],
...     'extensions': [], 'signatures': []
... }
>>> Api().get_transaction_hex(tx)
'4b6d2b19f0b3784b935d01020a736f6d656775793132330d6b73616e746f70726f7465696e640000000000000003474f4c4f53
 00000774657374696e6700'
Parameters
  • tx (dict) – A transaction as a dict in the form: dict(ref_block_num, ref_block_prefix, expiration, operations, extensions, signatures)

  • remove_sigs (bool) – (Default: False) Replace the signatures key with [] (for TXID generation)

Return str txhex

The hexadecimal representation of the transaction

get_transaction_id(tx: dict) → str[source]

Calculate the TXID for a transaction in the dict form:

dict(ref_block_num, ref_block_prefix, expiration, operations, extensions, signatures)

>>> tx = {
...     'ref_block_num': 27979, 'ref_block_prefix': 3018856747, 'expiration': '2019-10-01T12:50:00',
...     'operations': [
...         ['transfer',
...          {'from': 'someguy123', 'to': 'ksantoprotein', 'amount': '0.100 GOLOS', 'memo': 'testing'}]
...     ],
...     'extensions': [], 'signatures': []
... }
>>> Api().get_transaction_id(tx)
'c901c52daf57b60242d9d7be67f790e023cf2780'
Parameters

tx (dict) – A transaction as a dict in the form: dict(ref_block_num, ref_block_prefix, expiration, operations, extensions, signatures)

Return str txid

The calculated transaction ID for the given transaction

get_volume()[source]
get_witness_by_account(account)[source]
get_witness_count()[source]
get_witness_schedule()[source]
is_login(login)[source]
lookup_witness_accounts(start, limit)[source]
post(title, body, author, wif, **kwargs)[source]

category = ‘’ url = ‘’ permlink = ‘’ tags = []

beneficiaries = ‘login:10000’ weight = 10000 curation = max or int 2500..10000

replace(title, body, author, wif, **kwargs)[source]
repost(url, account, wif, **kwargs)[source]
resolve_url(url)[source]
transfer(to: str, amount: Union[decimal.Decimal, float, int, str], from_account: str, wif: str, asset='GOLOS', memo='', **kwargs)[source]

Transfer amount coins (of asset) to from_account using the private key wif and the memo memo

Basic usage:

>>> g = Api()
>>> tf = golos.transfer(
...     to='ksantoprotein', amount='0.1', asset='GOLOS', from_account='someguy123',
...     wif='5Jq19TeeVmGrBFnu32oxfxQMiipnSCKmwW7fZGUVLAoqsKJ9JwP', memo='this is an example transfer'
... )
>>> print('TXID:', tf['id'], 'Block:', tf['block_num'])
TXID: c901c52daf57b60242d9d7be67f790e023cf2780 Block: 30895436
Parameters
  • to (str) – The username of the account you want to send coins to

  • amount (Decimal) – The amount of coins to send, as either a Decimal, str, int or float

  • from_account (str) – The username of the account to send from

  • wif (str) – The active/owner private key for the from_account, as a string in WIF format

  • asset (str) – The asset (coin) to send (Default: GOLOS (value of DEFAULT_ASSET))

  • memo (str) – An optional public message to attach to the transfer (Default: '' - empty string)

  • kwargs – Any additional keyword arguments

Return dict transfer

A dictionary containing info about the completed transfer, inc. id (full ret below)

Return data:

dict(
    ref_block_num: int, ref_block_prefix:int,
    expiration:str, operations:list, extensions:list,
    signatures:List[str], block_num:int, id:str
)
transfer_to_vesting(to: str, amount: Union[decimal.Decimal, float, int, str], from_account: str, wif: str, **kwargs)[source]

Power up a given amount of DEFAULT_ASSET (default: GOLOS) from from_account into to.

Basic Usage (Convert 1000 GOLOS from someguy123 into GESTS to someguy123)

>>> g = Api()
>>> tf = g.transfer_to_vesting(
...   to='someguy123', from_account='someguy123', wif='5Jq19TeeVmGrBFnu32oxfxQMiipnSCKmwW7fZGUVLAoqsKJ9JwP'
...   amount='1000'
... )
>>> print('TXID:', tf['id'], 'Block:', tf['block_num'])
TXID: c901c52daf57b60242d9d7be67f790e023cf2780 Block: 30895436
Parameters
  • to (str) – The username of the account you want to send coins to

  • amount (Decimal) – The amount of coins to send, as either a Decimal, str, int or float

  • from_account (str) – The username of the account to send from

  • wif (str) – The active/owner private key for the from_account, as a string in WIF format

Return dict transfer

A dictionary containing info about the completed TX, inc. id (full ret below)

Return data:

dict(
    ref_block_num: int, ref_block_prefix:int,
    expiration:str, operations:list, extensions:list,
    signatures:List[str], block_num:int, id:str
)
transfers(raw_ops: List[Tuple[str, Union[decimal.Decimal, float, int, str], str, str]], from_account: str, wif: str)[source]

Execute multiple transfers in a single transaction.

>>> tfrs = [('john', '1.234', 'GOLOS', 'thanks man'), ('dave', '0.374', 'GBG', 'hi dave'), ]
>>> g = Api()
>>> tf = g.transfers(raw_ops=tfrs, from_account='someguy123',
...                  wif='5Jq19TeeVmGrBFnu32oxfxQMiipnSCKmwW7fZGUVLAoqsKJ9JwP')
>>> print('TXID:', tf['id'], 'Block:', tf['block_num'])
TXID: c901c52daf57b60242d9d7be67f790e023cf2780 Block: 30895436
Parameters
  • raw_ops (List[Tuple]) – A list of transfers as 4 key tuples: (to:str, amount:str, asset:str, memo:str)

  • from_account (str) – The username of the account to send from

  • wif (str) – The active/owner private key for the from_account, as a string in WIF format

Return dict transfer

A dictionary containing info about the completed TX, inc. id (full ret below)

Return data:

dict(
    ref_block_num: int, ref_block_prefix:int,
    expiration:str, operations:list, extensions:list,
    signatures:List[str], block_num:int, id:str
)
vests_to_power(vests: Union[decimal.Decimal, float, int, str]) → decimal.Decimal[source]

Basic Usage:

>>> Api().vests_to_power('50058788')  # Convert ``50058788 GESTS`` into ``GOLOS``
Decimal('15043.793')
Parameters

vests (Number) – An amount in VESTS/GESTS to convert to SP / GP

Return Decimal power

The value of the VESTS / GESTS in STEEM / GOLOS

vote(url, weight, voters, wif)[source]
withdraw_vesting(account, amount, wif, **kwargs)[source]
golos.api.DEFAULT_ASSET = 'GOLOS'

The primary asset symbol of the current blockchain. Used as the default asset for some operations if not specified, while also obligatory for power up transactions to avoid user error.

golos.api.Number = typing.Union[decimal.Decimal, float, int, str]

Number is a shorthand type alias to represent numbers in various types - which can be either Decimal, float, int, or str

golos.api.resolve_body_ru(body)[source]