Skip to content

Instantly share code, notes, and snippets.

@barnabee
Last active December 20, 2021 17:22
Show Gist options
  • Save barnabee/341858be538be3823977c69be3061b3f to your computer and use it in GitHub Desktop.
Save barnabee/341858be538be3823977c69be3061b3f to your computer and use it in GitHub Desktop.
Simple iOS widget with Pyto to display Vega reward pool status
from datetime import datetime, timedelta
import math
import widgets as wd
import datetime as dt
import requests
VEGA_TOKEN_ASSET_ID = 'd1984e3d365faa05bcafbe41f50f90e3663ee7c0da22bb1e24b164e9532691b2'
# PAYOUT_DELAY_NETPARAM = 'reward.staking.delegation.payoutDelay'
PAYOUT_PER_EPOCH_NETPARAM = 'reward.staking.delegation.maxPayoutPerEpoch'
def get_netparam_value(key):
try:
data = requests.get('https://api.token.vega.xyz/network/parameters').json()
param = [p for p in data['networkParameters'] if p['key'] == key][0]['value']
return param
except:
return None
def get_reward_pool_balance(asset):
data = requests.get(f'https://api.token.vega.xyz/assets/{asset}/globalRewardPoolAccount').json()
balance = int(data['accounts'][0]['balance']) / 1e18
return balance
def get_current_epoch_end_ts():
data = requests.get('https://api.token.vega.xyz/epochs').json()
epoch_end = int(data['epoch']['timestamps']['expiryTime']) / 1e9
return epoch_end
def add_text(widget, text, label=None, text_size=14, label_size=12):
text_control = wd.Text(text=text)
text_control.font = wd.Font.bold_system_font_of_size(test_size)
layouts = [widget.small_layout, widget.medium_layout, widget.large_layout]
if label:
label_control = wd.Text(text=label)
label_control.font = wd.Font.system_font_of_size(label_size)
else:
label_control = None
for layout in layouts:
if label_control: layout.add_row([label_control])
layout.add_row([text_control])
class TimelineProvider(wd.TimelineProvider):
def timeline(self):
return [dt.datetime.now()]
def widget(self, date):
widget = wd.Widget()
wd.wait_for_internet_connection()
reward_pool_balance = get_reward_pool_balance(VEGA_TOKEN_ASSET_ID)
# payout_delay = get_netparam_value(PAYOUT_DELAY_NETPARAM)
payout_delay = 3 # fudge until fix is in where this net param is observed
payout_per_epoch = int(get_netparam_value(PAYOUT_PER_EPOCH_NETPARAM)) / 1e18
real_balance = reward_pool_balance - (payout_delay * payout_per_epoch)
days_left = real_balance / payout_per_epoch
rewards_end = datetime.fromtimestamp(get_current_epoch_end_ts()) + timedelta(days=math.floor(days_left))
add_text(widget, f'{reward_pool_balance:.2f}', 'Reward pool')
add_text(widget, '', text_size=4)
add_text(widget, f'{real_balance:.2f}', 'Unallocated')
add_text(widget, '', text_size=4)
add_text(widget, f'{rewards_end.strftime("%d/%m/%y %H:%M")}', 'Funded until')
wd.schedule_next_reload(120)
return widget
wd.provide_timeline(TimelineProvider())
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment