metadata-alpha.json, elaborate_metadata.py

This commit is contained in:
Tim
2024-04-03 16:26:13 -04:00
parent 3685930d55
commit 1eacc7de4e
5 changed files with 67 additions and 1 deletions

View File

@@ -0,0 +1,41 @@
# Reads the configured metadata.json file and fills in any missing fields using blockchain data. Prints
# the completed metadata.json file to stdout
#
# see metadata.py
import asyncio
import logging
import sys
from dexorder import config, blockchain
from dexorder.blockstate import current_blockstate
from dexorder.blockstate.state import FinalizedBlockState
from dexorder.configuration import parse_args
from dexorder.metadata import generate_metadata, get_metadata
from dexorder.pools import get_pool
from dexorder.tokens import get_token
log = logging.getLogger(__name__)
async def main():
logging.basicConfig(level=logging.INFO, stream=sys.stderr)
logging.getLogger('dexorder').setLevel(logging.DEBUG)
parse_args()
current_blockstate.set(FinalizedBlockState())
await blockchain.connect()
if not config.metadata:
log.error("Must configure a metadata file")
exit(1)
tokens = []
pools = []
for chain_id_str, chain_data in get_metadata().items():
for token in chain_data.get('t',[]):
log.debug(f'elaborating token {token}')
tokens.append(await get_token(token['a']))
for pool in chain_data.get('p',[]):
log.debug(f'elaborating pool {pool}')
pools.append(await get_pool(pool['a']))
generate_metadata(tokens, pools)
if __name__ == '__main__':
asyncio.run(main())

View File

@@ -93,8 +93,11 @@ class BlockStateRunner(BlockProgressor):
await async_yield()
except (ConnectionClosedError, TimeoutError, asyncio.TimeoutError) as e:
log.debug(f'runner timeout {e}')
except ConnectionRefusedError:
log.warning(f'Could not connect to websocket {config.ws_url}')
await asyncio.sleep(1)
except Exception:
log.exception(f'Unhandled exception during run_polling()')
log.exception(f'Unhandled exception during run_ws()')
finally:
# noinspection PyBroadException
try:

View File

@@ -14,6 +14,7 @@ from dexorder.metadata import get_metadata
log = logging.getLogger(__name__)
# todo needs chain_id
async def get_token(address) -> Optional[TokenDict]:
if address == ADDRESS_0:
raise ValueError('No token at address 0')