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