added ability to watch cu-land

cu-lands-watch
yhtiyar 2021-12-16 21:14:27 +03:00
rodzic ca9e1f80eb
commit cc9bfe664d
4 zmienionych plików z 1124 dodań i 9 usunięć

Wyświetl plik

@ -10,7 +10,7 @@ from web3.middleware import geth_poa_middleware
from moonworm.crawler.ethereum_state_provider import Web3StateProvider
from moonworm.watch import watch_contract
from .contracts import CU, ERC20, ERC721
from .contracts import CU, ERC20, ERC721, CULands
from .crawler.networks import Network
from .generators.basic import (
generate_contract_cli_content,
@ -166,7 +166,8 @@ def handle_watch_cu(args: argparse.Namespace) -> None:
with open(args.abi, "r") as ifp:
contract_abi = json.load(ifp)
else:
contract_abi = CU.abi()
print("Using CULand abi since no abi is specified")
contract_abi = CULands.abi()
web3 = Web3(Web3.HTTPProvider(args.web3))
web3.middleware_onion.inject(geth_poa_middleware, layer=0)

Wyświetl plik

@ -8,6 +8,7 @@ _PATHS = {
"erc1155": "fixture/abis/OwnableERC1155.json",
"erc721": "fixture/abis/OwnableERC721.json",
"cu": "fixture/abis/CUContract.json",
"cu_land": "fixture/abis/CULands.json",
},
"bytecode": {
"erc20": "fixture/bytecodes/OwnableERC20.bin",
@ -39,3 +40,4 @@ ERC20 = MoonwormContract(_PATHS["abi"]["erc20"], _PATHS["bytecode"]["erc20"])
ERC721 = MoonwormContract(_PATHS["abi"]["erc721"], _PATHS["bytecode"]["erc721"])
ERC1155 = MoonwormContract(_PATHS["abi"]["erc1155"], _PATHS["bytecode"]["erc1155"])
CU = MoonwormContract(_PATHS["abi"]["cu"], "")
CULands = MoonwormContract(_PATHS["abi"]["cu_land"], "")

Wyświetl plik

@ -1,11 +1,14 @@
import json
import logging
import os
import pprint as pp
import re
import time
from os import stat
from re import S
from typing import Any, Dict, List, Optional, cast
from sqlalchemy.sql.expression import delete
from web3.middleware import geth_poa_middleware
import web3
from eth_typing.evm import ChecksumAddress
from moonstreamdb.db import yield_db_session_ctx
@ -82,7 +85,7 @@ def _add_function_call_labels(
try:
if existing_function_call_labels:
logger.info(
f"Deleting {len(existing_function_call_labels)} existing tx labels:\n{existing_function_call_labels}"
f"Deleting {len(existing_function_call_labels)} existing tx labels"
)
session.commit()
except Exception as e:
@ -127,6 +130,7 @@ def _add_event_labels(
"""
transactions = [event["transactionHash"] for event in events]
log_indexes = [event["logIndex"] for event in events]
for ev in events:
print(ev)
existing_event_labels = (
@ -141,14 +145,15 @@ def _add_event_labels(
)
# deletin existing labels
deleted = 0
for label in existing_event_labels:
session.delete(label)
if label.log_index in log_indexes:
deleted += 1
session.delete(label)
try:
if existing_event_labels:
logger.error(
f"Deleting {len(existing_event_labels)} existing event labels:\n{existing_event_labels}"
)
if deleted > 0:
logger.error(f"Deleting {deleted} existing event labels")
session.commit()
except Exception as e:
try:
@ -205,6 +210,30 @@ class MockState(FunctionCallCrawlerState):
self.state = []
WEB3_PROVIDER_URL_1 = os.environ.get("WEB3_PROVIDER_URL_1", "")
WEB3_PROVIDER_URL_2 = os.environ.get("WEB3_PROVIDER_URL_2", "")
WEB3_PROVIDER_URL_3 = os.environ.get("WEB3_PROVIDER_URL_3", "")
if WEB3_PROVIDER_URL_1 == "" or WEB3_PROVIDER_URL_2 == "" or WEB3_PROVIDER_URL_3 == "":
raise ValueError(
"Please set WEB3_PROVIDER_URL_1, WEB3_PROVIDER_URL_2, WEB3_PROVIDER_URL_3"
)
WEB3_PROVIDER_URLS = [
WEB3_PROVIDER_URL_1,
WEB3_PROVIDER_URL_2,
WEB3_PROVIDER_URL_3,
]
CURR_INDEX = 0
def get_web3_client():
global CURR_INDEX
CURR_INDEX = (CURR_INDEX + 1) % len(WEB3_PROVIDER_URLS)
web3 = Web3(Web3.HTTPProvider(WEB3_PROVIDER_URLS[CURR_INDEX]))
web3.middleware_onion.inject(geth_poa_middleware, layer=0)
return web3
def watch_cu_contract(
web3: Web3,
contract_address: ChecksumAddress,
@ -263,12 +292,16 @@ def watch_cu_contract(
while True:
try:
web3 = get_web3_client()
session.execute("select 1")
time.sleep(sleep_time)
end_block = min(
web3.eth.blockNumber - num_confirmations, current_block + 100
)
if end_block < current_block + min_blocks_to_crawl:
logger.info(
f"Sleeping crawling, end_block {end_block} < current_block {current_block} + min_blocks_to_crawl {min_blocks_to_crawl}"
)
sleep_time += 1
continue
@ -311,6 +344,7 @@ def watch_cu_contract(
current_block = end_block + 1
except Exception as e:
logger.error(f"Something went wrong: {e}")
web3 = get_web3_client()
logger.info(f"Trying to recover from error")
for i in range(10):
logger.info(f"Attempt {i}:")

Plik diff jest za duży Load Diff