moonstream/backend/moonstreamapi/web3_provider.py

49 wiersze
1.3 KiB
Python

import logging
import boto3 # type: ignore
from web3 import Web3
from .settings import (
MOONSTREAM_ETHEREUM_WEB3_PROVIDER_URI,
MOONSTREAM_INTERNAL_HOSTED_ZONE_ID,
MOONSTREAM_NODE_ETHEREUM_IPC_PORT,
)
logger = logging.getLogger(__name__)
def fetch_web3_provider_ip():
r53 = boto3.client("route53")
r53_response = r53.list_resource_record_sets(
HostedZoneId=MOONSTREAM_INTERNAL_HOSTED_ZONE_ID,
StartRecordName=f"{MOONSTREAM_ETHEREUM_WEB3_PROVIDER_URI}.",
StartRecordType="A",
)
try:
r53_records = r53_response["ResourceRecordSets"]
if r53_records[0]["Name"] != f"{MOONSTREAM_ETHEREUM_WEB3_PROVIDER_URI}.":
return None
record_value = r53_records[0]["ResourceRecords"][0]["Value"]
except Exception as e:
logger.error(e)
return None
return record_value
if not MOONSTREAM_ETHEREUM_WEB3_PROVIDER_URI.replace(".", "").isnumeric():
web3_provider_ip = fetch_web3_provider_ip()
if web3_provider_ip is None:
raise ValueError("Unable to extract web3 provider IP")
else:
web3_provider_ip = MOONSTREAM_ETHEREUM_WEB3_PROVIDER_URI
moonstream_web3_provider = Web3(
Web3.HTTPProvider(f"http://{web3_provider_ip}:{MOONSTREAM_NODE_ETHEREUM_IPC_PORT}")
)
def yield_web3_provider() -> Web3:
return moonstream_web3_provider