Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 0 additions & 35 deletions starter_kit/__main__.py

This file was deleted.

74 changes: 74 additions & 0 deletions starter_kit/main.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
import logging
import os
import random
from typing import cast

from dotenv import load_dotenv
load_dotenv()

import requests
from web3 import Web3, HTTPProvider
from web3.exceptions import ContractLogicError
from web3.middleware import Middleware, SignAndSendRawMiddlewareBuilder

from tasks import tasks

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger("starter_kit")

def create_web3_provider(rpc_url: str) -> Web3:
try:
w3 = Web3(HTTPProvider(rpc_url))
if not w3.is_connected():
raise ConnectionError(f"Web3 failed to connect to {rpc_url}")
return w3
except Exception as e:
raise RuntimeError(f"Could not connect to RPC URL {rpc_url}. Reason: {e}")

primary_rpc = os.getenv("RPC_URL")
fallback_rpc = os.getenv("FALLBACK_RPC_URL")

if not primary_rpc:
logger.critical("RPC_URL not found in environment (.env file).")
exit(1)

try:
w3 = create_web3_provider(primary_rpc)
except Exception as e:
logger.error(e)
if fallback_rpc:
logger.warning("Trying fallback RPC...")
try:
w3 = create_web3_provider(fallback_rpc)
except Exception as e2:
logger.critical(f"Fallback RPC failed too. {e2}")
exit(1)
else:
exit(1)

private_key = os.getenv("SENDER_PRIVATE_KEY")
if not private_key:
logger.critical("SENDER_PRIVATE_KEY not found in environment (.env file).")
exit(1)

sender_account = w3.eth.account.from_key(private_key)
w3.eth.default_account = sender_account.address

signer_middleware = cast(
Middleware, SignAndSendRawMiddlewareBuilder.build(sender_account)
)
w3.middleware_onion.add(signer_middleware)

logger.info("== Running Tasks ==")

for _ in range(10_000):
task = random.choice(tasks)
logger.info(f"Running task: {task.__name__}")
try:
task(w3)
except ContractLogicError as e:
logger.warning(f"Contract logic error: {e}")
except requests.exceptions.RequestException as e:
logger.error(f"Network error: {e}")
except Exception as e:
logger.error(f"Unhandled error: {e}")
25 changes: 16 additions & 9 deletions starter_kit/params.py
Original file line number Diff line number Diff line change
@@ -1,19 +1,26 @@
import os
from typing import cast

from autonity.constants import AUTONITY_CONTRACT_ADDRESS
from eth_typing import ChecksumAddress
from web3 import Web3
from dotenv import load_dotenv # ✅ Load environment variables

# ✅ Load variables from .env file
load_dotenv()

# ✅ Manually define AUTONITY_CONTRACT_ADDRESS
AUTONITY_CONTRACT_ADDRESS = cast(ChecksumAddress, "0xEf9b191E098Bf009fFe0eAb0E7E1053e1266D236")

# Token and contract addresses
NTN_ADDRESS = AUTONITY_CONTRACT_ADDRESS
USDCX_ADDRESS = cast(ChecksumAddress, "0xB855D5e83363A4494e09f0Bb3152A70d3f161940")
WATN_ADDRESS = cast(ChecksumAddress, "0xcE17e51cE4F0417A1aB31a3c5d6831ff3BbFa1d2")
UNISWAP_ROUTER_ADDRESS = cast(ChecksumAddress, "0x374B9eacA19203ACE83EF549C16890f545A1237b")
UNISWAP_FACTORY_ADDRESS = cast(ChecksumAddress, "0x218F76e357594C82Cc29A88B90dd67b180827c88")

UNISWAP_ROUTER_ADDRESS = cast(
ChecksumAddress, "0x374B9eacA19203ACE83EF549C16890f545A1237b"
)
UNISWAP_FACTORY_ADDRESS = cast(
ChecksumAddress, "0x218F76e357594C82Cc29A88B90dd67b180827c88"
)

# ✅ Load recipient address from .env
RECIPIENT_ADDRESS = Web3.to_checksum_address(os.environ["RECIPIENT_ADDRESS"])

# Optional: test output
if __name__ == "__main__":
print("NTN_ADDRESS:", NTN_ADDRESS)
print("RECIPIENT_ADDRESS:", RECIPIENT_ADDRESS)
Loading