Source code for pystraksexplorer
import requests
import sys
[docs]class StraksExplorer:
def __init__(self, api_base='https://api.straks.info/v2/'):
if sys.version_info[0] < 3:
if api_base == 'https://api.straks.info/v2/':
api_base = api_base.replace('https', 'http')
self.api_base = api_base
self.cmc_base = 'https://api.coinmarketcap.com/v1/'
""" Blockchain Data """
[docs] def get_latest_block(self):
"""
Fetch the latest blockchain statistics
:endpoint: /statistics/latest
:return: latest straks block in json object
"""
return requests.get(self.api_base + 'statistics/latest').json()
[docs] def get_difficulty(self):
"""
Fetch block difficulty
:endpoint: /raw/difficulty
:return: the current difficulty on the network
"""
return requests.get(self.api_base + 'raw/difficulty').json()
[docs] def get_total_supply(self):
"""
Fetch coin supply
:endpoint: /raw/totalSupply
:return: the total supply
"""
return requests.get(self.api_base + 'raw/totalSupply').json()
[docs] def get_circulating_supply(self):
"""
Fetch circulating supply
:endpoint: /raw/totalSupply
:return: the circulating supply
"""
return requests.get(self.api_base + 'raw/circSupply').json()
""" Block Data """
[docs] def get_blocks(self, limit, page):
"""
Fetch a list of recent blocks
:param int limit: Blocks to return per page
:param int page: Page number to return
:endpoint: /blocks?limit={limit}&page={page}
:return: blocks
"""
return requests.get(self.api_base + 'blocks?limit=%s&page=%s'%(limit, page)).json()
[docs] def get_block_from_block_hash(self, block_hash):
"""
Fetch block data for given blockhash
:param string block hash: Block hash to lookup
:endpoint: /blocks/{blockHash}
:return: block
"""
return requests.get(self.api_base + 'block/%s'%(block_hash)).json()
[docs] def get_block_hash_from_block_height(self, block_height):
"""
Fetch block hash for given block height
:param int block height: Block height to lookup
:endpoint: /blocks-index/{blockHeight}
:return: block hash
"""
return requests.get(self.api_base + 'block-index/%s'%(block_height)).json()
[docs] def get_raw_block_from_block_hash(self, block_hash):
"""
Fetch raw block data for given block hash
:param string block_hash: the block height to retrieve a block from
:endpoint: /rawblock/{blockHash}
:return: raw block
"""
return requests.get(self.api_base + 'rawblock/%s'%(block_hash)).json()
[docs] def get_raw_block_from_block_height(self, block_height):
"""
Fetch raw block data for given block height
:param string block_height: the block height to retrieve a block from
:endpoint: /rawblock/{blockHeight}
:return: raw block
"""
return requests.get(self.api_base + 'rawblock/%s'%(block_height)).json()
""" Transaction Data """
[docs] def get_transcation_data_from_transaction_hash(self, transaction_hash, summary=0):
"""
Fetch transaction data for given transaction hash
:param string transcation_hash: Transaction hash to lookup
:param int summary: Group input/output amounts by address / 0 = no, 1 = yes / Default 0
:endpoint: /tx/{transactionHash}?summary={summary}
:return: transaction data
"""
return requests.get(self.api_base + 'tx/%s?%s'%(transaction_hash, summary)).json()
[docs] def get_transactions_from_blockhash(self, block_hash, page, limit, summary=0):
"""
Fetch all transactions associated with given blockhash
:param string block_hash: Block hash to lookup
:param int page: Page number
:param int limit: Records per page
:param int summary: Ignore inputs/outputs (i.e. fetch transaction header details only)
:endpoint: /txs?block={blockHash}&pageNum={page}&limit={limit}&summary={summary}
:return: transaction data
"""
return requests.get(self.api_base + 'txs?block=%s&pageNum=%s&limit=%s&summary=%s'%(block_hash, page, limit, summary)).json()
[docs] def get_transactions_from_address(self, address, page, limit, summary=0):
"""
Fetch all transactions associated with given address
:param string address: Address to lookup
:param int page: Page number
:param int limit: Records per page
:param int summary: Ignore inputs/outputs (i.e. fetch transaction header details only)
:endpoint: /txs?address={address}&pageNum={page}&limit={limit}&summary={summary}
:return: transaction data
"""
return requests.get(self.api_base + 'txs?address=%s&pageNum=%s&limit=%s&summary=%s'%(address, page, limit, summary)).json()
[docs] def get_raw_transaction_data_from_transaction_hash(self, transaction_hash):
"""
Fetch raw transaction data for given transaction hash
:param string transaction_hash: Transaction hash to lookup
:endpoint: /rawtx/{transactionHash}
:return: raw transaction data
"""
return requests.get(self.api_base + 'rawtx/%s'%(transaction_hash)).json()
""" Address Data """
[docs] def get_address_balance(self, address):
"""
Fetch raw address balance
:param string address: Wallet address
:endpoint: /addr/{address}/balance
:return: address balance
"""
return requests.get(self.api_base + 'addr/%s/balance'%(address)).json()
[docs] def get_address_total_received(self, address):
"""
Fetch raw address total received
:param string address: Wallet address
:endpoint: /addr/{address}/totalReceived
:return: total received
"""
return requests.get(self.api_base + 'addr/%s/totalReceived'%(address)).json()
[docs] def get_address_total_sent(self, address):
"""
Fetch raw address total sent
:param string address: Wallet address
:endpoint: /addr/{address}/totalSent
:return: total sent
"""
return requests.get(self.api_base + 'addr/%s/totalSent'%(address)).json()
""" General purpose Data """
[docs] def get_richlist(self, limit=100):
"""
Fetch richlist
:param int limit: limit of richlist entries to return
:endpoint: /richlist?limit={limit}
:return: richlist
"""
return requests.get(self.api_base + 'richlist?limit=%s'%(limit)).json()
[docs] def get_masternodes(self, status, page, limit):
"""
Fetch masternodes
:param string status: Either enabled, vin_spent, expired or remove. Leave blank for all.
:param int page: Page number
:param int limit: Records per page
:endpoint: /masternodes?status={status}&limit={limit}&page={page}
:return: masternode list
"""
return requests.get(self.api_base + 'masternodes?status=%s&limit=%s&page=%s'%(status, limit, page)).json()
""" Chart Data """
[docs] def get_difficulty_chart(self, days=1):
"""
Fetch difficulty chart
:param string days: Total days to fetch. Default 1 / Max 7
:endpoint: /charts/difficulty?days={days}
:return: difficulty chart data
"""
return requests.get(self.api_base + 'charts/difficulty?days=%s'%(days)).json()
[docs] def get_hashrate_chart(self, days=1):
"""
Fetch hashrate chart data
:param string days: Total days to fetch. Default 1 / Max 7
:endpoint: /charts/hashrate?days={days}
:return: hashrate chart data
"""
return requests.get(self.api_base + 'charts/hashrate?days=%s'%(days)).json()
[docs] def get_transaction_chart(self, days=1):
"""
Fetch transaction chart data
:param string days: Total days to fetch. Default 1 / Max 7
:endpoint: /charts/transactions?days={days}
:return: transaction chart data
"""
return requests.get(self.api_base + 'charts/transactions?days=%s'%(days)).json()
""" Price / Exchange Data """
[docs] def cmc_ticker(self, coin='STRAKS', currency='USD'):
"""
Fetch current ticker of {coin} in the specified {currency} from coinmarketcap api
:param string currency: The currency code to return the results in
:apisource: api.coinmarketcap.com
:endpoint: /v1/ticker/straks/?convert={currency}
:return: ticker
"""
return requests.get(self.cmc_base + 'ticker/%s/?convert=%s'%(coin, currency)).json()[0]