"""
Object model for ERC-7730 descriptors `metadata` section.
Specification: https://github.com/LedgerHQ/clear-signing-erc7730-registry/tree/master/specs
JSON schema: https://github.com/LedgerHQ/clear-signing-erc7730-registry/blob/master/specs/erc7730-v1.schema.json
"""
from datetime import UTC, datetime
from typing import Annotated
from pydantic import Field
from pydantic_string_url import HttpUrl
from erc7730.model.base import Model
# ruff: noqa: N815 - camel case field names are tolerated to match schema
[docs]
class OwnerInfo(Model):
"""
Main contract's owner detailed information.
The owner info section contains detailed information about the owner or target of the contract / message to be
clear signed.
"""
legalName: str = Field(
title="Owner Legal Name",
description="The full legal name of the owner if different from the owner field.",
min_length=1,
examples=["Tether Limited", "Lido DAO"],
)
lastUpdate: datetime | None = Field(
default=None,
title="Last Update of the contract / message",
description="The date of the last update of the contract / message.",
examples=[datetime.now(UTC)],
)
url: HttpUrl = Field(
title="Owner URL",
description="URL with more info on the entity the user interacts with.",
examples=[HttpUrl("https://tether.to"), HttpUrl("https://lido.fi")],
)
[docs]
class TokenInfo(Model):
"""
Token Description.
A description of an ERC20 token exported by this format, that should be trusted. Not mandatory if the
corresponding metadata can be fetched from the contract itself.
"""
name: str = Field(
title="Token Name",
description="The token display name.",
min_length=1,
max_length=255, # TODO: arbitrary value, to be refined
examples=["Tether USD", "Dai Stablecoin"],
)
ticker: str = Field(
title="Token Ticker",
description="A short capitalized ticker for the token, that will be displayed in front of corresponding "
"amounts.",
min_length=1,
max_length=10, # TODO: arbitrary value, to be refined
pattern=r"^[a-zA-Z0-9_\\-\\.]+$",
examples=["USDT", "DAI", "rsETH"],
)
decimals: int = Field(
title="Token Decimals",
description="The number of decimals of the token ticker, used to display amounts.",
ge=0,
le=255,
examples=[0, 18],
)
EnumDefinition = Annotated[
dict[str, str],
Field(
title="Enum Definition",
description="A mapping of enum values to human readable strings.",
examples=[{"1": "stable", "2": "variable"}],
min_length=1,
max_length=32,
),
]