kopia lustrzana https://github.com/bugout-dev/moonstream
added ens name and ens address resolver
rodzic
9e02e969ba
commit
8be1b7948c
|
@ -7,6 +7,8 @@ import uuid
|
|||
import boto3 # type: ignore
|
||||
from bugout.data import BugoutSearchResults
|
||||
from bugout.journal import SearchOrder
|
||||
from ens.utils import is_valid_ens_name
|
||||
from eth_utils.address import is_address
|
||||
from moonstreamdb.models import (
|
||||
EthereumLabel,
|
||||
)
|
||||
|
@ -74,25 +76,56 @@ def get_contract_source_info(
|
|||
return None
|
||||
|
||||
|
||||
def get_ens_name(web3: Web3, address: str) -> Optional[str]:
|
||||
try:
|
||||
checksum_address = web3.toChecksumAddress(address)
|
||||
except:
|
||||
raise ValueError(f"{address} is invalid ethereum address is passed")
|
||||
try:
|
||||
ens_name = web3.ens.name(checksum_address)
|
||||
return ens_name
|
||||
except Exception as e:
|
||||
reporter.error_report(e, ["web3", "ens"])
|
||||
logger.error(
|
||||
f"Cannot get ens name for address {checksum_address}. Probably node is down"
|
||||
)
|
||||
raise e
|
||||
|
||||
|
||||
def get_ens_address(web3: Web3, name: str) -> Optional[str]:
|
||||
|
||||
if not is_valid_ens_name(name):
|
||||
raise ValueError(f"{name} is not valid ens name")
|
||||
|
||||
try:
|
||||
ens_checksum_address = web3.ens.address(name)
|
||||
if ens_checksum_address is not None:
|
||||
ordinary_address = ens_checksum_address.lower()
|
||||
return ordinary_address
|
||||
return None
|
||||
except Exception as e:
|
||||
reporter.error_report(e, ["web3", "ens"])
|
||||
logger.error(f"Cannot get ens address for name {name}. Probably node is down")
|
||||
raise e
|
||||
|
||||
|
||||
def get_ethereum_address_info(
|
||||
db_session: Session, web3: Web3, address: str
|
||||
) -> Optional[data.EthereumAddressInfo]:
|
||||
|
||||
if not is_address(address):
|
||||
raise ValueError(f"Invalid ethereum address : {address}")
|
||||
|
||||
address_info = data.EthereumAddressInfo(address=address)
|
||||
|
||||
try:
|
||||
address_info.ens_name = get_ens_name(web3, address)
|
||||
except:
|
||||
pass
|
||||
|
||||
etherscan_address_url = f"https://etherscan.io/address/{address}"
|
||||
etherscan_token_url = f"https://etherscan.io/token/{address}"
|
||||
blockchain_com_url = f"https://www.blockchain.com/eth/address/{address}"
|
||||
try:
|
||||
checksum_address = web3.toChecksumAddress(address)
|
||||
try:
|
||||
ens_name = web3.ens.name(checksum_address)
|
||||
address_info.ens_name = ens_name
|
||||
except:
|
||||
logger.warning(
|
||||
f"Cannot get ens name for address {ens_name}. Probably node is down"
|
||||
)
|
||||
except:
|
||||
raise ValueError("Invalid address is passed")
|
||||
|
||||
coinmarketcap_label: Optional[EthereumLabel] = (
|
||||
db_session.query(EthereumLabel)
|
||||
|
|
|
@ -38,6 +38,60 @@ async def addressinfo_handler(
|
|||
return response
|
||||
|
||||
|
||||
@router.get(
|
||||
"/ethereum/ens_name",
|
||||
tags=["ens_name"],
|
||||
response_model=str,
|
||||
)
|
||||
async def ens_name_handler(
|
||||
address: str,
|
||||
web3: Web3 = Depends(yield_web3_provider),
|
||||
) -> Optional[str]:
|
||||
try:
|
||||
response = actions.get_ens_name(web3, address)
|
||||
except ValueError as e:
|
||||
raise MoonstreamHTTPException(
|
||||
status_code=400,
|
||||
detail=str(e),
|
||||
internal_error=e,
|
||||
)
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to get ens name: {e}")
|
||||
raise MoonstreamHTTPException(
|
||||
status_code=500,
|
||||
internal_error=e,
|
||||
detail="Currently unable to get ens name",
|
||||
)
|
||||
return response
|
||||
|
||||
|
||||
@router.get(
|
||||
"/ethereum/ens_address",
|
||||
tags=["ens_address"],
|
||||
response_model=str,
|
||||
)
|
||||
async def ens_address_handler(
|
||||
name: str,
|
||||
web3: Web3 = Depends(yield_web3_provider),
|
||||
) -> Optional[str]:
|
||||
try:
|
||||
response = actions.get_ens_address(web3, name)
|
||||
except ValueError as e:
|
||||
raise MoonstreamHTTPException(
|
||||
status_code=400,
|
||||
detail=str(e),
|
||||
internal_error=e,
|
||||
)
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to get ens address: {e}")
|
||||
raise MoonstreamHTTPException(
|
||||
status_code=500,
|
||||
internal_error=e,
|
||||
detail="Currently unable to get ens address",
|
||||
)
|
||||
return response
|
||||
|
||||
|
||||
@router.get(
|
||||
"/labels/ethereum",
|
||||
tags=["labels"],
|
||||
|
|
Ładowanie…
Reference in New Issue