Last active
December 20, 2021 17:22
-
-
Save barnabee/341858be538be3823977c69be3061b3f to your computer and use it in GitHub Desktop.
Simple iOS widget with Pyto to display Vega reward pool status
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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