generate_metadata.py obeys approvals; filtered metadata-arb1.json 49kB
This commit is contained in:
File diff suppressed because one or more lines are too long
@@ -1,13 +1,13 @@
|
||||
# Prints a JSON string to stdout containing metadata information for all the known tokens and pools
|
||||
#
|
||||
# see metadata.py
|
||||
|
||||
import asyncio
|
||||
import logging
|
||||
import sys
|
||||
|
||||
from sqlalchemy import select
|
||||
|
||||
from dexorder import db, ADDRESS_0
|
||||
from dexorder import db, ADDRESS_0, config, blockchain
|
||||
from dexorder.configuration import parse_args
|
||||
from dexorder.database.model import Pool, Token
|
||||
from dexorder.metadata import generate_metadata
|
||||
@@ -15,15 +15,20 @@ from dexorder.metadata import generate_metadata
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def main():
|
||||
async def main():
|
||||
logging.basicConfig(level=logging.INFO, stream=sys.stderr)
|
||||
log.setLevel(logging.DEBUG)
|
||||
parse_args()
|
||||
await blockchain.connect()
|
||||
db.connect(migrate=False)
|
||||
tokens = db.session.scalars(select(Token))
|
||||
pools = db.session.scalars(select(Pool).where(Pool.base!=ADDRESS_0 and Pool.quote!=ADDRESS_0))
|
||||
if config.metadata:
|
||||
with open(config.metadata, 'w') as file:
|
||||
generate_metadata(tokens, pools, file=file)
|
||||
else:
|
||||
generate_metadata(tokens, pools)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
asyncio.run(main())
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
#
|
||||
import logging
|
||||
import sys
|
||||
from typing import Union, Iterable
|
||||
from typing import Union, Iterable, Optional
|
||||
|
||||
from dexorder import config, NARG
|
||||
from dexorder.base.chain import current_chain
|
||||
@@ -46,20 +46,18 @@ def json_dump(out, **kwargs):
|
||||
dump(out, json.dumps(dict(**kwargs)))
|
||||
|
||||
|
||||
def dump_tokens(out, tokens):
|
||||
first = True
|
||||
def dump_tokens(out, tokens, include_unapproved=False):
|
||||
approved_addrs = set()
|
||||
had_output = False
|
||||
for token in tokens:
|
||||
token: Token
|
||||
if first:
|
||||
first = False
|
||||
else:
|
||||
dump(out, ',')
|
||||
if isinstance(token, Token):
|
||||
token: Token
|
||||
a = token.address
|
||||
n = token.name
|
||||
s = token.symbol
|
||||
d = token.decimals
|
||||
w = token.approved
|
||||
x = None
|
||||
elif 'a' in token:
|
||||
token: TokenDict
|
||||
@@ -67,6 +65,7 @@ def dump_tokens(out, tokens):
|
||||
n = token['n']
|
||||
s = token['s']
|
||||
d = token['d']
|
||||
w = token.get('w')
|
||||
x = token.get('x')
|
||||
elif 'address' in token:
|
||||
token: OldTokenDict
|
||||
@@ -74,6 +73,7 @@ def dump_tokens(out, tokens):
|
||||
n = token['name']
|
||||
s = token['symbol']
|
||||
d = token['decimals']
|
||||
w = token.get('approved')
|
||||
x = token.get('x')
|
||||
else:
|
||||
raise ValueError('Unknown token type', token)
|
||||
@@ -81,16 +81,22 @@ def dump_tokens(out, tokens):
|
||||
data = dict(a=a, n=n, s=s, d=d)
|
||||
if x is not None:
|
||||
data['x'] = x
|
||||
json_dump(out, **data)
|
||||
|
||||
|
||||
def dump_pools(out, pools):
|
||||
first = True
|
||||
for pool in pools:
|
||||
if first:
|
||||
first = False
|
||||
else:
|
||||
if w is not None:
|
||||
data['w'] = w
|
||||
approved = data.get('w', False)
|
||||
if approved:
|
||||
approved_addrs.add(a)
|
||||
if include_unapproved or approved:
|
||||
if had_output:
|
||||
dump(out, ',')
|
||||
json_dump(out, **data)
|
||||
had_output = True
|
||||
return approved_addrs
|
||||
|
||||
|
||||
def dump_pools(out, pools, filter_token_addrs: Optional[set[str]] = None):
|
||||
had_output = False
|
||||
for pool in pools:
|
||||
if isinstance(pool, Pool):
|
||||
a = pool.address
|
||||
b = pool.base
|
||||
@@ -124,7 +130,15 @@ def dump_pools(out, pools):
|
||||
data = dict(a=a, b=b, q=q, f=f, e=e, d=d)
|
||||
if x is not None:
|
||||
data['x'] = x
|
||||
if filter_token_addrs is not None:
|
||||
output = b in filter_token_addrs and q in filter_token_addrs
|
||||
else:
|
||||
output = True
|
||||
if output:
|
||||
if had_output:
|
||||
dump(out, ',')
|
||||
json_dump(out, **data)
|
||||
had_output = True
|
||||
|
||||
|
||||
generating_metadata = False
|
||||
@@ -142,11 +156,11 @@ def is_generating_metadata():
|
||||
|
||||
# noinspection PyShadowingNames
|
||||
def generate_metadata(tokens: Iterable[Union[Token, OldTokenDict]], pools: Iterable[Union[Pool, OldPoolDict]],
|
||||
file=sys.stdout):
|
||||
*, file=sys.stdout, include_unapproved=False):
|
||||
dump(file, '{"' + str(current_chain.get().id) + '":{"t":[')
|
||||
dump_tokens(file, tokens)
|
||||
approved_token_addrs = dump_tokens(file, tokens, include_unapproved)
|
||||
dump(file, '],"p":[')
|
||||
dump_pools(file, pools)
|
||||
dump_pools(file, pools, approved_token_addrs)
|
||||
dump(file, ']}}')
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user