mirror fixes

This commit is contained in:
Tim
2024-04-03 21:38:30 -04:00
parent f736b13332
commit 34359155e1

View File

@@ -13,7 +13,6 @@ polling = [seconds between price updates. If zero or negative, prices are update
import asyncio import asyncio
import itertools
import logging import logging
import os import os
from datetime import timedelta from datetime import timedelta
@@ -59,6 +58,7 @@ async def get_token_info( token ):
if token not in _token_infos: if token not in _token_infos:
t = ERC20(token) t = ERC20(token)
name, symbol, decimals = await asyncio.gather(t.name(), t.symbol(), t.decimals()) name, symbol, decimals = await asyncio.gather(t.name(), t.symbol(), t.decimals())
log.debug(f'original token: {name} {symbol} .{decimals} {token}')
_token_infos[token] = [token, name, symbol, decimals] _token_infos[token] = [token, name, symbol, decimals]
return _token_infos[token] return _token_infos[token]
@@ -144,45 +144,39 @@ async def main():
return return
mirrorenv = ContractProxy(mirror_addr, 'MirrorEnv') mirrorenv = ContractProxy(mirror_addr, 'MirrorEnv')
pool_infos = await asyncio.gather(*[get_pool_info(pool) for pool in pools]) pool_infos = [await get_pool_info(pool) for pool in pools]
tokens = set(i[1] for i in pool_infos).union(i[2] for i in pool_infos) tokens = set(i[1] for i in pool_infos).union(i[2] for i in pool_infos)
log.debug(f'Mirroring tokens') log.debug(f'Mirroring tokens')
token_infos = await asyncio.gather(*[get_token_info(t) for t in tokens], return_exceptions=True) txs = []
for token, x in zip(tokens, token_infos): for t in tokens:
if isinstance(x, Exception): info = await get_token_info(t)
log.error(f'Failed to mirror token {token}: {x}') try:
tx = await mirrorenv.transact.mirrorToken(info, gas=LOTSA_GAS)
except Exception:
log.exception(f'Failed to mirror token {t}')
exit(1) exit(1)
txs = await asyncio.gather(*[mirrorenv.transact.mirrorToken(info, gas=LOTSA_GAS) for info in token_infos], return_exceptions=True) txs.append(tx.wait())
for token, x in zip(tokens, txs): await asyncio.gather(*txs)
if isinstance(x, Exception):
log.error(f'Failed to mirror token {token}: {x}')
exit(1)
await asyncio.gather(*[tx.wait() for tx in txs])
log.info('Tokens deployed') log.info('Tokens deployed')
# for token in tokens:
# # log.debug(f'Mirroring token {token}')
# info = await get_token_info(token)
# tx = await mirrorenv.transact.mirrorToken(info, gas=LOTSA_GAS)
# await tx.wait()
# log.debug(f'Mirrored token {token}')
log.debug(f'Mirroring pools {", ".join(pools)}') log.debug(f'Mirroring pools {", ".join(pools)}')
to_mirror = list(pool_infos) txs = []
while to_mirror: for pool, info in zip(pools, pool_infos):
results = await asyncio.gather(*[(await mirrorenv.transact.mirrorPool(info, gas=LOTSA_GAS)).wait() try:
for info in to_mirror], return_exceptions=True) tx = await mirrorenv.transact.mirrorPool(info, gas=LOTSA_GAS)
pool_exceptions = [(p,r) for p,r in zip(to_mirror,results) if isinstance(r,Exception)] except Exception:
for p,r in pool_exceptions: log.exception(f'Failed to mirror pool {pool}')
log.error(f'Error mirroring {p}: {r}') exit(1)
to_mirror = [p for p,r in pool_exceptions] txs.append(tx.wait())
if to_mirror: await asyncio.gather(*txs)
await asyncio.sleep(delay) log.info('Pools deployed')
mirror_pools = [] mirror_pools = []
# log.debug(f'Getting pool info {" ".join(pools)}') # log.debug(f'Getting pool info {" ".join(pools)}')
for pool in pools: for pool in pools:
mirror_addr, mirror_inverted = await mirrorenv.pools(pool) mirror_addr, mirror_inverted = await mirrorenv.pools(pool)
if mirror_inverted == ADDRESS_0: if mirror_addr == ADDRESS_0:
raise ValueError(f'Pool {pool} was not successfully mirrored') raise ValueError(f'Pool {pool} was not successfully mirrored')
log.debug(f'\t{pool} => {mirror_addr} inverted={mirror_inverted}') log.debug(f'\t{pool} => {mirror_addr} inverted={mirror_inverted}')
mirror_pools.append((mirror_addr, mirror_inverted)) mirror_pools.append((mirror_addr, mirror_inverted))
@@ -191,7 +185,7 @@ async def main():
if update_once: if update_once:
log.info(f'Updating pools once') log.info(f'Updating pools once')
else: else:
log.info(f'Updating pools every {delay} seconds') log.info(f'Updating a pool every {delay} seconds')
delay = timedelta(seconds=delay) delay = timedelta(seconds=delay)
to_update = pools to_update = pools
pool_iter = iter(to_update) pool_iter = iter(to_update)