Merge branch 'Extentions-metrics' of github.com:bugout-dev/moonstream into Extentions-metrics

pull/421/head
yhtiyar 2021-11-15 18:01:18 +03:00
commit 845b768c45
1 zmienionych plików z 38 dodań i 17 usunięć

Wyświetl plik

@ -9,6 +9,8 @@ import time
from datetime import datetime, timedelta
from enum import Enum
from typing import Any, Callable, Dict, List
from pprint import pprint
import traceback
from web3.datastructures import T
@ -19,7 +21,12 @@ from sqlalchemy import Column, Date, and_, func, text
from sqlalchemy.orm import Query, Session
from sqlalchemy.sql.operators import in_op
from ..blockchain import get_block_model, get_label_model, get_transaction_model, connect
from ..blockchain import (
get_block_model,
get_label_model,
get_transaction_model,
connect,
)
from ..data import AvailableBlockchainType
from ..settings import (
MOONSTREAM_ADMIN_ACCESS_TOKEN,
@ -365,6 +372,7 @@ def generate_data(
return response_labels
def cast_to_python_type(evm_type: str) -> Callable:
if evm_type.startswith(("uint", "int")):
return int
@ -402,8 +410,6 @@ def stats_generate_handler(args: argparse.Namespace):
s3_client = boto3.client("s3")
# Already processed
already_processed = []
@ -432,30 +438,37 @@ def stats_generate_handler(args: argparse.Namespace):
abi_functions = [item for item in abi_json if item["type"] == "function"]
abi_events = [item for item in abi_json if item["type"] == "event"]
abi_external_calls = [item for item in abi_json if item["type"] == "external_call"]
abi_external_calls = [
item for item in abi_json if item["type"] == "external_call"
]
pprint(abi_external_calls)
external_calls = []
for external_call in abi_external_calls:
try:
func_abi = []
func_input_abi = []
input_args = []
for func_input in external_call["inputs"]:
func_abi.append({"name":func_input["name"], "input": func_input["type"]})
input_args.append(cast_to_python_type(func_input["type"])(func_input["value"]))
func_abi["outputs"] = external_call["outputs"]
func_input_abi.append(
{"name": func_input["name"], "input": func_input["type"]}
)
input_args.append(
cast_to_python_type(func_input["type"])(func_input["value"])
)
func_input_abi.extend(external_call["outputs"])
external_calls.append(
{
{
"display_name": external_call["display_name"],
"address": Web3.toChecksumAddress(external_call["address"]),
"name": external_call["name"],
"abi": func_abi,
"abi": func_input_abi,
"input_args": input_args,
}
)
except Exception as e:
print(f"Error processing external call: {e}")
web3_client = connect(blockchain_type)
# {
# "type": "external_call"
@ -477,15 +490,23 @@ def stats_generate_handler(args: argparse.Namespace):
# }
# }
extention_data = []
extention_data = []
pprint(external_calls)
for extcall in external_calls:
try:
contract = web3_client.eth.contract(address=extcall['address'], abi=extcall['abi'])
response = contract.functions[extcall['name']](*extcall['inputs']).call()
extention_data.append({"display_name" : extcall['display_name'], "value": response})
except Exception as e:
print(f"Failed to call {extcall['name']}")
contract = web3_client.eth.contract(
address=extcall["address"], abi=extcall["abi"]
)
response = contract.functions[extcall["name"]](
*extcall["input_args"]
).call()
extention_data.append(
{"display_name": extcall["display_name"], "value": response}
)
except Exception as e:
traceback.print_exc()
print(f"Failed to call {extcall['name']} error: {e}")
for timescale in [timescale.value for timescale in TimeScale]: