mirror fixes
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user