dealing with async

This commit is contained in:
anon 2022-09-15 17:10:18 -03:00
parent 50be85bfbe
commit 8d6c010ebc
5 changed files with 197 additions and 171 deletions

View file

@ -221,7 +221,7 @@
<div class="icon-box mt-4 mt-xl-0">
<i class="bx bx-stats"></i>
<h4>Monero a une faible inflation</h4>
<p>L'inflation annuelle actuelle n'est que de {{ now_inflation }} et diminue constamment jusqu'à ce
<p>L'inflation annuelle actuelle n'est que de {{ inflation }} et diminue constamment jusqu'à ce
que les émissions "de queue" commencent vers 2022. Il n'y avait pas de
prémine ou ICO et toutes les pièces ont été extraites équitablement depuis 2014.
</p>
@ -529,7 +529,7 @@
de valider toutes les transactions sur le réseau.
En faisant cela, toute cette puissance de traitement
est utilisée pour garantir une émission équitable de nouvelles pièces
(ce qui provoque une inflation annuelle décroissante de {{now_inflation}}) et pour
(ce qui provoque une inflation annuelle décroissante de {{inflation}}) et pour
protéger votre argent
des pirates informatiques. Monero a une inflation
décroissante qui finira par tendre vers zéro, et parce qu'une faible
@ -616,8 +616,8 @@
d'une forme de revenu financier qu'ils reçoivent pour leur service.
Depuis au
au début (2014), il n'y avait pas de pièces en
circulation, l'inflation était élevée. Maintenant qu'il y a {{now_units}}
unités en circulation, l'inflation annuelle n'est que de {{now_inflation}}.
circulation, l'inflation était élevée. Maintenant qu'il y a {{supply}}
unités en circulation, l'inflation annuelle n'est que de {{inflation}}.
Le paiement par bloc diminue avec le temps, de même
que le taux d'inflation annuel diminuera lentement vers zéro. La
demande d'argent dur fongible, numérique et axé sur la confidentialité

View file

@ -193,7 +193,7 @@
<div class="icon-box mt-4 mt-xl-0">
<i class="bx bx-stats"></i>
<h4>Monero has low inflation</h4>
<p>The current annual inflation is only {{ now_inflation }} and is constantly decreasing until "tail"
<p>The current annual inflation is only {{ inflation }} and is constantly decreasing until "tail"
emission kicks in around 2022. There was no premine
or ICOs and all coins have been mined fairly since 2014.
</p>
@ -417,7 +417,7 @@
Many people leave their computers "mining" it, which means they lend their PC's processing power in
order to validate all transactions on the network.
By doing this, all this processing power is used to guarantee fair emission of new coins (which causes
the decreasing annual inflation of {{ now_inflation }}) and to protect your money
the decreasing annual inflation of {{ inflation }}) and to protect your money
from hackers. Monero has a decreasing inflation that will eventually tend to zero, and because low
inflation leads to scarcity, it works as a store of value, just like Gold or Bitcoin.
Differently from Bitcoin, though, Monero has full privacy, which means it hides your balance and your
@ -473,7 +473,7 @@
receive coins based on how much work they put into validating and defending the network, so it is a form
of financial revenue they get for their service. Since at the
beginning (2014) there were no coins in circulation, inflation was high. Now that there are {{
now_units}} units in circulation, the annual inflation is just {{ now_inflation }}.
supply}} units in circulation, the annual inflation is just {{ inflation }}.
The payout per block decreases over time, and so will the the annual inflation rate slowly decrease
towards zero. The demand for fungible, digital, privacy-oriented hard money will likely skyrocket
in the next few years and outpace its inflation, so investors expect a considerable rise in prices.

View file

@ -204,7 +204,7 @@
<div class="icon-box mt-4 mt-xl-0">
<i class="bx bx-stats"></i>
<h4>Monero tem inflação baixa</h4>
<p>A inflação anual atual é de apenas {{ now_inflation }} e está diminuindo constantemente até que a emissão "residual" comece por volta de 2022.
<p>A inflação anual atual é de apenas {{ inflation }} e está diminuindo constantemente até que a emissão "residual" comece por volta de 2022.
Não houve moedas mineradas de maneira desleal em seu início, sendo todas mineradas de forma justa desde 2014.
</p>
</div>
@ -422,7 +422,7 @@
Nunca houve uma pré-mineração em Monero. Isso significa que ninguém controla grandes quantidades de moedas, uma vez que todas as moedas geradas
sempre foram distribuídas para os mineradores que trabalhassem honestamente. Os mineradores recebem moedas com base em quanto trabalho eles colocam
em validar e defender a rede, portanto, é uma forma de receita financeira que eles obtêm por seus serviços. No início (2014) não havia moedas em
circulação, a inflação era elevada. Hoje existem {{ now_units }} unidades em circulação, a inflação anual é de apenas {{ now_inflation}}.
circulação, a inflação era elevada. Hoje existem {{ supply }} unidades em circulação, a inflação anual é de apenas {{ inflation}}.
O pagamento por bloco diminui ao longo do tempo, e também a taxa de inflação anual diminuirá lentamente até chegar a zero.
A demanda por dinheiro fungível, digital e voltado para a privacidade provavelmente disparará nos próximos anos e ultrapassará a inflação, fazendo com que
provavelmente haja uma apreciação desse ativo.

View file

@ -34,90 +34,70 @@ locale.setlocale(locale.LC_ALL, 'en_US.utf8')
# This loads Reddit stats about a subreddit
api = PushshiftAPI()
##########################################
# Asynchronous get block data
##########################################
async def get_block_data(session, block: str):
url = 'https://xmrchain.net/api/block/' + block
async with session.get(url) as res:
data = await res.read()
data = json.loads(data)
data['provider'] = 'block_data_xmrchain'
if res.status < 299:
data['success'] = True
else:
data['success'] = False
return data
##########################################
# Asynchronous get network data
##########################################
async def get_network_data(session, block: str):
url = 'https://xmrchain.net/api/networkinfo'
async with session.get(url) as res:
data = await res.read()
data = json.loads(data)
data['provider'] = 'network_data_xmrchain'
if res.status < 299:
data['success'] = True
else:
data['success'] = False
return data
##########################################
# Asynchronous get coinmarketcap data
##########################################
async def get_coinmarketcap_data(session, symbol: str, convert: str):
with open("settings.json") as file:
data = json.load(file)
file.close()
url = data["metrics_provider"][0]["price_url_old"] + symbol
parameters = {'convert': convert,}
headers = {'Accepts': 'application/json', data["metrics_provider"][0]["api_key_name"]: data["metrics_provider"][0]["api_key_value"],}
async with session.get(url, headers=headers, params=parameters) as res:
data = await res.read()
data = json.loads(data)
data['provider'] = 'coinmarketcap'
if res.status < 299:
try:
if data['data'][symbol.upper()]['cmc_rank']:
data['success'] = True
else:
data['success'] = False
except:
data['success'] = False
else:
data['success'] = False
return data
###########################################
# Useful functions for admins
###########################################
# Add manually a new entrance for coin
# To be used when there's a problem with the API
async def get_monero_data():
data = get_latest_price('xmr')
data_aux = get_latest_price('btc')
if not(data):
print('error updating rank')
return False
else:
name = 'xmr'
date_aux = date.today() - timedelta(1)
date_aux = datetime.datetime.strftime(date_aux, '%Y-%m-%d')
date_aux2 = date.today() - timedelta(2)
date_aux2 = datetime.datetime.strftime(date_aux2, '%Y-%m-%d')
supply = int(data['data']['XMR']['circulating_supply'])
priceusd = float(data['data']['XMR']['quote']['USD']['price'])
pricebtc = float(data['data']['XMR']['quote']['USD']['price'])/float(data_aux['data']['BTC']['quote']['USD']['price'])
try:
coin = Coin.objects.filter(name='xmr').get(date=date_aux)
except:
return False
inflation = 100*365*(float(supply - coin.supply))/float(coin.supply)
stocktoflow = (100/inflation)**1.65
url = 'https://xmrchain.net/api/networkinfo'
response = requests.get(url)
data = json.loads(response.text)
difficulty = int(data['data']['difficulty'])
hashrate = int(data['data']['hash_rate'])
height = int(data['data']['height'])
##########################################
# Asynchronous
##########################################
actions = []
my_timeout = aiohttp.ClientTimeout(
total=5,
sock_connect=10,
sock_read=5
)
client_args = dict(
trust_env=True,
timeout=my_timeout
)
async with aiohttp.ClientSession(**client_args) as session:
for count in range(1, 1500):
block = str(height - count)
print(block)
actions.append(asyncio.ensure_future(get_block(session, block)))
try:
responses = await asyncio.gather(*actions, return_exceptions=True)
except asyncio.exceptions.TimeoutError:
print('Timeout!')
for response in responses:
try:
print(datetime.datetime.strptime(response['data']['timestamp_utc'], '%Y-%m-%d %H:%M:%S'))
except:
print('error')
return True
##########################################
# Asynchronous get block data
##########################################
async def get_block(session, block: str):
url = 'https://xmrchain.net/api/block/' + block
async with session.get(url) as res:
if res.status < 299:
data = await res.read()
data = json.loads(data)
return data
else:
return False
@login_required
def add_coin(request):
if request.user.username != "Administrador" and request.user.username != "Morpheus":
@ -1126,13 +1106,12 @@ def update_dominance(data):
else:
print('spreadsheet already with the latest data')
return False
#print('updated')
return data
# Get latest rank value and update
def update_rank():
data = get_latest_price('xmr')
def update_rank(data=None):
if not(data):
data = get_latest_price('xmr')
if not(data):
print('error updating rank')
return False
@ -1163,7 +1142,6 @@ def update_rank():
print('spreadsheet already with the latest data')
return data
#print('updated')
return data
# Load Reddit api to check if there are new followers
@ -1635,56 +1613,61 @@ def update_p2pool():
async def index(request):
if request.user.username != "Administrador" and request.user.username != "Morpheus":
update_visitors(True)
###################################################################################
data = get_latest_price('xmr')
data_aux = get_latest_price('btc')
if not(data):
print('error updating')
return False
else:
name = 'xmr'
yesterday = date.today() - timedelta(1)
dt = datetime.datetime.now(timezone.utc).timestamp()
symbol = 'xmr'
###################################################################################
coins = Coin.objects.filter(name=symbol).order_by('-date')
supply = 0
if coins:
for coin in coins:
if coin.supply > 0:
supply = coin.supply
inflation = coin.inflation
break
if supply == 0:
message = 'Website under maintenance. Check back in a few minutes'
context = {'message': message}
return render(request, 'charts/maintenance.html', context)
###################################################################################
url = 'https://xmrchain.net/api/networkinfo'
response = requests.get(url)
data = json.loads(response.text)
height = int(data['data']['height'])
difficulty = int(data['data']['difficulty'])
hashrate = int(data['data']['hash_rate'])
blocksize = 0
name = 'xmr'
yesterday = date.today() - timedelta(1)
##########################################
# Asynchronous
##########################################
if yesterday > coin.date:
yesterday = datetime.datetime.strftime(yesterday, '%Y-%m-%d')
supply = int(data['data']['XMR']['circulating_supply'])
priceusd = float(data['data']['XMR']['quote']['USD']['price'])
pricebtc = float(data['data']['XMR']['quote']['USD']['price'])/float(data_aux['data']['BTC']['quote']['USD']['price'])
try:
coins = Coin.objects.filter(name='xmr').order_by('-date')
for coin in coins:
if coin.supply > 0:
break
except:
return False
inflation = 100*365*(float(supply - coin.supply))/float(coin.supply)
stocktoflow = (100/inflation)**1.65
url = 'https://xmrchain.net/api/networkinfo'
response = requests.get(url)
data = json.loads(response.text)
difficulty = int(data['data']['difficulty'])
hashrate = int(data['data']['hash_rate'])
height = int(data['data']['height'])
##########################################
# Asynchronous
##########################################
actions = []
my_timeout = aiohttp.ClientTimeout(
total=5,
total=10,
sock_connect=10,
sock_read=5
sock_read=10
)
client_args = dict(
trust_env=True,
timeout=my_timeout
)
blocksize = 0
async with aiohttp.ClientSession(**client_args) as session:
for count in range(1, 1000):
for count in range(1, 1400):
block = str(height - count)
actions.append(asyncio.ensure_future(get_block(session, block)))
actions.append(asyncio.ensure_future(get_block_data(session, block)))
actions.append(asyncio.ensure_future(get_coinmarketcap_data(session, 'xmr', 'USD')))
actions.append(asyncio.ensure_future(get_coinmarketcap_data(session, 'xmr', 'BTC')))
try:
responses = await asyncio.gather(*actions, return_exceptions=True)
@ -1696,27 +1679,50 @@ async def index(request):
txs = 0
revenue = 0
fees = 0
priceusd = 0
pricebtc = 0
for response in responses:
try:
date_aux = response['data']['timestamp_utc'].split(' ')[0]
if date_aux == yesterday:
success += 1
blocksize += int(response['data']['size'])
for tx in response['data']['txs']:
if tx['coinbase']:
revenue += int(tx['xmr_outputs'])
else:
txs += 1
fees += int(tx['tx_fee'])
revenue += int(tx['tx_fee'])
except:
if response:
try:
if response['provider'] == 'block_data_xmrchain':
date_aux = response['data']['timestamp_utc'].split(' ')[0]
if date_aux == yesterday:
success += 1
try:
blocksize += int(response['data']['size'])
for tx in response['data']['txs']:
if tx['coinbase']:
revenue += int(tx['xmr_outputs'])
else:
txs += 1
fees += int(tx['tx_fee'])
revenue += int(tx['tx_fee'])
except:
errors += 1
if response['provider'] == 'coinmarketcap':
try:
priceusd = float(response['data']['XMR']['quote']['USD']['price'])
update_rank(response)
update_dominance(response)
except:
try:
pricebtc = float(response['data']['XMR']['quote']['BTC']['price'])
except:
errors += 1
except:
errors += 1
else:
errors += 1
blocksize = blocksize/success
revenue = float(revenue)/10**12
fees = float(fees)/10**12
inflation = 100*365*(revenue)/float(coin.supply)
stocktoflow = (100/inflation)**1.65
supply = coin.supply + revenue
print('Name: ' + name)
print('Date: ' + str(yesterday))
print('Success: ' + str(success))
print('Errors: ' + str(errors))
@ -1731,42 +1737,33 @@ async def index(request):
print('Priceusd: ' + str(priceusd))
print('Pricebtc: ' + str(pricebtc))
print('Supply: ' + str(supply))
print('Inflation: ' + str(inflation))
print('Inflation: ' + str(inflation))
try:
coin = Coin()
coin.name = name
coin.date = datetime.datetime.strptime(yesterday, '%Y-%m-%d')
coin.blocksize = blocksize
coin.transactions = txs
coin.revenue = revenue
coin.fee = fees
coin.inflation = inflation
coin.hashrate = hashrate
coin.difficulty = difficulty
coin.stocktoflow = stocktoflow
coin.priceusd = priceusd
coin.pricebtc = pricebtc
coin.supply = supply
coin.save()
except:
pass
###################################################################################
dt = datetime.datetime.now(timezone.utc).timestamp()
symbol = 'xmr'
try:
rank = list(Rank.objects.order_by('-date'))[0]
except:
message = 'Page under maintenance. Check back in a few minutes.'
context = {'message': message}
return render(request, 'charts/maintenance.html', context)
if rank.date < date.today():
data = update_rank()
update_dominance(data)
coin = list(Coin.objects.filter(name=symbol).order_by('-date'))[0]
if coin:
now_inflation = coin.inflation
supply = int(coin.supply)*10**12
now_units = supply/(10**12)
else:
message = 'Website under maintenance. Check back in a few minutes'
context = {'message': message}
return render(request, 'charts/maintenance.html', context)
now_units = locale.format('%.0f', now_units, grouping=True)
now_inflation = locale.format('%.2f', now_inflation, grouping=True)+'%'
supply = locale.format('%.0f', supply, grouping=True)
inflation = locale.format('%.2f', inflation, grouping=True)+'%'
dt = 'index.html ' + locale.format('%.2f', datetime.datetime.now(timezone.utc).timestamp() - dt, grouping=True)+' seconds'
print(dt)
context = {'now_inflation': now_inflation, 'now_units': now_units}
context = {'inflation': inflation, 'supply': supply}
return render(request, 'charts/index.html', context)
def pt(request):

View file

@ -1,21 +1,50 @@
aiohttp==3.8.1
aiosignal==1.2.0
asgiref==3.3.1
async-timeout==4.0.2
attrs==22.1.0
beautifulsoup4==4.9.3
cachetools==5.2.0
certifi==2020.12.5
chardet==4.0.0
charset-normalizer==2.1.1
click==8.1.3
dj-database-url==0.5.0
dj-static==0.0.6
Django==3.1.7
django-bootstrap4==2.3.1
feedparser==6.0.10
frozenlist==1.3.1
google-api-core==2.8.1
google-api-python-client==2.49.0
google-auth==2.6.6
google-auth-httplib2==0.1.0
google-auth-oauthlib==0.5.1
googleapis-common-protos==1.56.2
gunicorn==20.0.4
httplib2==0.20.4
idna==2.10
multidict==6.0.2
numpy==1.20.1
oauthlib==3.2.0
pandas==1.2.3
protobuf==3.20.1
psaw==0.1.0
psycopg2-binary==2.8.6
pyasn1==0.4.8
pyasn1-modules==0.2.8
pygsheets==2.0.5
pyparsing==3.0.9
python-dateutil==2.8.1
pytz==2021.1
requests==2.25.1
requests-oauthlib==1.3.1
rsa==4.8
sgmllib3k==1.0.0
six==1.15.0
soupsieve==2.2
sqlparse==0.4.1
static3==0.7.0
uritemplate==4.1.1
urllib3==1.26.3
yarl==1.8.1