import logging import requests from time import time from tipbot.db import User from tipbot.helpers.decorators import wallet_rpc_required, log_event, check_debug from tipbot import wownero from tipbot import config @log_event @check_debug def mine(update, context): # Check that enough arguments were provided if len(context.args) < 1: update.message.reply_text('Not enough arguments passed. Include hash rate per second to estimate.') return False # Check that hash rate arg is an actual number try: hr = float(context.args[0]) except: update.message.reply_text('Invalid hashrate provided') return False # Run the numbers, tell the user try: payload = {'jsonrpc':'2.0', 'id':'0', 'method':'getlastblockheader'} headers = {'Content-Type':'application/json'} r = requests.post(config.DAEMON_URI + '/json_rpc', json=payload, headers=headers, timeout=5) r.raise_for_status() j = r.json() diff = float(j['result']['block_header']['difficulty']) lbr = float(j['result']['block_header']['reward']) ttb = diff / hr update.message.reply_text('The estimated time to find a block with {0:.2f} kH/s at diff {1:.2e} is {2:.2f} days. On average you will earn {3:.2f} WOW per day'.format( hr/1e3, diff, ttb/(60*60*24), (lbr/1e11)/(ttb/(60*60*24)) )) except: update.message.reply_text('Something b0rked -_-') return False @log_event @check_debug def mempool(update, context): try: payload = {'jsonrpc':'2.0', 'id':'0', 'method':'get_info'} headers = {'Content-Type':'application/json'} r = requests.post(config.DAEMON_URI + '/json_rpc', json=payload, headers=headers, timeout=5) r.raise_for_status() j = r.json() txs = j['result']['tx_pool_size'] update.message.reply_text('The current number of transactions in mempool is: {0}'.format(txs)) except: update.message.reply_text('Something borked -_-') @log_event @check_debug def network(update, context): try: payload = {'jsonrpc':'2.0', 'id':'0', 'method':'get_info'} headers = {'Content-Type':'application/json'} r = requests.post(config.DAEMON_URI + '/json_rpc', json=payload, headers=headers, timeout=5) r.raise_for_status() j = r.json() height = j['result']['height'] diff = j['result']['difficulty'] hashrate = float(diff)/120 update.message.reply_text('The current block height is {0:,}. Difficulty is {1:,}. Hashrate is {2:.2f} Mh/s.'.format( height, diff, hashrate/1e6 )) except: update.message.reply_text('Something borked -_-') @log_event @check_debug def price(update, context): try: data = { 'localization': False, 'tickers': False, 'market_data': True, 'community_data': False, 'developer_data': False, 'sparkline': False } headers = {'accept': 'application/json'} url = 'https://api.coingecko.com/api/v3/coins/wownero' r = requests.get(url, headers=headers, data=data, timeout=5) r.raise_for_status() j = r.json() mcap = j['market_cap_rank'] sats = j['market_data']['current_price']['btc'] mname = j['tickers'][0]['market']['name'] volbtc = j['tickers'][0]['converted_volume']['btc'] tgt = j['tickers'][0]['target'] bse = j['tickers'][0]['base'] update.message.reply_text(f'{tgt}-{bse} is {sats:.8f} {tgt} on {mname} with {volbtc:.2f} {tgt} volume. Currently market cap rank #{mcap}.') except: update.message.reply_text('Something borked -_-') @log_event @check_debug def lastblock(update, context): try: payload = {'jsonrpc':'2.0', 'id':'0', 'method':'get_last_block_header'} headers = {'accept': 'application/json'} r = requests.post(config.DAEMON_URI + '/json_rpc', json=payload, headers=headers, timeout=5) r.raise_for_status() j = r.json() block = j['result']['block_header'] update.message.reply_text('Last block found {0:.2f} minutes ago with height {1} included {2} transactions'.format(( time() - float(block['timestamp']))/60, block['height'], block['num_txes'] )) except: update.message.reply_text('Something borked -_-')