Source code for erc7730.convert.calldata.convert_erc7730_input_to_calldata

from pydantic_string_url import HttpUrl

from erc7730.common.output import ConsoleOutputAdder
from erc7730.convert.calldata.v1.descriptor import (
    convert_descriptor,
)
from erc7730.model.calldata.descriptor import CalldataDescriptor
from erc7730.model.input.context import InputContractContext
from erc7730.model.input.descriptor import InputERC7730Descriptor
from erc7730.model.input.lenses import get_chain_ids


[docs] def erc7730_descriptor_to_calldata_descriptors( input_descriptor: InputERC7730Descriptor, source: HttpUrl | None = None, chain_id: int | None = None ) -> list[CalldataDescriptor]: """ Generate output calldata descriptors from input ERC-7730 descriptor with contract context. If descriptor is invalid, an empty list is returned. If the descriptor is partially invalid, a partial list is returned. Errors are logged as warnings. :param input_descriptor: input descriptor :param source: source of the descriptor file :param chain_id: if set, only emit calldata descriptors for given chain IDs :return: output calldata descriptors (1 per chain + selector) """ out = ConsoleOutputAdder() try: if not isinstance(input_descriptor.context, InputContractContext): return [] if chain_id is not None and chain_id not in get_chain_ids(input_descriptor): return [] return convert_descriptor(input_descriptor=input_descriptor, source=source, chain_id=chain_id, out=out) except Exception: out.warning(f"Error processing ERC-7730 file {source}, skipping it") return []