pull/693/head
Andrey 2022-10-27 18:46:16 +03:00
rodzic 920c8941ef
commit e23fd52453
1 zmienionych plików z 207 dodań i 43 usunięć

Wyświetl plik

@ -1,5 +1,7 @@
import argparse
import datetime
from timeit import repeat
from eth_typing import Address
from moonstream.client import Moonstream
import time
import requests
@ -232,25 +234,62 @@ def init_tokenomics_queries_handler(args: argparse.Namespace):
query = """
select
sum(value),
time,
sum(value) as volume,
time as time,
count(*) as activity
from (
select (label_data->'args'->>'value')::decimal as value, to_char(to_timestamp(block_timestamp), :time_format) as time from polygon_labels
select
CASE
WHEN :type ='NFT' THEN 1
ELSE (label_data->'args'->>'value')::decimal
END as value
, to_char(to_timestamp(block_timestamp), :time_format) as time from polygon_labels
where label='moonworm-alpha'
and address='0x64060aB139Feaae7f06Ca4E63189D86aDEb51691'
and address=:address
and label_data->>'name'='Transfer'
and block_timestamp >= extract(epoch from now() - interval :time_range)::int
) interval_transfers
GROUP BY time
"""
try:
# Create
client.create_query(
token=args.moonstream_token,
name="cu-volume",
query=query,
)
except Exception as e:
print(e)
pass
# Create
client.create_query(
token=args.moonstream_token,
name="cu-voluem",
query=query,
)
# query = """
# select
# sum(value) as volume,
# time as time,
# count(*) as activity
# from (
# select
# CASE
# WHEN :type ='NFT' THEN 1
# ELSE (label_data->'args'->>'value')::decimal
# END as value
# , to_char(to_timestamp(block_timestamp), :time_format) as time from polygon_labels
# where label='moonworm-alpha'
# and address=:address
# and label_data->>'name'='Transfer'
# and block_timestamp >= extract(epoch from now() - interval :time_range)::int
# ) interval_transfers
# GROUP BY time
# """
# try:
# # Create
# client.create_query(
# token=args.moonstream_token,
# name="cu-volume",
# query=query,
# )
# except Exception as e:
# pass
def run_tokenomics_queries_handler(args: argparse.Namespace):
@ -261,41 +300,71 @@ def run_tokenomics_queries_handler(args: argparse.Namespace):
# token=args.moonstream_token,
# ).queries:
query_name = "cu-volume"
params = {}
query_name = "cu_voluem"
# if (
# query.name == "cu-bank-withdrawals-total"
# or query.name == "cu-bank-withdrawals-events"
# ):
# blocktimestamp = int(time.time())
#
params = {"time_format": "YYYY-MM-DD HH24:00:00", "time_range": "24 hours"}
### Run voluem query
keep_going = True
ranges = [
{"time_format": "YYYY-MM-DD HH24", "time_range": "24 hours"},
{"time_format": "YYYY-MM-DD HH24", "time_range": "7 days"},
{"time_format": "YYYY-MM-DD", "time_range": "30 days"},
]
if_modified_since_datetime = datetime.datetime.utcnow()
if_modified_since = if_modified_since_datetime.strftime("%a, %d %b %Y %H:%M:%S GMT")
addresess = {
"0x64060aB139Feaae7f06Ca4E63189D86aDEb51691": "ERC20", # UNIM
"0x431CD3C9AC9Fc73644BF68bF5691f4B83F9E104f": "ERC20", # RBW
"0xdC0479CC5BbA033B3e7De9F178607150B3AbCe1f": "NFT", # unicorns
"0xA2a13cE1824F3916fC84C65e559391fc6674e6e8": "NFT", # lands
}
data_url = client.exec_query(
token=args.token,
query_name=query_name,
params=params,
) # S3 presign_url
while keep_going:
data_response = requests.get(
data_url,
headers={"If-Modified-Since": if_modified_since},
timeout=10,
)
# push to s3
for address, type in addresess.items():
for range in ranges:
if data_response.status_code == 200:
json.dumps(data_response.json())
break
else:
# You can put a sleep in here if you want
continue
params = {
"address": address,
"type": type,
"time_format": range["time_format"],
"time_range": range["time_range"],
}
keep_going = True
repeat = 0
if_modified_since_datetime = datetime.datetime.utcnow()
if_modified_since = if_modified_since_datetime.strftime(
"%a, %d %b %Y %H:%M:%S GMT"
)
data_url = client.exec_query(
token=args.moonstream_token,
name=query_name,
params=params,
) # S3 presign_url
print(f"Data URL: {data_url.url}")
while keep_going:
time.sleep(2)
data_response = requests.get(
data_url.url,
headers={"If-Modified-Since": if_modified_since},
timeout=10,
)
# push to s3
if data_response.status_code == 200:
# print(json.dumps(data_response.json()))
client.upload_query_results(
json.dumps(data_response.json()),
"data.moonstream.to",
f'dev/{query_name}/{address}/{range["time_range"].replace(" ","_")}/data.json',
)
break
repeat += 1
if repeat > 20:
print("Too many retries")
break
def list_user_queries_handler(args: argparse.Namespace):
@ -306,7 +375,7 @@ def list_user_queries_handler(args: argparse.Namespace):
client = Moonstream()
queries = client.list_queries(
token=args.token,
token=args.moonstream_token,
)
for query in queries.queries:
@ -320,7 +389,7 @@ def delete_user_query(args: argparse.Namespace):
client = Moonstream()
id = client.delete_query(
token=args.token,
token=args.moonstream_token,
name=args.name,
)
@ -356,8 +425,9 @@ def generate_game_bank_report(args: argparse.Namespace):
)
data_url = client.exec_query(
token=args.token,
token=args.moonstream_token,
query_name=query.name,
params=params,
) # S3 presign_url
while keep_going:
data_response = requests.get(
@ -473,3 +543,97 @@ def main():
if __name__ == "__main__":
main()
"""
Select
difference.address,
(
difference.transfers_in - difference.transfers_out
) as owned_nfts,
block_timestamp as last_activity,
opensea_sales
from
(
SELECT
total.address,
sum(total.transfer_out) as transfers_out,
sum(total.transfer_in) as transfers_in,
max(total.block_timestamp) as block_timestamp,
sum(total.is_opensea_sale) as opensea_sales
from
(
SELECT
label_data -> 'args' ->> 'from' as address,
jsonb_array_elements(label_data -> 'args' -> 'values') :: int as transfer_out,
0 as transfer_in,
block_timestamp as block_timestamp,
CASE
WHEN to_address in (
select
addresses
from
OpenSea_contracts
) THEN 1
ELSE 0
END as is_opensea_sale
from
erc_1155_721_contracts_transfers_with_trashhold_ethereum,
OpenSea_contracts
where
label_data ->> 'name' = 'TransferBatch'
UNION
ALL
SELECT
label_data -> 'args' ->> 'from' as address,
(label_data -> 'args' ->> 'value') :: int as transfer_out,
0 as transfer_in,
block_timestamp as block_timestamp,
CASE
WHEN to_address in (
select
addresses
from
OpenSea_contracts
) THEN 1
ELSE 0
END as is_opensea_sale
from
erc_1155_721_contracts_transfers_with_trashhold_ethereum,
OpenSea_contracts
where
label_data ->> 'name' = 'TransferSingle'
UNION
ALL
select
label_data -> 'args' ->> 'to' as address,
0 as transfer_out,
(label_data -> 'args' ->> 'value') :: int as transfer_in,
block_timestamp as block_timestamp,
0 as is_opensea_sale
from
erc_1155_721_contracts_transfers_with_trashhold_ethereum,
OpenSea_contracts
where
label_data ->> 'name' = 'TransferSingle'
UNION
ALL
select
label_data -> 'args' ->> 'to' as address,
0 as transfer_out,
jsonb_array_elements(label_data -> 'args' -> 'values') :: int as transfer_in,
jsonb_array_elements(label_data -> 'args' -> 'ids') ::
block_timestamp as block_timestamp,
0 as is_opensea_sale
from
erc_1155_721_contracts_transfers_with_trashhold_ethereum,
OpenSea_contracts
where
label_data ->> 'name' = 'TransferBatch'
) as total
group by
address
) difference
order by
owned_nfts desc
"""