Skip to content

Commit

Permalink
contract listing CLI by registry parsing
Browse files Browse the repository at this point in the history
  • Loading branch information
KPrasch committed Aug 7, 2024
1 parent 07ce241 commit 9279a95
Show file tree
Hide file tree
Showing 2 changed files with 75 additions and 0 deletions.
9 changes: 9 additions & 0 deletions deployment/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -156,3 +156,12 @@ def registry_filepath_from_domain(domain: str) -> Path:
raise ValueError(f"No registry found for domain '{domain}'")

return p


def get_chain_name(chain_id: int) -> str:
"""Returns the name of the chain given its chain ID."""
for ecosystem_name, ecosystem in networks.ecosystems.items():
for network_name, network in ecosystem.networks.items():
if network.chain_id == chain_id:
return f"{ecosystem_name} {network_name}"
raise ValueError(f"Chain ID {chain_id} not found in networks.")
66 changes: 66 additions & 0 deletions scripts/list_contracts.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
#!/usr/bin/python3


from itertools import groupby

import click
from ape.cli import ConnectedProviderCommand

from deployment.constants import SUPPORTED_TACO_DOMAINS
from deployment.registry import read_registry
from deployment.utils import get_chain_name, registry_filepath_from_domain


def format_chain_name(chain_name):
"""
Format the chain name to capitalize each word and join with slashes.
"""
return "/".join(word.capitalize() for word in chain_name.split())


def get_registry_entries(selected_domain):
"""
Parse the registry files for the given domain or all supported domains.
"""
registry_entries = []

for domain in SUPPORTED_TACO_DOMAINS:
if selected_domain and selected_domain != domain:
continue
registry_filepath = registry_filepath_from_domain(domain=domain)
entries = read_registry(filepath=registry_filepath)
registry_entries.append((domain, entries))

return registry_entries


def display_registry_entries(registry_entries):
"""
Display registry entries grouped by chain ID.
"""
for domain, entries in registry_entries:
grouped_entries = groupby(entries, key=lambda entry: entry.chain_id)
click.secho(f"\n{domain.capitalize()} Domain", fg="green")

for chain_id, chain_entries in grouped_entries:
chain_name = format_chain_name(get_chain_name(chain_id))
click.secho(f"{chain_name}", fg="yellow")

for index, entry in enumerate(chain_entries, start=1):
click.secho(f" {index}. {entry.name} {entry.address}", fg="cyan")


@click.command(cls=ConnectedProviderCommand, name="list-contracts")
@click.option(
"--domain",
"-d",
help="TACo domain",
type=click.Choice(SUPPORTED_TACO_DOMAINS),
)
def cli(domain):
registry_entries = get_registry_entries(domain)
display_registry_entries(registry_entries)


if __name__ == "__main__":
cli()

0 comments on commit 9279a95

Please sign in to comment.