kopia lustrzana https://github.com/bugout-dev/moonworm
added ability to watch cu-land
rodzic
ca9e1f80eb
commit
cc9bfe664d
|
@ -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)
|
||||
|
|
|
@ -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"], "")
|
||||
|
|
|
@ -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
Ładowanie…
Reference in New Issue